【系统运维】数据同步工具rsync使用教程
一、Rsync工具介绍
rsync是一款数据同步工具,不管是应用配置文件还是各种数据文件,都可以通过本地传输、scp远程传输、守护进程传输三种工作模式来实现数据同步,还可以集合inotify工具来实时同步。在数据的传输过程中可以采用增量同步的方式,节约带宽,提升效率。在Linux系统下安装rsync只需要通过一条yum命令即可完成
yum install rsync -y #服务端和客户端都需要安装
二、Rsync常用选项
-a:最常用的选项,等同于rtogpDl一起使用,可以实现递归传输并保持所有属性(实测发现如果服务端是Windows,只能用-r选项,使用-a选项会出错)
-v:显示传输过程
-z:数据在传输过程中进行压缩,和tar命令里的-z作用一样(实际测试会影响传输效率)
-r:递归传输,传输目录需要该参数
-t:保持文件时间信息一致,如果目标服务器的文件时间和源服务器文件时间一致则不会传送
-o:保持文件属主信息
-p:保持文件权限信息
-g:保持文件所属组信息
-D:Devices,代表保持设备文件的信息
-l:保持软连接信息,大写的-L会把软连接的源文件也拷贝过去
-e:指定使用的信道协议,如'ssh -p 22'
--delete:强制目标和源数据一致,如果某文件在目标服务器存在而源服务器不存在的话,会删除该文件
--exclude:过滤指定文件,支持通配符
三、Rsync命令示例
· 使用rsync实现本地数据传输(和cp命令一样,一般不会这样用)
rsync -avz /etc/fstab /bak/ #拷贝fstab文件到/bak目录下
rsync -avz --exclude=test1.txt --exclude=test3.txt /root root@192.168.1.1:/bak #排除指定文件不进行传输
· 使用rsync实现远程数据传输
#拉取数据(从远端服务器拷贝到本地服务器)
rsync -rgtopDl root@192.168.1.1:/etc/fstab /bak/
#推送数据(从本地服务器拷贝到远端服务器)
rsync -rgtopDl -e 'ssh -p 22' /etc/fstab root@192.18.1.1:/bak/
· 以守护进程模式工作(如将服务器A为备份服务器,其他客户端推送数据到服务器A)
1、编辑配置文件/etc/rsyncd.conf,该文件若不存在则手动创建
uid = root #rsync用户运行时的身份
gid = root
use chroot = yes # 安全相关
max connections = 2000 # 并发连接数
timeout = 600 # 超时时间(秒)
pid file =/var/run/rsyncd.pid # 指定rsync的pid目录
lock file =/var/run/rsync.lock # 指定rsync的锁文件
log file = /var/log/rsyncd.log # 指定rsync的日志目录
ignore errors
read only = false
list = false #禁止列出模块信息
hosts allow = 10.* #白名单主机
hosts deny = 0.0.0.0/32
auth users = rsync_backup #rsync虚拟用户,该用户可不存在于系统中
secrets file =/etc/rsync.password #rsync虚拟用户密码文件
###########################模块#######################
[dbb] #模块名,客户端需要指定该模块
path = /data2/bak/dbb #模块对应的存放路径
[git]
path = /data2/bak/git
2、创建secrets file一项指定的文件,文件名可以自定义,必须为600权限。在该文件中写入auth users一项中定义的用户名与密码,用户名密码用冒号分隔。该文件也需要在客户端存在,不过有一个区别,客户端的密码文件只用写密码即可,服务端的密码文件要写用户名:密码
echo "rsync_backup:12345678" >> /etc/rsync.password
3、上一步设置的密码文件是明文的,需要修改权限为600,否则后面服务也会报错
chmod 600 /etc/rsync.password
4、启动rsync服务,运行后记得查看端口,rsync默认端口是873
rsync --daemon
5、客户端推送数据测试:
rsync -avz --progress --delete /data/git/gitlab-data-bak/backups/ rsync_backup@10.4.0.222::git
6、上面的命令需要交互输入密码才可以传输数据,如果是用作备份脚本的话就无法实现了,不过也有解决办法,在执行rsync命令时加上--password-file选项来指定密码文件,客户端的密码文件只用写密码就可以了,然后文件权限需要改为600:
rsync -avz --progress --delete --password-file=/etc/rsync.password /data/git/gitlab-data-bak/backups/ rsync_backup@10.4.0.222::git
四、Windows系统中配置rsync
要在Windows下使用rsync的话使用的软件是cwRsync,在配置上会有部分出入。最主要的就是路径的识别方式会不一样,cwRsync不能直接识别磁盘,必须加上/cygdrive/这样的路径,比如/cygdrive/g/test=g:\test
五、rsync服务排错思路
1、检查配置文件路径是否正确,默认路径是/etc/rsyncd.conf
2、检查配置文件host allow,host deny允许的网段是否为客户端IP地址
3、检查配置文件path参数对应的目录是否存在,权限是否正确
4、检查rsync服务是否启动,ps aux | grep rsync
5、检查iptables和selinux是否为关闭状态
6、检查rsync配置用户和密码的文件权限是否为600,格式是否正确,文件路径和secrect files参数是否一致
7、如果是推送数据,检查配置文件中的用户是否对目标目录拥有写权限
评论