rsync实战演练
rsync是一个远程数据同步工具,可以快速同步多台主机的文件,且只同步有差异的部分.非常强大的工具
实战环境:
服务端:192.168.10.89
客户端:192.168.10.103
rsync不需要安装,默认就自带.
关于rsync的命令想法,可以参考其他笔记.
note: 以下教程都是讲述客户端从远程服务器同步数据到本地.类似于下载行为. 如果需要将本地的文件同步到远程服务器.有点类似于上传行为.则需要改变命令.
下列命令表示了上传和下载的使用区别.
note:在使用rsyn同步前必须要千万小心.因为如果命令搞反.可能会出现意外的严重后果.例如将对方的文件同步到本地数据目录
1.下列的命令将对方(192.168.10.89)的/var/www/abc目录同步到本地的/root/rsync目录下:
1 | rsync -avz --progress -e ssh root@192.168.10.89:/var/www/abc /root/rsync |
2.下列命令表示将本地的/tmp/backups目录同步到对方(192.168.10.89)的/var/www/abc目录下
1 | rsync -avz --progress /tmp/backups -e ssh root@192.168.10.89:/var/www/abc |
3.另外.如果远程服务器的ssh不是默认22端口.则需要改成:
1 | rsync -avz --progress /root/rsync -e "ssh -p 端口 " root@192.168.10.89:/var/www/abc |
Rync的使用方法介绍:
一.以服务端的方式启动rsync进程
1.编辑/etc/rsyncd.conf配置文件——-这个文件默认没有,需要自己写入
1 | vim /etc/rsyncd.conf |
2.编辑密码文件:
1 | [root@localhost ~]# cat /etc/rsync_server.pas |
Note:此文件必须为600权限.且和rsync进程的用户相同.比如如果是root启动的rsync服务.则此文件属主也必须是root
3.启动rsync服务,以daemon方式启动
1 | rsync --daemon |
rsync –daemon默认监控在873端口
1 | 默认监控在873端口: |
4.在/var/www/abc目录下写入一个测试文件夹
1 | [root@localhost ~]# cat /var/www/abc/rsync.test |
5.客户端同步文件 先定义密码.改成600权限
1 | [root@localhost ~]# cat /etc/rsync_server.pas |
Note:我在这里踩到一个大坑.客户端的密码文件只需要包含密码.不能像服务端一样指定username:password.不然会提示验证失败
6.执行rsync命令
1 | /usr/bin/rsync -avz --progress backup@192.168.10.89::www /var/www/abc/ --password-file=/etc/rsync_server.pas |
可是遇到和上面一样的坑:
1 | [root@localhost ~]# /usr/bin/rsync -avz --progress backup@192.168.10.89::www /var/www/abc/ --password-file=/etc/rsync_server.pas |
这个坑,至少坑了我5个小时.反复的确认selinux是否关闭,配置文件是否错误,密码文件和密码文件权限等最后才发现,原来配置文件的配置语句不能用注释
注释内容只能单独一行存在.修改配置文件:
1 | [root@localhost ~]# vim /etc/rsyncd.conf |
客户端重新执行命令:
1 | [root@localhost ~]# /usr/bin/rsync -avz --progress backup@192.168.10.89::www /var/www/abc/ --password-file=/etc/rsync_server.pas |
演示: 服务端文件名不修改.往文件内新增文件.观察rsync是否能实行增量同步
1.在rsync服务端内的/var/www/abc/index.html文件新增一行内容:
1 | [root@rabbitmqnode0 abc]# vim index.html |
2.客户端在原有同步后的基础上再次执行命令:可以看见.只同步了Index.html文件.其他文件并没有复制
1 | [root@rabbitmqnode1 ~]# /usr/bin/rsync -avz --progress backup@172.16.1.130::www /var/www/abc/ --password-file=/etc/rsync_server.pas |
查看文件:
1 | [root@rabbitmqnode1 ~]# cat /var/www/abc/index.html |
二.以ssh方式同步文件
1.关掉服务端的rsync进程
1 | ps -ef | grep rsync |
2.客户端直接执行命令:
1 | [root@localhost ~]# rsync -avz --progress -e ssh root@192.168.10.89:/var/www/abc /root |
-e 表示 使用ssh协议root@ 表示服务器的本地用户(注意,这里是服务器本地真实用户)..这里的用法和普通的scp命令一致
可以看到文件已经同步过来了.且权限保持一致
1 | [root@localhost ~]# ll /root/abc |
注意:ssh模式不能像rsync daemon模式那样指定一个密码文件.如果想不输入密码.只能复制本机的公钥到rsync服务端相关用户下.
Note:
1.一般在生产中 在客户端同步的时候还需要加入个 –delete参数.表示如果本机相关目录下有某个文件.而这个文件在服务端上没有.那么就删除.这是为了保持和服务端完全同步
2.一般需要写一个crontab定时任务,每5分钟同步一次
/5 * /usr/bin/rsync -avz –progress backup@192.168.10.89::www /var/www/abc/ –password-file=/etc/rsync_server.pas > /dev/null 2>&1