rsync
什么是rsync
rsync一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、rsync主机同步。
三种主要的传输数据的方式
1. 单个主机本地之间的数据传输
2. 借助rcp, ssh等通道来传输数据
3. 以守护进程(socket)的方式传输数据(需要服务端客户端配合, centos中自带了客户端)
单个主机本地之间的数据传输:
#将a目录内容同步到b目录 rsync -r a b #将/etc/hosts文件复制到/tmp/目录下 rsync /etc/hosts /tpm/
借助ssh通道来传输数据:
#将a目录下内容复制到远程主机的~/b目录下 rsync -r a/ -e 'ssh -p 22' huangxm@192.168.0.138:~/b #将目录a复制到远程主机的~/b目录下,注意与上面的区别 rsync -r a -e 'ssh -p 22' huangxm@192.168.0.138:~/b
它相当与scp命令,同时也需要手动输入密码;如果不想手动输入密码,可以使用sshpass, 这样我们就可以写入crontab,做到定时同步
#安装sshpass yum install -y sshpass #同步目录a和远程主机的目录b rsync -r a/ -e 'sshpass -pgoitinfo ssh -p22' huangxm@192.168.0.138:~/b
常用参数
-v 详细模式输出,给出传输进度等信息
-z 压缩传输 --compress-level=NUM 指定压缩级别 1-9, 9是最大压缩级别
-a 以归档方式传输,保留文件属性
-r 递归传输
-t 保持文件时间信息
-o 保持文件属主信息
-p 保持文件权限
-g 保持文件属组信息
-P 显示同步过程及进度等信息
-D 保持设备文件信息
-l 保持软链接
这些参数加起来等于 –a
-e 使用的信道协议,如ssh
--exclude=PATTERN 指定排除不需要传输的文件
--exclude-from=FILE 排除FILE中记录的文件
--delete 保证两边数据完全一样,如果源里没有该文件,就在目标目录删除
说明:
-avz 相当于 –vzrtopgDl
生产环境中常用: –avz 或 –vzrtopg
守护进程模式:
安装服务端:
#yum install rsync
配置文件:/etc/rsyncd.conf
vim /etc/rsyncd.conf uid = rsync #用户id gid = rsync use chroot = no #安全性,内网一般不考虑,设为no max connections = 200 #最多有多少个客户端连接我 timeout = 300 #超时时间,秒 pid file = /var/run/rsyncd.pid #pid文件 lock file = /var/run/rsync.lock #传输时会给文件加锁 log file = /var/log/rsyncd.log #日志文件 [test] #模块 path = /test/ #客户端来同步,就是同步该目录 ignore errors #传输过程中遇到错误,自动忽略 read only = false #可读可写 list = false #不允许列表 hosts allow = 10.0.0.0/24 #允许的IP段 hosts deny = 0.0.0.0/32 #拒绝 auth users = rsync_backup #这是个虚拟用户 secrets file = /etc/rsync.password #虚拟用户对应的密码文件
创建系统用户rsync用来启动服务
useradd rsync -s /sbin/nologin 授权 chown -R rsync.rsync /test
在/etc/rsync.password中添加虚拟用户
echo "rsync_backup:1234" > /etc/rsync.password
用户名和密码用:分隔。
设置权限密码文件权限
chmod 600 /etc/rsync.password
启动服务端, 以守护进程方式
#rsync --daemon
端口: tcp 873
添加开机启动
echo "/usr/bin/rsync --daemon" >> /etc/rc.local
客户端:
客户端只需要密码文件,文件里只存放密码:
echo "1234" > /etc/rsync.password
设置文件权限:
chmod 600 /etc/rsync.password
从服务端拉取文件:
rsync -avz rsync_backup@10.0.0.7::/test /data --password-file=/etc/rsync.password
注意:test是指test模块,也就是服务端配置文件中的[test];而且有两个冒号。
或者使用rsync协议
rsync -avz rsync://rsync_backup@10.0.0.7/test /data --password-file=/etc/rsync.password
往服务端推送文件:
rsync -avz /data/ rsync_backup@10.0.0.7::/test --password-file=/etc/rsync.password
排除指定文件和目录
排除文件a:
rsync -avz --exclude=a /data/ rsync_backup@10.0.0.7::/test --password-file=/etc/rsync.password
排除多个文件:
rsync -avz --exclude={a,b} /data/ rsync_backup@10.0.0.7::/test --password-file=/etc/rsync.password
也可以将要排除的文件和目录写入一个文件,一行一个:
vim excefile.conf
test.py *.log dir1
使用—exclude-from
rsync -avz --exclude-from=excefile.conf /data/ rsync_backup@10.0.07::/test --password-file=/etc/rsync.password
在服务端设置要排除的文件:
在配置文件中加上:
exclude=a b c/d #c/d是指c目录下的d
重启:
kill `cat /var/run/rsyncd.pid`
rsync –daemon
服务器端共享多个目录
uid = rsync #用户id gid = rsync use chroot = no #安全性,内网一般不考虑,设为no max connections = 200 #最多有多少个客户端连接我 timeout = 300 #超时时间,秒 pid file = /var/run/rsyncd.pid #pid文件 lock file = /var/run/rsync.lock #传输时会给文件加锁 log file = /var/log/rsyncd.log #日志文件 ignore errors #传输过程中遇到错误,自动忽略 read only = false #可读可写 list = false #不允许列表 hosts allow = 10.0.0.0/24 #允许的IP段 hosts deny = 0.0.0.0/32 #拒绝 auth users = rsync_backup #这是个虚拟用户 secrets file = /etc/rsync.password #虚拟用户对应的密码文件 [test] #模块 path = /test/ #客户端来同步,就是同步该目录 [data] path = /data/
写配置文件时,尽量把相同的配置放到公共区域,自己特有的放到自己的模块下。