利用 rsync 在服务器间同步目录实现多点站群
利用 rsync 在服务器间同步目录实现多点站群
Sandy场景
主服务器: 192.168.1.1
站群服务器A: 192.168.1.2
站群服务器B: 192.168.1.3
要将 主服务器的 /home/wwwroot 目录同步到 站群服务器A /home/wwwroot 下
要将 主服务器的 /home/www 目录同步到 站群服务器B /home/www 下
执行环境
主服务操作系统: centos 7.X
站群服务器AB: Ubuntu 14.x/16.x
配置
我们将使用 rsync 的 daemon 方式来完成任务
登录到 A 服务器,执行
1 | vi /etc/rsyncd.conf |
添加
1 | uid = root |
保存文件 :wq!
执行
1 | vi /etc/rsyncd.pwd |
添加
1 | backup:sandyliao |
backup为用户和rsyncd.conf里面的用户要一致,sandyliao为密码
保存退出,执行
1 | chmod 600 /etc/rsyncd.pwd |
启动 rsync 服务 执行
1 | rsync --daemon |
登录 站群服务器 ,执行
1 | vi /etc/rsyncd.pwd |
添加
1 | sandyliao #这为主服务器密码 |
保存退出,执行
1 | chmod 600 /etc/rsyncd.pwd |
好了,配置已经完成了,现在 主 服务器为服务端 ,站群服务器AB为客户端,现在就可以在 AB 服务器上执行同步操作了
主服务配置说明
1 | uid = root #设置执行rsync的本地用户 |
站群服务器开始同步
登录 站群A 服务器,执行
1 | #例子 |
1 | rsync -avzP --password-file=/etc/rsyncd.pwd backup@192.168.1.1::wwwroot /home/wwwroot |
登录 站群B服务器,执行
1 | rsync -avzP --password-file=/etc/rsyncd.pwd backup@192.168.1.1::www /home/www |
注意
1.如果 /home/下 wwwroot 目录不存在将会创建,如果已经存在了, 会将 主服务器机器上的 /home/wwwroot 目录下的内容同步到 站群服务器A机器上的 /home/wwwroot/ 下
2.假如 A 机器上有一个文件/home/wwwroot/1.txt , 在第二次执行同步时没有修改,则不会同步
3.假如 B 机器上有一个文件/home/wwwroot/2.txt , A 上没有,同步时不会被删除
4.如果 B 机器上有一个文件/home/wwwroot/1.txt 被修改了,同步时会被 A 上对应的文件覆盖
扩展
如果要同步别的目录,只需要修改 A 服务器上的 /etc/rsyncd.conf 将 logs 部分修改或者复制一份,改成你想同步的目录就可以了,
One more thing
下面是 rsync 的语法说明:
rsync [-avrlptgoD] [-e ssh] [user@host:/dir] [/local/path]
-v :观察模式,可以列出更多的信息;
-q :与 -v 相反,安静模式,输出的信息比较少;
-r :递归复制!可以针对『目录』来处理!很重要!
-u :仅更新 (update),不会覆盖目标的新档案;
-l :复制连结文件的属性,而非连结的目标源文件内容;
-p :复制时,连同属性 (permission) 也保存不变!
-g :保存源文件的拥有群组;
-o :保存源文件的拥有人;
-D :保存源文件的装置属性 (device)
-t :保存源文件的时间参数;
-I :忽略更新时间 (mtime) 的属性,档案比对上会比较快速;
-z :加上压缩的参数!
-e :使用的信道协议,例如使用 ssh 通道,则 -e ssh
-a :相当于 -rlptgoD ,所以这个 -a 是最常用的参数了!
最后为了让他每个小时同步一次我们还需要用到crontab
1 | crontab -e |
每隔1小时的第一分钟执行一次任务
Ubuntu 下命令
1 | #crontab常用命令 |
Centos 7 下命令
1 | #crontab常用命令 |
