利用 rsync 在服务器间同步目录实现多点站群


场景

主服务器: 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 服务器,执行

vi /etc/rsyncd.conf

添加

uid = root
gid = root
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[wwwroot]
path = /home/wwwroot
ignore errors
read only = true
list = true
auth users = backup
secrets file = /etc/rsyncd.pwd

[www]
path = /home/www
ignore errors
read only = true
list = true
auth users = backup
secrets file = /etc/rsyncd.pwd

保存文件 :wq!

执行

vi /etc/rsyncd.pwd

添加

backup:sandyliao

backup为用户和rsyncd.conf里面的用户要一致,sandyliao为密码

保存退出,执行

chmod 600 /etc/rsyncd.pwd 

启动 rsync 服务 执行

rsync --daemon

登录 站群服务器 ,执行

vi /etc/rsyncd.pwd

添加

sandyliao #这为主服务器密码

保存退出,执行

chmod 600 /etc/rsyncd.pwd 

好了,配置已经完成了,现在 主 服务器为服务端 ,站群服务器AB为客户端,现在就可以在 AB 服务器上执行同步操作了

主服务配置说明

uid = root #设置执行rsync的本地用户
gid = root #设置执行rsync的本地组
max connections = 4 #最大同时连接数
pid file = /var/run/rsyncd.pid #指定rsync服务进程的pid file
lock file = /var/run/rsync.lock #指定rsync服务端锁定文件log file = /var/log/rsyncd.log #指定rsync的log输出路径

[wwwroot] #模块设定,可设置多个模块
path = /home/wwwroot #同步文件的真实路径
ignore errors
read only = true #是否只读
list = true
auth users = backup #身份验证用户。这不是系统用户,而是rsync服务自定的
secrets file = /etc/rsyncd.pwd #当前模块的密码文件

站群服务器开始同步

登录 站群A 服务器,执行

#例子

rsync -avzP --password-file=/etc/rsyncd.pwd 用户名@主服务器IP::远程配置名称  本机目录

 

rsync -avzP --password-file=/etc/rsyncd.pwd backup@192.168.1.1::wwwroot  /home/wwwroot

登录 站群B服务器,执行

 

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

crontab -e
1 */1 * * * rsync -avzP --password-file=/etc/rsyncd.pwd backup@192.168.1.1::wwwroot  /home/wwwroot

1 */1 * * * rsync -avzP --password-file=/etc/rsyncd.pwd backup@192.168.1.1::www  /home/www

每隔1小时的第一分钟执行一次任务

Ubuntu 下命令

#crontab常用命令

service cron start #crontab启动

service cron stop #crontab 停止

service cron restart #crontab重新启动

service cron status #crontab 状态

crontab -l  #crontab 任务列表

Centos 7 下命令

#crontab常用命令

/bin/systemctl start crond.service #crontab启动

/bin/systemctl stop crond.service #crontab 停止

/bin/systemctl restart crond.service #crontab重新启动

/bin/systemctl status crond.service #crontab 状态

crontab -l  #crontab 任务列表

 

声明:Sandy'Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 利用 rsync 在服务器间同步目录实现多点站群


一流的吃貨,二流的廚藝,三流的技術,下流的人品