Sersync + rsync 实现实时同步服务
sersync2二进制包目录规划
/app/tools/sersync/
/app/tools/sersync/bin
/app/tools/sersync/conf
项目架构是这样的:
+-------------------+ +-------------------+ +-------------------+
| | | | | |
| Web Server | -----> | NFS Server | -----> | Backup Server |
| | | | | |
+-------------------+ +-------------------+ +-------------------+^ ^ ^| | || | |(通过NFS挂载) (提供共享目录) (实时同步数据)
首先需要在rsync服务端更改一下配置文件,增加nfsbackup模块,
[nfsbackup]
path = /nfsbackup
comment = nfsbackup Directory
read only = no
list = no # 禁止列出模块(安全建议)
再创建nfsbackup
文件夹
mkdir /nfsbackup/ -p
最后重启rsyncd服务
systemctl restart rsyncd
NFS服务器的相关配置
先决条件:创建data目录,挂载本地目录
mkdir /data/ -p
mount -t nfs /data/ /mnt
接下来需要更改NFS的配置文件,它是/etc/exports
vim /etc/exports
增加一行
/nfsdata 192.168.179.0/24(rw,sync,all_squash,anonuid=1999,anongid=1999,no_subtree_check)
然后重新加载一下nfs 服务
systemctl reload nfs
- 配置sersync2,先创建目录
mkdir /app/tools/sersync/ -p
mkdir /app/tools/sersync/bin -p
mkdir /app/tools/sersync/conf -p
下载sersync的二进制包到本地
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz
解压压缩包,然后进入目录,里面有两个文件,sersync2是二进制包,可以直接运行。confxml.xml是sersync的配置文件
tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
cd GNU-Linux-x86
[root@nfs-01 GNU-Linux-x86]# ll
total 1772
-rwxr-xr-x 1 root root 2214 Oct 26 2011 confxml.xml
-rwxr-xr-x 1 root root 1810128 Oct 26 2011 sersync2
对于sersync2,可以使用软链接的方式放到/bin目录下,不需要移动文件
ln -s /app/tools/sersync/bin/sersync2 /bin
然后进入/app/tools/sersync/conf目录下,修改confxml.xml这个配置文件
cd /app/tools/sersync/conf
vim confxml.xml
<localpath watch="/data"><remote ip="192.168.179.152" name="nfsbackup"/><!--<remote ip="192.168.8.39" name="tongbu"/>--><!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath><rsync><commonParams params="-artuz"/><auth start="true" users="root" passwordfile="/etc/rsync-client.pass"/><userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="false" time="100"/><!-- timeout=100 --><ssh start="false"/></rsync>
2.1 本地路径与监控配置 (<localpath>
)
xml复制代码<localpath watch="/监控的目录路径"> <!-- 示例:/data/www --><remote ip="远程IP1" name="rsync模块名"/> <remote ip="远程IP2" name="rsync模块名"/>
</localpath>
- 关键参数 :
watch
:需监控的本地目录(如/data/www
),目录需存在且有读权限。<remote>
:可配置多个远程服务器,ip
为远程服务器 IP,name
对应服务端rsyncd.conf
中定义的模块名。
2.2 rsync 参数配置 (<rsync>
)
xml复制代码<rsync><commonParams params="-artuz --delete"/> <!-- rsync 命令参数 --><auth start="true" users="rsync用户名" passwordfile="/密码文件路径"/> <!-- 认证配置 --><userDefinedPort start="false" port="874"/> <!-- 默认端口873 --><timeout start="false" time="100"/> <!-- 超时设置 --><ssh start="false"/> <!-- 是否使用SSH -->
</rsync>
-
关键参数:
-
commonParams
:
-artuz
:归档模式、递归、保留时间、增量同步、压缩传输。--delete
:建议添加,删除目标端多余文件(保持严格一致时使用)。
-
auth
:
users
:远程rsyncd.conf
中配置的认证用户名(如rsync_user
)。passwordfile
:本地存储密码的文件路径(如/etc/rsync.pass
),文件内容仅为密码,权限需600
。
-
userDefinedPort
:若修改了 rsync 默认端口(默认873
),需在此处启用并指定端口。 -
ssh
:start="false"
表示使用 rsync 协议,若为true
则需配置 SSH 密钥认证。
-
修改完之后查看区别
vimdiff /GNU-Linux-x86/confxml.xml
web服务器挂载NFS共享目录
现在还需要挂载NFS的目录:
先创建一个目录,就叫做upload吧
mkdir /upload -p
然后再进行挂载:
mount -t nfs 192.168.179.151:/data
查看目录挂载情况
df -h /upload/
软链接到bin目录
ln -s /app/tools/sersync/bin/sersync2 /bin/
使用sersync2的help命令
sersync2 -h
启动服务
sersync2 -rdo /app/tools/bin/confxml.xml
查看状态是否正常
ps -ef | grep sersync2
测试,在web服务器上创建十个文件
在备份服务器上查看,可以看到数据完全被同步过来了。
到此,测试通过。通过rsync+sersync2的方式完成了一个实时同步的小项目,还是非常有实战价值的