1.概述
rsync(Remote Sync) 是一个Unix/linux系统下的文件同步和传输工具
2.端口和运行模式
tcp/873
采用C/S模式(客户端/服务器模式)
3.特点
- 可以镜像保存整个目录和文件
- 第一次全量备份(备份全部的文件),之后是增量备份(只备份变化的文件)
4. 数据同步方式
- 推(push)
本地将数据发送到远程服务器
- 拉(pull)
远程服务器获取数据到本地
5.rsync命令
-
基本用法
rsync 选项 源文件位置 目标文件位置
-
选项
-a,--archive 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于-rlptgoD -r,–recursive 对子目录以递归模式处理,即同步所有下面的数据 -l,--links 表示拷贝链接文件 -p , --perms 表示保持文件原有权限 -t , --times 表示保持文件原有时间 -g , --group 表示保持文件原有属用户组 -o , --owner 表示保持文件原有属主 -D , --devices 表示块设备文件信息 -z , --compress 表示压缩传输 -H 表示硬连接文件 -A 保留ACL属性信息(需配合-p选项) -P 显示传输进度 -u, --update 仅仅进行更新,也就是跳过所有已经存在于目标位置,并且文件时间晚于要备份的文件。(不覆盖更新的文件) --port=PORT 定义rsyncd(daemon)要运行的Port(预设为tpc 873) --delete 删除那些目标位置有而原始位置没有的文件 --password-file=FILE 从FILE中得到密码 --bwlimit=KBPS 限制I/O带宽,KBytes /second --filter “-filename” 需要过滤的文件 --exclude=filename :需要过滤的文件 -v 显示同步过程的详细信息 #常用的-avz #补充:如果传输的特别大的文件,就不要用z 参数,因为压缩和解压比较耗时
-
示例
#格式1 rsync 选项 rsync://用户名@同步源服务器IP:/共享模块名 目标目录 rsync -avz --delete rsync://backuper@192.168.98.143:/test /test #--delete 是删除服务端(下面实验的主机A)没有的文件 #格式2 rsync 选项 用户名@同步源服务器IP::共享模块名 目标目录 rsync -avz --delete backuper@192.168.98.143::test /test
6.实验
主机 | ip 地址 |
---|---|
A | 192.168.98.143 |
B | 192.168.98.140 |
(1).数据同步
-
在主机A上编写rcync的配置文件
vim /etc/rsyncd.conf uid = root gid = root address = 192.168.98.143 #写的是本机的ip地址否则服务无法启动 use chroot = yes port = 873 #定义端口 hosts allow = 192.168.98.0/24 #定义允许访问的地址 max connections = 4 pid file = /var/run/rsyncd.pid #进程id文件 lock file = /var/run/rsyncd.lock #日志文件 log file = /var/log/rsyncd.log #锁文件 motd file = /etc/rsyncd.motd #消息文件 [backup] #模块名 path = /test #备份路径 comment = backup area #描述 read only = yes #是否只读 list = yes #是否隐藏模块列表 auth users = b1 #备份所使用的用户 secrets file = /etc/rsync.passwd #校验文件,包含用户名和密码的文件,用户名是 auth users的值
-
创建描述文件和校验文件
echo "I am backup server" > /etc/rsyncd.motd #创建描述文件 echo "b1:123456" >> /etc/rsync.passwd #创建用户名和密码文件 chmod 600 /etc/rsyncd.passwd #设置校验文件的权限,不设置会报错
-
开启服务
rsync --daemon --config=/etc/rsyncd.conf #指定配置文件并启动服务 ss -anputl | grep 873 #查看服务是否启动 systemctl stop firewalld setforce 0 iptables -F #关闭防火墙
-
主机B测试
sync -avz --delete b1@192.168.98.143::backup /test #输入/etc/rsync.passwd中定义的密码 #免密备份 vim /etc/rsync.passwd #在主机B上创建文件 123456 #只写密码不写用户名,输入/etc/rsync.passwd中定义的密码 chmod 600 /etc/rsync.passwd #修改文件权限否则会报错 sync -avz --delete b1@192.168.98.143::backup /test --password-file=/etc/rsync.passwd #指定密码文件
(2).实时数据同步(rsync+sersync)
目的:将主机B的数据实时同步到主机A上
-
修改主机A的rsync的配置文件
uid = root gid = root address = 192.168.98.143 use chroot = yes port = 873 hosts allow = 192.168.98.0/24 max connections = 4 pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock log file = /var/log/rsyncd.log motd file = /etc/rsyncd.motd [backup] path = /test comment = backup area read only = false #在上述实验的基础上只修改这里 list = yes auth users = b1 secrets file = /etc/rsync.passwd
-
主机B安装sersync
#使用tar包解压后直接使用 tar -xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /opt/ mv /opt/GNU-Linux-x86 /opt/sersync #修改文件名 #修改配置文件 vim /opt/sersync/confxml.xml #修改第24-28行 <localpath watch="/monitored"> #本地监控目录 <remote ip="192.168.98.143" name="backup"/> #主机A(rsync主机的ip),模块名 <!--<remote ip="192.168.8.39" name="tongbu"/>--> <!--<remote ip="192.168.8.40" name="tongbu"/>--> </localpath> #修改第31-34行 <commonParams params="-artuz"/> <auth start="true" users="b1" passwordfile="/etc/rsync.passwd"/> #users是备份使用的用户,rsync配置文件中定义的用户, passwordfile就是rsync的校验文件,包含用户名和密码 <userDefinedPort start="false" port="874"/><!-- port=874 --> <timeout start="false" time="100"/><!-- timeout=100 --> <ssh start="false"/>
-
主机B开启守护进程同步数据
#创建校验文件,修改权限 echo "123456" > /etc/rsync.passwd && chmod 600 /etc/rsync.passwd /opt/sersync/sersync2 -d -r -o /opt/sersync/confxml.xml #开启服务,停止服务使用kill命令 mkdir /monitored && echo "hello linux !!!" >> /monitored/1.txt #更改监听的目录查看是否会同步到主机A