环境:两台centos6.8主机
A server 192.168.137.2
B client 192.168.137.10
1、在两台主机上安装rsync
yum -y install rsync
2、配置A主机,服务端
vi /etc/xinetd.d/rsync
将disable yes 改成no
vi /etc/rsyncd.conf 该文件不存在,手动生成
log file = /var/log/rsyncd.log //日志文件
pid file = /var/run/rsyncd.pid //pid文件路径
lock file = /var/rsyncd.lock //指定lock文件
secrets file = /etc/rsyncd.pas //指定用户密码对文件
motd file = /etc/rsyncd.motd //指定欢迎消息文件
read only = no //是否只读(若从客户端同步到服务器必须设置为NO)
hosts allow = 192.168.137.0/24 //允许的IP段
list = yes //是否允许列表
uid = root //rsync以什么用户身份启动
gid = root //rsync以什么用户组身份启动
use chroot = no //
max connections = 4 //最大连接数
[bak] //模块
path = /root/bak //模块目录
comment = bak //描述信息,可以任意填写
auth users = root //认证的用户,服务器必须存在这个系统用户
vi /etc/rsyncd.pas 在同步内容时的用户名和密码对文件
root:wang123
chmod 600 /etc/rsyncd.pas //权限必须为600,否则会出错
vi /etc/rsyncd.motd 内容随便写,内容仅为使用该rsync服务时的欢迎语
welcome to rsync
rsync --daemon
3、配置B主机,客户端
mkdir /root/bak 创建要备份文件的目录
vi /etc/rsync.pas 编写密码文件,内容和主机A/etc/rsyncd.pas中密码一样
wang123
chmod 600 /etc/rsync.pas
rsync [email protected]::bak //浏览主机A中的共享,可做测试
rsync -az --password-file=/etc/rsync.pas [email protected]::bak /root/bak //同步数据
至此已完成rsync的同步部署,可配合计划任务crontab计划任务来使用
遇到的坑:
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]
这个报错网上回答都是服务器端hosts allow字段授权配置的问题,但是查看了配置并无问题。最后发现,在配置文件中每项配置后不能用#的方式来写注释,这样rsync会以为#以及后面的注释也是配置的一部分,导致服务无法正常使用。
这里要特别说明一下,两种同步方式
第一种是不严格同步,方向是服务器到客户端。而且永远不删
rsync -avzP --password-file=/home/rsync.wxl.passwd [email protected]::ceshi1 /home/tongbu
第二中是危险同步,当不一致的时候,会删除服务器或客户端的多余数据,谨慎使用
rsync -avzP ( --delete) --password-file=/home/rsync.wxl.passwd [email protected]::ceshi1 /home/tongbu
-a 参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息,和-P有点关系
–execlude= 排除不需要同步的文件后缀名
–execlude-from= 排除不需要同步的目录
--existing 只对比更新目的端已经存在的档案
--ignore-existing 忽略目的断已经存在的档案(也就是不更新)
--delete 删除传送断已经不存在,而目的端存在的档案
--delete-excluded 除了把传送端已经不存在, 而目的端存在的档案删除之外, 也删除 --exclude 参数所包含的档案
--delete-after rsync预设会在档案传送前进行相关删除动作确保接收端有足够的档案空间,单可以透过 --delete-after 让删除动作在档案传送后在进行删除
--ignore-errors 忽略任何错误即使是I/O error 也进行 --delete 删除动作
-v , --verbose 复杂的输出信息