linux之rsync服务
rsync服务
- 数据同步,分本地模式,远程模式
- 全量备份相当于cp ,scp
- 增量备份,源文件同步到目标文件,目标有的不会再次同步
基本使用
# 源文件 带/ 表示拷贝opt目录下的全部文件到目标服务器 ;不带/ 表示拷贝opt目录 到目标服务器
rsync -avz /opt/ root@10.0.0.41:/tmp
远程访问模式
# 推送目标 可写域名 IP 主机名 -P 是显示传输速度
[root@web01 opt]# rsync -avzP *.txt root@backup:/opt
# 拉去目标 到本地
[root@web01 opt]# rsync -avz root@bakcup:/opt/*.txt .
ssh: Could not resolve hostname bakcup: Name or service not known
rsync: connection unexpectedly closed () [Receiver]
rsync error: unexplained error (code 255) at io.c(226) [Receiver=3.1.3]
[root@web01 opt]# rsync -avz root@backup:/opt/*.txt .
Authorized users only. All activities may be monitored and reported.
root@backup's password:
receiving incremental file list
a.txt
b.txt
rsync参数
-a, --archive archive mode; equals -rlptgoD
-v, --verbose increase verbosity #(详细信息)
-z, --compress compress file data during the transfer #(压缩文件传输)
-P same as --partial --progress #显示同步的过程及传输时的进度等信息
--bwlimit=RATE limit socket I/O bandwidth #(限制传输速度 --bwlimit=1 就是传输速度1M/s)
--exclude=PATTERN exclude files matching PATTERN #(推送时排除那些文件不上传)
--exclude-from=FILE read exclude patterns from FILE #(从文件读取那些文件不上传)
--include-from=FILE read include patterns from FILE #(推送从文件读取需要推送的文件)
--files-from=FILE read list of source-file names from FILE #(推送只包含的文件)
--password-file=FILE read daemon-access password from FILE #(守护进程模式,客户端传输时,可以指定密码文件,密码文件权限为600)
--delete delete extraneous files from destination dirs #保持本地和推送的目录内容一致
--partial keep partially transferred files # 断点续传
--delete 同步
# 以客户端目录为准 服务器端的文件/opt 要与 ./下的文件保持一致 ;./有的文件 /opt没有会发送/opt ;/opt有的 ./没有,会删除/opt下的
[root@web01 opt]# rsync -avz --delete ./ root@backup:/opt
--password-file密码文件
# 只要服务端是以守护进程模式才可以使用密码文件
[root@web01 opt]# rsync -avz --password-file=/opt/rsync.pwd ./ root@backup:/opt
The --password-file option may only be used when accessing an rsync daemon.
rsync error: syntax or usage error (code 1) at main.c(1393) [sender=3.1.3]
rsync守护进程模式
1. 在服务端安装rsync服务,客户端安装不需要启动
2. 配置
3. 创建必要的目录文件
4. 启动服务
5. 测试
# 安装 启动服务是rsyncd
[root@backup opt]# yum -y install rsync
[root@backup opt]# systemctl start rsyncd.service
# 监听端口 873
[root@backup opt]# ss -lntup |grep rsync
tcp LISTEN 0 5 0.0.0.0:873
# 配置文件
[root@backup opt]# rpm -qc rsync
/etc/rsyncd.conf
# 配置文件内容
uid = rsync #需要手动创建该虚拟用户
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup # 客户端推送服务端 连接的用户
secrets file = /etc/rsync.passwd # 当客户端以rsync_backup用户来连接 服务端验证读取的该文件 密码文件权限为600
log file = /var/log/rsyncd.log
#####################################
[backup] # 从客户端推送文件到 服务端的/backup目录下 客户连接时 rsync_backup@192.168.1.1::backup (模块名)
path = /backup
# 创建虚拟用户rsync
[root@backup opt]# useradd rsync -M -s /sbin/nologin
# 创建密码文件并修改权限为600属主用户有rw权限
[root@backup opt]# vi /etc/rsync.passwd
[root@backup opt]# chmod 600 /etc/rsync.passwd
# 创建服务端推送的目录/backup 当用户推送文件到服务端时,rsync_backup认证用户的服务所在的进程rsyncd,以rsync虚拟用户写入服务端,默认是root创建的/backup,属主属组都是root,权限为 755 ,o位置,rsync用户无写入权限,所以修改/bakcup目录的属主属组为rsync
[root@backup opt]# mkdir /backup
[root@backup opt]# chown rsync.rsync /backup/
# 修改完配置重启服务 检测服务端口监听是否正常
[root@backup opt]# systemctl restart rsyncd.service
[root@backup opt]# ss -lntup |grep 873
tcp LISTEN 0 5 0.0.0.0:873
# 客户端测试推送文件到服务端 (这时通过客户端测试配置文件和创建的文件都没问题,还是无法联通,可能就是防火墙的问题)
[root@web01 opt]# rsync -avz /etc/hosts --password-file=/opt/rsync.pwd rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41 (172.16.1.41): No route to host (113) # 开启了防火墙
rsync error: error in socket IO (code 10) at clientserver.c(128) [sender=3.1.3]
[root@web01 opt]# rsync -avz /etc/hosts --password-file=/opt/rsync.pwd rsync_backup@172.16.1.41::backup^C
[root@web01 opt]# rsync -avz /etc/hosts --password-file=/opt/rsync.pwd rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41 (172.16.1.41): Connection refused (111) # rsyncd服务未开启
# 客户端推送 --password-file 只要服务端开启rsyncd服务才能使用此参数 且rsync.pwd文件权限为600
[root@web01 opt]# rsync -avz /etc/hosts --password-file=/opt/rsync.pwd rsync_backup@172.16.1.41::backup
sending incremental file list
hosts
sent 165 bytes received 43 bytes 416.00 bytes/sec
total size is 178 speedup is 0.86
# 客户端推送 使用变量RSYNC_PASSWORD=123456 仅在当前命令行有效,且服务端是守护进程,::指定模块
[root@web01 opt]# export RSYNC_PASSWORD=123456
[root@web01 opt]# rsync -avz /etc/passwd rsync_backup@backup::backup
sending incremental file list
passwd
sent 841 bytes received 43 bytes 1,768.00 bytes/sec
total size is 1,845 speedup is 2.09
# 修改rsyncd服务端 配置文件如下
[root@backup backup]# tail -n2 /etc/rsyncd.conf
[data]
path = /data
# 创建data目录 并修改属主属组为rsync
[root@backup backup]# mkdir /data && chown rsync.rsync /data
# 测试从客户端推送文件到 服务端新创建的data模块
[root@web01 opt]# export RSYNC_PASSWORD=123456
[root@web01 opt]# rsync -avz /etc/hosts rsync_backup@backup::data
sending incremental file list
hosts
sent 165 bytes received 43 bytes 416.00 bytes/sec
total size is 178 speedup is 0.86
[root@web01 opt]#
#注意 服务记得加上开机自启
systemctl enable rsyncd.service
案例
1.客户端提前准备存放的备份的目录,目录规则如
下:/backup/web01_172.16.1.7_2018-09-02 date +%F
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝
至/backup/web01_172.16.1.7_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器 守护进程
4.客户端每天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
export RSYNC_PASSWORD=123456
hostname=`hostname`
ip=`hostname -I |awk '{print $1}'`
time=`date +%F`
dir="$hostname/$ip/$time"
mkdir -p /backup/${dir}
tar -zcfP /backup/${dir}/etc.tar.gz /etc/* &>/dev/null
rsync -avz /backup/${dir}/etc.tar.gz rsync_backup@backup::data
crontab -e
00 01 * * * /bin/bash /opt/tar_rsync.sh
find /backup/${dir}/ -mtime +7 |xargs -i rm -f {}
服务端
shell编程在盘它 zabbix 微信接收校验结果。
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除
rsync的远程模式、守护进程模式,安装、配置、创建文件及对应的权限,测试使用
Never try,never know