利用 rsync 在服务器间同步目录

全栈 shanhuhai 10400℃

场景

服务器 A 192.168.1.1
服务器 B 192.168.1.2
要将 A 服务器的 /data/logs 目录同步到 B 服务器的 /home/logs 下

执行环境

操作系统: centos 6.2

配置

我们将使用 rsync 的 daemon 方式来完成任务
登录到 A 服务器,执行 vim /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

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

保存文件,执行vim /etc/rsyncd.pwd ,添加

backup:dahouduan.com

保存退出,执行 chmod 600 /etc/rsyncd.pwd
启动 rsync 服务 执行 rsync --daemon
登录 B 服务器 ,执行 vim /etc/rsyncd.pwd ,添加

dahouduan.com

保存退出,执行 chmod 600 /etc/rsyncd.pwd
好了,配置已经完成了,现在 A 服务器为服务端 B 服务器为客户端,现在就可以在 B 服务器上执行同步操作了

配置说明

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输出路径

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

开始同步

登录 B 服务器,执行

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

so easy!

注意

1.如果 /home/下 logs 目录不存在将会创建,如果已经存在了, 会将 A 机器上的 /data/logs 目录下的内容同步到 B 机器上的 /home/logs/ 下
2.假如 A 机器上有一个文件 /home/logs/1.txt , 在第二次执行同步时没有修改,则不会同步
3.假如 B 机器上有一个文件 /home/logs/2.txt , A 上没有,同步时不会被删除
4.如果 B 机器上有一个文件 /home/logs/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 是最常用的参数了!

转载请注明:大后端 » 利用 rsync 在服务器间同步目录

喜欢 (1)or分享 (0)