sersync实时复制工具实践
环境
- NFS ip = 10.0.0.31
- backup ip = 10.0.0.41(作为实时共享)
在backup的rsync服务配置里面加一个模块,创建/nfsbackup并改变权限。
[root@backup ~]#vim /etc/rsyncd.conf
[nfsbackup]
path = /nfsbackup
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
[root@backup ~]# pkill rsync 配置完后要重启,先删掉目前的进程!
[root@backup ~]# lsof -i :873
[root@backup ~]# rsync --daemon
[root@backup ~]# lsof -i :873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 1401 root 4u IPv4 14468 0t0 TCP *:rsync (LISTEN)
rsync 1401 root 5u IPv6 14469 0t0 TCP *:rsync (LISTEN)
[root@backup ~]# mkdir -p /nfsbackup
[root@backup ~]# chown -R rsync.rsync /nfsbackup
在nfs客户端推送资料到backup里面:
[root@nfs01 data]# rsync -avz /data/ [email protected]::nfsbackup --password-file=/etc/rsync.password
sending incremental file list
./
a
b
c
sent 182 bytes received 68 bytes 500.00 bytes/sec
total size is 0 speedup is 0.00
[root@backup nfsbackup]# ls --->我们回到backup去看看
a b c
实现从nfs客户端到rsync服务端的rsync服务部署
sersync优点:
1)支持配置文件管理
2)真正的守护进程socket
3)可以对失败文件定时重传(定时任务功能)
4)第三方的HTTP接口(更新CDN缓存)
5)默认多线程rsync同步
高并发数据实时同步方案小结:
1.inotify(sersync)+rsync 是文件级别的 ----> 效率不高
2.drbd文件系统级别,文件级别的,基于block。缺点:备节点数据不可用。
3.第三方软件的同步功能: mysql 同步、orcale,mongodb
4.程序双写,直接写两台服务器。
5.透过业务逻辑解决(读写分离,备读不到,读主)
6.NFS集群(双写主存储,备存储用inotify(sersync)+rsync ,备没有找主 解决延迟问题)
sersync实时复制工具实践
rsync部署如上面的例子:
第一个里程碑:实现从nfs客户端到rsync服务端的rsync服务部署
第二个里程碑:在客户端安装sersync
网上源安装:
git clone https://github.com/wsgzao/sersync
把这个档案放在/application 里面,整理成下面的样子
[root@nfs01 sersync]# tree
.
├── bin
│ └── sersync
├── conf
│ └── confxml.xml ---->配置文件
├── GNU-Linux-x86
├── logs
└── sersync2.5.4_64bit_binary_stable_final.tar.gz
4 directories, 3 files
在confxml.xml里面:
过滤功能:
6 <filter start="false">
7 <exclude expression="(.*)\.svn"></exclude>
8 <exclude expression="(.*)\.gz"></exclude>
9 <exclude expression="^info/*"></exclude>
10 <exclude expression="^static/*"></exclude>
11 </filter>
inotify监控什么属性:(true表示当前有监控的事件)
12 <inotify>
13 <delete start="true"/>
14 <createFolder start="true"/>
15 <createFile start="false"/>
16 <closeWrite start="true"/>
17 <moveFrom start="true"/>
18 <moveTo start="true"/>
19 <attrib start="false"/>
20 <modify start="false"/>
21 </inotify>
sersync同步
<sersync>
<localpath watch="/data">
<remote ip="172.16.1.41" name="nfsbackup"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-avz"/>
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="true" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/application/logs/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
配置完后,将sersync加上可执行的权限:
chmod +x bin/sersync
可执行的参数:
[root@nfs01 data]# /application/sersync/bin/sersync -h
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
_______________________________________________________
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序
________________________________________________________________
执行sersync:
/application/sersync/bin/sersync -d -r -n 8 -o /application/sersync/conf/confxml.xml
检验成果:
在NFS服务端:
[root@nfs01 data]# ps -ef | grep sersync root 4180 1 0 10:57 ? 00:00:00 /application/sersync/bin/sersync -d -r -n 8 -o /application/sersync/conf/confxml.xml
root 4194 2910 0 10:57 pts/0 00:00:00 grep sersync
[root@nfs01 data]# cd /data
[root@nfs01 data]# ls
[root@nfs01 data]# touch stu{01..10}
[root@nfs01 data]# ls
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
到backup
[root@backup nfsbackup]# ls
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10