事先的准备,2台Redhat 6.3虚拟机,主机名和IP地址如下:
mylinux 192.168.198.100 rsync服务器端
mylinux2 192.168.198.101 rsync客户端
一、rsync服务端配置
以mylinux为例,查看一下虚拟机的信息,这里看到rsync是已经安装好了的,版本为3.0.6.
在mylinux上编辑rsync的配置文件/etc/rsyncd.conf(该文件默认不存在,需要手工创建),详细信息如图所示,下面是其中配置参数的实际意义。
uid=root // 运行RSYNC守护进程的用户
gid=root // 运行RSYNC守护进程的组
use chroot = no // 不使用chroot
max connections = 200 // 最大连接数200
timeout = 300 // 超时时长300秒
pid file = /var/run/rsyncd.rid // 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 = 192.168.198.0/24 // 允许进行数据同步的主机或地址段
hosts deny = 0.0.0.0/32 // 拒绝进行数据同步的主机或地址段
auth users = rsync_backup // 认证的rsync用户名
secrets file = /etc/rsync.password // 对应上面rsync用户的密码文件
创建镜像目录,此处为/backup, 然后创建认证用户rsync_backup的密码文件,这里的rsync_backup是为了使用rsync而设置的虚拟用户,并非系统用户。然后为了提高安全性,需要将密码文件权限设置为600。
这里以守护进程的方式打开rsync服务,可以使用ps -ef|grep rsync检查进程是否正在运行,当然也可以使用netstat命令查看rsync的端口号是否在执行监听来确认,然后通过lsof -i tcp:873我们也可以确认rsync服务正在运行。
如果需要设置rsync开机启动,可以添加以下这条命令,在开机启动脚本中执行启动命令:
echo "/usr/bin/rsync --daemon" >> /etc/rc.local
至此,服务器端的操作已经完成,下面要切换到客户端上进行配置。
二、rsync客户端配置
在mylinux2上切换到root用户下,创建rsync用户密码文件,这里的密码文件中只保存密码即可。注意,创建完成后,最好将密码文件的权限设置为600.
在mylinux2上创建一个用于数据同步的目录/tmp/test/,然后创建文件,完成之后查看该目录下的文件。使用的命令如下:
rsync -avz -P /tmp/test/ rsync_backup@mylinux::backup/ -password-file=/etc/rsync.password
然后执行rsync命令,看到成功将本地目录/tmp/test/目录下的文件同步到远端mylinux中的/backup/目录下,我们也可以到mylinux上进行查看。
可以看到,在mylinux2上创建的文件已经同步过来了。
继续在mylinux2上创建一个新的文件hello,txt, 然后使用rsync同步。这次不使用上面的命令,也就是不用模块定义的方式,而是指定同步的路径,写法如下:
rsync -avz -P /tmp/test/ rsync://rsync_backup@mylinux:/backup/ -password-file=/etc/rsync.password
从上图中看到,这次rsync只同步了hello.txt这一个文件,这是因为rsync支持增量同步,仅对更新过的文件进行同步,所以同步效率大大提高。
再回到mylinux上,已经看到hello.txt文件了。
上面都是从本地同步数据到远端服务器,下面将数据从远端同步到本地,使用如下命令:
rsync -avz -P rsync_backup@mylinux::backup/ /tmp/ --password-file=/etc/rsync.password
从执行结果看到,已经从mylinux上同步/backup/目录中的文件到本地的/tmp/目录下了。
使用ls命令可以看到,在/tmp/目录下已经同步了远端的数据,将/tmp/test/目录下的文件删除,下面使用另外一种方式从远端同步数据到本地。
这次使用的不是认证模块,而是远程同步目录,命令如下;
rsync -avz -P rsync://rsync_backup@mylinux:/backup/ /tmp/ --password-file=/etc/rsync.password
同样的,也成功将数据同步到了本地。
上图中,在使用rsync同步从本地同步数据到远端时使用了delete参数,这样就会把远端目标目录中存在而本地目录中不存在的文件删除,强制跟本地目录进行同步,一般不使用该参数;如果需要使用该参数,请小心操作,因为如果同步的是系统目录,如/home/, / 等目录,可能会引起事故。
最后到mylinux上查看/backup/目录,其中hello.txt和abc.txt已经被删除了,所以使用delete参数需要小心操作。