rsync 配置方法

1. rsync

1.1 什么是rsync

rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。它使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。所以通常可以作为备份工具来使用。

运行Rsync server的机器也叫backup server,一个Rsync server可同时备份多个client的数据;也可以多个Rsync server备份一个client的数据。Rsync可以搭配ssh甚至使用daemon模式。Rsync server会打开一个873的服务通道(port),等待对方rsync连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。

基本特点:

  1. 可以镜像保存整个目录树和文件系统;
  2. 可以很容易做到保持原来文件的权限、时间、软硬链接等;
  3. 无须特殊权限即可安装;
  4. 优化的流程,文件传输效率高;
  5. 可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
  6. 支持匿名传输。

命令语法:
rsync的命令格式可以为以下六种:
 rsync [OPTION]… SRC DEST
 rsync [OPTION]… SRC [USER@]HOST:DEST
 rsync [OPTION]… [USER@]HOST:SRC DEST
 rsync [OPTION]… [USER@]HOST::SRC DEST
 rsync [OPTION]… SRC [USER@]HOST::DEST
 rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]

对应于以上六种命令格式,我们可以总结rsync有2种不同的工作模式:

  • shell模式:使用远程shell程序(如ssh或rsh)进行连接。当源路径或目的路径的主机名后面包含一个冒号分隔符时使用这种模式,rsync安装完成后就可以直接使用了,无所谓启动。(目前没有尝试过这个方法)
  • daemon模式:使用TCP直接连接rsync daemon。当源路径或目的路径的主机名后面包含两个冒号,或使用rsync://URL时使用这种模式,无需远程shell,但必须在一台机器上启动rsync daemon,默认端口873,这里可以通过rsync --daemon使用独立进程的方式,或者通过xinetd超级进程来管理rsync后台进程。

当rsync作为daemon运行时,它需要一个用户身份。如果你希望启用chroot,则必须以root的身份来运行daemon,监听端口,或设定文件属主;如果不启用chroot,也可以不使用root用户来运行daemon,但该用户必须对相应的模块拥有读写数据、日志和lock file的权限。当rsync以daemon模式运行时,它还需要一个配置文件——rsyncd.conf。修改这个配置后不必重启rsync daemon,因为每一次的client连接都会去重新读取该文件。

我们一般把DEST远程服务器端成为rsync Server,运行rsync命令的一端SRC称为Client。

1.2 同步测试

1.2.1 本机文件夹同步

# rsync -auvrtzopgP --progress  /root/ /tmp/rsync_bak/

会看到从/root/传输文件到/tmp/rsync_bak/的列表和速率,再运行一次会看到sending incremental file list下没有复制的内容,可以在/root/下touch某一个文件再运行看到只同步了修改过的文件。

上面需要考虑以下问题:

  • 删除/root/下的文件不会同步删除/tmp/rsync_bak,除非加入--delete选项
  • 文件访问时间等属性、读写等权限、文件内容等有任何变动,都会被认为修改
  • 目标目录下如果文件比源目录还新,则不会同步
  • 源路径的最后是否有斜杠有不同的含义:有斜杠,只是复制目录中的文件;没有斜杠的话,不但要复制目录中的文件,还要复制目录本身

1.3 同步到远程服务器

在服务器间rsync传输文件,需要有一个是开着rsync的服务,而这一服务需要两个配置文件,说明当前运行的用户名和用户组,这个用户名和用户组在改变文件权限和相关内容的时候有用,否则有时候会出现提示权限问题。配置文件也说明了模块、模块化管理服务的安全性,每个模块的名称都是自己定义的,可以添加用户名密码验证,也可以验证IP,设置目录是否可写等,不同模块用于同步不同需求的目录。

1.3.1 服务端配置文件(CentOS7.3)

** /etc/rsyncd.conf: **

 5 # configuration example:
  6 
  7  uid = root            //设置运行rsync 进程的用户
  8  gid = root
  9  use chroot = no
 10  max connections = 4
 11 # pid file = /var/run/rsyncd.pid
 12  exclude = lost+found/
 13  transfer logging = yes
 14  timeout = 900
 15  ignore nonreadable = yes         //同步时跳过没有权限的目录
 16 # dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
 17 
 18 # [ftp]
 19 #        path = /home/ftp
 20 #        comment = ftp export area
 21 [module_test]      //此名字即客户端使用rsync来同步的路径
 22 path=/temp/        //实际需要同步的路径
 23 comment=rsync test logs
 24 auth user=root     //客户端获取文件的身份此用户并不是本机中确实存在的用户
 25 secrets file=/etc/rsync.secrets    //用来认证客户端的秘钥文件 格式 USERNAME:PASSWD 权限改为600
 26 read only=no
 27 write only=no
 28 list=no
 29 host allow=*     //允许所有主机访问
这里配置socket方式传输文件,端口873,[module_test]开始定义一个模块,指定要同步的目录(接收)path,授权用户,密码文件,允许哪台服务器IP同步(发送)等。

** /etc/rsyncd.secrets: **

sean:password

1.3.3 客户端测试同步

单向同步时,客户端只需要一个包含密码的文件。
vim  /etc/rsync_client.pwd:

password

chmod 600 /etc/rsync_client.pwd

命令:
将本地/root/目录同步到远程172.29.88.223的/tmp/rsync_bak2目录(module_test指定):

/usr/bin/rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd /tmp/ rsyncuser@172.16.250.200::module_test 


当然你也可以将远程的/tmp/rsync_bak2目录同步到本地目录/root/tmp:

/usr/bin/rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd [email protected]::module_test /tmp/ 

rsync 配置方法_第1张图片

从上面两个命令可以看到,其实这里的服务器与客户端的概念是很模糊的,rsync daemon都运行在远程172.29.88.223上,第一条命令是本地主动推送目录到远程,远程服务器是用来备份的;第二条命令是本地主动向远程索取文件,本地服务器用来备份,也可以认为是本地服务器恢复的一个过程。


借鉴https://segmentfault.com/a/1190000002427568

你可能感兴趣的:(rsync)