一、背景介绍
由于需要和其他系统进行对接。文件的逻辑地址通过接口传递,而文件的实体需要通过服务器间的同步进行传输。在同事的建议下选择了rsync。
二、RSYNC介绍
RSYNC 有多种方式进行同步,本篇文章主要叙述的是其中,两种远程服务器的同步配置。(在客户端 注意命令中“:” 冒号的个数)
要了解更多关于rsync的内容,请跳转到 http://man.linuxde.net/rsync 阅读相关文档。
三、实际操作
3.1 确认机器是否安装rsync
3.2 配置rsync的文件
以下是本次配置中rsyncd.conf的内容:
uid = root
gid = root
use chroot = no
max connections = 2000
port = 8973
timeout = 900
log file = /var/run/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log format = %t%a%m%f%b
commemt = rsync
list = yes
read only = yes
write only = no
auth users = apprsync
secrets file = /etc/rsyncd.secret
ignore errors = yes
hosts allow = 172.21.5.164
###########################之上是全局定义 之下是模块单独定义
[rsyncvideo]
path = /app/nas/video
[rsyncimage]
path = /app/nas/image
3.2.1全局定义(直接配置请跳过本段)
在rsync 服务器中,全局定义有几个比较关健的,根据我们前面所给的配置文件 rsyncd.conf 文件;
pid file = /var/run/rsyncd.pid 注:告诉进程写到 /var/run/rsyncd.pid 文件中;
port = 873 注:指定运行端口,默认是873,可以自己指定;本次这里选择了8973(在之后的客户端请求会有不一样的地方)
uid = nobody
gid = nobdoy
注:服务器端传输文件时,要发哪个用户和用户组来执行,默认是nobody。 如果用nobody 用户和用户组,可能遇到权限问题,有些文件从服务器上拉不下来。所以我就偷懒,为了方便,用了root 。不过可以在定义要同步的目录时定义的模块中指定用户来解决权限的问题。
use chroot = yes
注: 安全相关,默认为true,修改为no,增加对目录文件软连接的备份
read only = yes
注:read only 是只读选择,也就是说,不让客户端上传文件到服务器上。还有一个 write only选项, # no客户端可下载文件,yes不能下载;
max connections = 5
注:客户端最多连接数
log file = /var/log/rsync.log
注:rsync 服务器的日志;
log format = %t %a %m %f %b
注 日志格式
timeout = 300
注 超期时间
auth users = apprsync
注 执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开(此处是使用模块同步时使用到的用户名与ssh不一样)。
#limit access to private LANs
hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
注:可以指定单个IP,也可以指定整个网段,能提高安全性。格式是ip 与ip 之间、ip和网段之间、网段和网段之间要用空格隔开;
3.2.2 局部配置(直接配置请跳过本段)
由于需要同步两个不同的文件夹,所以在此处配置两个模块分别定义为 rsyncvideo 和 rsyncimage,也就是同步图片和视频的两个文件夹分别指向两个不同的地址。
3.3 创建为模块同步方式的用户和密码
我们在之前配置的时候 写入了
auth users = apprsync
secrets file = /etc/rsyncd.secret
因此我们要在 指定的路径(/etc/rsyncd.secret) 建立一个指定的用户(apprsync)即可 密码设置为123456.注意此处 需要把该文件的权限设置为600
3.4 创建为 ssh同步方式的用户和密码
由于我们这篇文章主要是讲解实现了两种同步方式。两个可以并存和单独使用。
创建用户
sudo useradd -d "/home/apprsync" -m -s "/bin/bash" apprsync
设置密码
passwd apprsync;(敲完这个命令之后两次输出)
3.5启动rsync守护进程,并写入开机自启动
设置开机自启动,写入到/etc/rc.local里面
vim /etc/rc.local
1 # rsync server progress
2 /usr/bin/rsync --daemon --config=/etc/rsyncd.conf
3.6 两种不同的客户端同步命令
3.6.1使用模块同步
同步模块rsyncimage中的内容
在之前配置的
hosts allow = 172.21.5.164 这台目标机器中
输入命令 rsync -avz --delete --port 8973 apprsync@172.21.5.163::rsyncimage /usr/local/image
同步模块rsyncvideo中的内容 ,与上面相似
3.6.2 使用SSH同步
在之前配置的
hosts allow = 172.21.5.164 这台目标机器中
输入命令
rsync -avz --delete apprsync@172.21.5.163:/app/nas/video /usr/local/test
注意 此处并没有指定端口 同时少了一个冒号 并且指定了想要同步的目标地址
其中中间一次是我弄出一个错误 在模块同步的时候输入了ssh用户的密码 所以导致了认证失败。
如果之前弄错过密码,需要刷新下本地已存储错误的SSH密码
ssh-keygen -f "/home/ubuntu/.ssh/known_hosts" -R "192.168.5.250"
由此,两种方式的同步就到此完毕。
四、可能遇到的问题
请不要把两种同步方式弄混了。主要是认证与路径的问题。
路径最后要注意不要有空格,否则会导致找不到对应的路径。