Rsync服务搭建
1、什么是Rsync
Rsync是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。rsync是用“rsync算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是一个免费开源的软件。
2、Rsync的三种工作模式
Local: rsync [OPTION...] SRC... [DEST]Access via remote shell:Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]Push: rsync [OPTION...] SRC... [USER@]HOST:DESTAccess via rsync daemon:Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]push: rsync [OPTION...] SRC... [USER@]HOST::DESTrsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
由以上语法可知,rsync有三种工作方式:
本地文件系统上实现本地同步,命令行语法格式为上述“Local”段的格式。
本地主机使用远程shell和远程主机通信。命令行语法格式为上述“Access via remote shell”段的格式。
本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述“Access via rsync daemon”段的格式。
前两者的本质是通过管道通信,即使是远程shell。而方式3则是让远程主机上运行rsync服务,使其监听在一个端口上,等待客户端的连接,默认端口为:873。
3、Rsync应用场景
关于数据同步的两种方式
1、推:所有主机推送本地数据至rsync备份服务器,会导致数据同步缓慢(适合少量数据备份)

2、拉:Rsync备份服务端拉取所有主机上的数据,会导致备份服务器开销大

3、异地备份实现思路

4、大量服务器备份场景


4、Rsync优缺点:
Rsync优点:
增量备份,支持socker(即套接字),集中备份
远程shell通道模式还可以加密(ssh)传输,安全性上比较可靠Rsync缺点:
大量小文件同步的时候,对比时间长,有的时候,rsync进程可能会停止。
同步大文件,比如10G以上的大文件也会有问题。当网络出现波动的时候,就可能会造成同步中断。
5、Rsync命令常用选项
rsync命令参数比较多,我这边列举了经常会用到的:-v 详细模式输出,传输时的进度等信息-z 传输时进行压缩以提高传输效率-a 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgdl--bwlimit=10 限制传输速度--exclude=PATH 表示指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)--delete 让目标目录和源目录数据保持一致-L 会把软链接指向的目标文件复制到对端目录中-e 指定使用ssh还是其他方式来数据同步--password-file 指定密码文件所在的路径,可以让rsync(daemon模式)不需要密码来传输文件--partial 断点续传--exclude-from=file 文件名所在的目录文件注意:rsync同步的时候,如果要同步的是目录里面的内容,命令中目录的后面必须要加“/”如果要同步的是目录本身及其内容,则命令中只需写目录名
6、Rsync安装以及配置
(1)先安装rsyncyum -y install rsync(2)rsync的配置文件在centos6上是没有的,但是centos7上默认就有配置文件,假如现在是centos6上进行安装,首先编辑一个文件vim /etc/rsyncd.conf#rsync_configuid = rsync #用户的uidgid = rsync #用户的giduse chroot = 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 #指定日志文件[backup] #模块名称path = /backup #服务器提供访问的目录ignore errors #忽略错误read only = false #可写list = false #不能列表hosts allow = 172.16.1.0/24 #允许哪些机器来连#hosts deny = 0.0.0.0/32 #拒绝哪些机器不能连auth users = rsync_backup #指定传输时要使用的用户名secrets file = /etc/rsync.password #指定密码文件,注意:该密码文件的权限一定要是600(3)配置文件之后,需要自己创建一个用户rsyncuseradd rsync -s /sbin/nologin -M #无法访问并且没有家目录(4)开启rsync服务rsync –daemon #centos6的启动方法systemctl start rsyncd #centos7的启动方法systemctl enable rsyncd #开机自启动(5)ps -ef|grep rsync|grep -v grep #查看对应的进程有木有开启(6) 创建共享目录并授权rsync服务管理mkdir /backupchown rsync:rsync /backup/(7) 在编辑rsync的密码文件vim /etc/rsync.passwordrsync_backup:oldboy 虚拟用户:密码(8) 接下来就是给这个密码文件更改权限chmod 600 /etc/rsync.password(9)查看对应的端口有木有开启netstat -lntp|grep 873(10)加入开机自启动echo “/usr/bin/rsync –daemon”/etc/rc.localtail -1 /etc/rc.local#以上是centos6的配置#这个是centos7的配置,除了配置文件不一样,其他一致uid = rsync --- 指定管理备份目录的用户gid = rsync --- 指定管理备份目录的用户组port = 873 --- 定义rsync备份服务的网络端口号fake super = yes --- 将rsync虚拟用户伪装成为一个超级管理员用户use chroot = no --- 和安全相关的配置max connections = 200 --- 最大连接数 同时只能有200个客户端连接到备份服务器timeout = 300 --- 超时时间(单位秒)pid file = /var/run/rsyncd.pid --- 记录进程号码信息 1.让程序快速停止进程 2. 判断一个服务是否正在运行lock file = /var/run/rsync.lock --- 锁文件log file = /var/log/rsyncd.log --- rsync服务的日志文件 用于排错分析问题ignore errors --- 忽略传输中的简单错误read only = false --- 指定备份目录是可读可写list = false --- 使客户端可以查看服务端的模块信息hosts allow = 172.16.1.0/24 --- 允许传输备份数据的主机(白名单)hosts deny = 0.0.0.0/32 --- 禁止传输备份数据的主机(黑名单)auth users = rsync_backup --- 指定认证用户secrets file = /etc/rsync.password --- 指定认证用户密码文件 用户名称:密码信息[backup] --- 模块信息comment = "backup dir by oldboy"path = /backup --- 模块中配置参数 指定备份目录
7、Rsync客户端配置
(1)安装rsync软件包yum -y install rsync(2)配置密码文件,并且修改权限vim /etc/rsync.passwordoldboychmod 600 /etc/rsync.password(3)创建目录mkdir -p /backup(4)同步数据到服务端rsync -avz /backup/ rsync_backup@172.16.1.100::backup/ --password-file=/etc/rsync.passwd除了密码文件来实现免密,还可以在客户端通过设置RSYNC_PASSWORD环境变量实现密码自动输入[root@iflytek-5 ~]# export RSYNC_PASSWORD=oldboy[root@iflytek-5 ~]# rsync -avz /backup/ rsync_backup@172.16.1.100::backup/排除单个文件:rsync -avz –exclude=1 /backup/ rsync_backup@172.16.1.100::oldboy/排除多个文件rsync -avz –exclude={1,2} /backup/ rsync_backup@172.16.1.100::oldboy/注意:密码文件和秘钥文件改成600不只是为了安全考虑,很多程序或者命令里面也要求必须是600,假如不配置600的话,会造成以下问题:

[root@nfs-41 backup]# rsync -avz /backup/* rsync_backup@10.0.0.31::backup/ --password-file=/etc/rsync.passwordsending incremental file list1.txt2.txtrsync: chgrp ".1.txt.9BRZ8L" (in backup) failed: Operation not permitted (1)rsync: chgrp ".2.txt.Hp5ygX" (in backup) failed: Operation not permitted (1)sent 144 bytes received 224 bytes 147.20 bytes/sectotal size is 0 speedup is 0.00rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]#以上问题虽然不影响推送,但是一直有报错,也很难受,所以上网找了一下,加下下面两个参数即可[root@nfs-41 backup]# rsync -avz --no-o --no-g /backup/* rsync_backup@10.0.0.31::backup/ --password-file=/etc/rsync.passwordsending incremental file list1.txt2.txtsent 142 bytes received 62 bytes 31.38 bytes/sectotal size is 0 speedup is 0.00
