1,Rsync介绍
rsync:是一个远程同步传输工具,可通过LAN/WAN快速通过多台主机之间的文件
rsync通过“rsync算法”来远程同步传输两个主机之间不同的文件。而不需要传输已经有的文件来达到快速传输同步文件的目的
端口:873
模式:C/S
2,应用场景
备份方式:
全量备份: 备份所有的文件
增量备份: 备份与上一次备份增加的文件
应用场景:
1)本端传输到对端
2)对端传输到本端
3)分层模式
4)云服务器中转
rsync与cp命令和scp命令的区别?
cp:在一个主机内复制数据,不能实现主机与主机之间
scp:可以实现主机与主机之间的远程复制数据,但不能实现只复制增量文件
scp -r /root 172.16.1.41:/root/
将本端的数据复制到172.16.1.41主机的/root目录下
scp -r 172.16.1.41:/root/ /root
将172.16.1.41主机的/root目录下的数据复制到本端
3,rsync三种模式
1)本地模式
2)远程模式
3)服务模式
创建测试数据文件:
1)dd if=/dev/zero of=/root/1G.txt bs=1M count=1024
for i in {1..10}
do
echo "S{i}" > /root/test_${i}.txt
done
1)本地模式 rsync -avzP /root/ /tmp
类似与cp的命令 rsync -azvP a.txt /tmp
2)远程模式 rsync -avzP /root/ 172.16.1.41:/root/
将本地/root目录下的数据远程同步到172.16.1.41端的/root目录下 rsync -avzP 172.16.1.41:/root/ /root
将172.16.1.41端/root目录下的数据同步到本端/root目录下
a 表示以递归方式传输文件,并保持所有文件属性
v 详细模式输出
z 对备份的文件在传输时进行压缩处理
P 显示传输速率
3)服务模式
1)安装
yum -y install rsync
rpm -qc rsync 查看服务的配置文件
2)配置
1,创建统一的用户和组www uid=666 gid=666
2,修改配置文件(服务端)
uid = rsync #rsync使用的用户,默认nobody
gid = rsync #rsync使用的gid 默认nobody
use chroot = no #是否限定在该目录下,默认为true,当有软连接时,需要改为fasle,如果为 #true就限定为模块默认目录,通常都在内网使用rsync所以不配也可以 max connections = 200 #设置最大连接数timeout = 300 #超时时间 建议300-600
pid file = /var/run/rsyncd.pid #pid文件位置
lock file = /var/run/rsync.lock #指定lock文件用来支持“max connections ”参数使总连接不会超过限制
log file = /var/log/rsyncd.log #日志文件路径
ignore errors #忽略io错误 (最好注释或者不要配上去,有了这个代码,错误信息不回输入进日志文件,只是显示在屏幕上,不利于排错)
read only = false #指定客户端是否可以上传文件,默认
truelist = false #是否允许客户端查看可用模块
hosts allow = 192.168.253.0/24 #允许连接的ip段或个别ip,默认任何人都可以连接
hosts deny = 0.0.0.0/32 #不允许连接的IP段或个别ip
auth users = rsync_backup #匿名用户严重登录
secrets file = /etc/rsync.password #指定用户名和密码文件
格式: 用户名:密码 密码不超过8位#这个是密码文件 权限最好是600 [backup] comment = "this is a comment" #此参数指定在客户端获取可用模块列表时显示在模块名称旁边的描述字
path = /backup #模块在服务端的绝对路径
3,配置密码文件和服务端存放数据目录
4)客户端远程备份数据到Rsync服务端成功
备份数据在服务端显示用户和组都是www
注意:rsync服务搞清楚root用户和配置文件里的www用户以及登录的虚拟用户rsync_backup之间的关系
1)通过ps -aux|grep rsync可以看到rsync服务的deamon是root用户在运行
2)当数据在传输的过程中式www用户在执行
3)rsync_backup用户的功能仅仅是在登录的时候做验证功能
4,如何实现免密登录远程复制,同时在定时任务中的应用场景 (客户端)
方法一:
方法二:
通过环境变量预先定义好虚拟用户登录密码,export RSYNC_PASSWOR="oldboy"。
这是临时生效,可以写在脚本里,放定时任务里就可以实现免密自动备份!