【运维知识进阶篇】Sersync实时同步详解

简介: 【运维知识进阶篇】Sersync实时同步详解

实时同步是只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器。实时同步可以保证数据的连续性,减少数据的连续性,减少人力维护成本,解决nfs单点故障。

实时同步工具

sersync+rsync、inotify+rsync

inotify是一个通知接口,用来监控文件系统的各种变化,如果文件读取,删除,移动。可以非常方便地实现文件异动告警,增量备份,针对目录或文件的变化及时作出响应。rsync+inotify可以是实现触发式实时同步增量备份。

sersync是国人基于rsync+inotify-tools开发的工具,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。

实时同步案例

案例:实现web上传视频文件,实则是写入NFS至存储,当NFS存在新的数据则会实时复制到备份服务器,如果nfs出现故障,我们将nfs挂载到backup服务器

1、web上传视频至NFS存储

1. 在nfs上,安装nfs,并启动
2. 
3. [root@NFS ~]# yum -y install nfs-utils
4. [root@NFS ~]# systemctl start nfs-utils.service
5. [root@NFS ~]# systemctl enable nfs-utils.service
6. [root@NFS ~]# mkdir /data
7. 
8. 在web安装nfs,但是不启动
9. 
10. [root@Web01 ~]# yum -y install nfs-utils
11. [root@Web01 ~]# mkdir /data
12. [root@Web01 ~]# mount -t nfs 172.16.1.31:/data /data
13. [root@Web01 ~]# df -h
14. Filesystem         Size  Used Avail Use% Mounted on
15. devtmpfs           476M     0  476M   0% /dev
16. tmpfs              487M     0  487M   0% /dev/shm
17. tmpfs              487M   33M  455M   7% /run
18. tmpfs              487M     0  487M   0% /sys/fs/cgroup
19. /dev/sda3           19G  2.4G   17G  13% /
20. /dev/sda1          197M  110M   88M  56% /boot
21. tmpfs               98M     0   98M   0% /run/user/0
22. 172.16.1.31:/data   19G  2.0G   17G  11% /data
23. [root@Web01 ~]# cd /data/
24. [root@Web01 data]# rz -E
25. rz waiting to receive.
26. [root@Web01 data]# ls
27. 1.mp4
28. [root@Web01 data]# 
29. 
30. 查看nfs,同样显示
31. 
32. [root@NFS ~]# ls /data
33. 1.mp4
34. [root@NFS ~]#

2、NFS的数据都备份至Backup服务器/backup

1. Backup服务器
2. 
3. 安装rsync
4. [root@Backup ~]# yum -y install rsync
5. 
6. 配置rsync
7. [root@Backup ~]# cat /etc/rsyncd.conf
8. uid = www
9. gid = www
10. port = 873
11. fake super = yes
12. use chroot = no
13. max connections = 200
14. timeout = 600
15. ignore errors
16. read only = false
17. list = false
18. auth users = rsync_backup
19. secrets file = /etc/rsync.passwd
20. log file = /var/log/rsyncd.log
21. #####################################
22. [backup]
23. path = /backup
24. 
25. 建立对应的密码文件
26. [root@Backup ~]# cat /etc/rsync.passwd 
27. rsync_backup:123456
28. 
29. 创建用户与所需目录
30. [root@Backup ~]# groupadd -g666 www
31. [root@Backup ~]# useradd -u666 -g666 -M -s /sbin/nglogin www
32. [root@Backup ~]# mkdir -p /{backup,data}
33. [root@Backup ~]# chown -R www,www /{backup,data}
34. 
35. 启动rsync,并设置开机自启动
36. [root@Backup ~]# systemctl enable rsyncd
37. [root@Backup ~]# systemctl start rsyncd
38. 
39. nfs服务器
40. 
41. 安装rsync
42. [root@NFS ~]# yum -y install rsync
43. 
44. 备份rsync中的data目录到rsync,可以写脚本写到定时任务
45. [root@NFS ~]# rsync -avz /data 10.0.0.41:/data

3、将NFS数据实时同步到备份服务器/data目录下

1. nfs服务器
2. 
3. 安装inotify
4. [root@NFS ~]# yum -y install inotify-tools
5. 
6. 安装sersync,windows下载再拖拽至主机
7. https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.gz
8. 
9. [root@NFS ~]# mkdir -p /server/tools 
10. [root@NFS ~]# cd /server
11. [root@NFS server]# rz -E
12. rz waiting to receive.
13. [root@NFS server]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz 
14. [root@NFS server]# mv GNU-Linux-x86/ sersyncd
15. 
16. 配置sersync
17. 
18. [root@NFS sersync]# cat  confxml.xml 
19. <?xml version="1.0" encoding="ISO-8859-1"?>
20. <head version="2.5">
21. <host hostip="localhost" port="8008"></host>
22. <debug start="false"/>
23. <fileSystem xfs="false"/>
24. <filter start="false">
25.   <exclude expression="(.*)\.svn"></exclude>
26.   <exclude expression="(.*)\.gz"></exclude>
27.   <exclude expression="^info/*"></exclude>
28.   <exclude expression="^static/*"></exclude>
29. </filter>
30. <inotify>
31.   <delete start="true"/>
32.   <createFolder start="true"/>
33.   <createFile start="true"/>
34.   <closeWrite start="true"/>
35.   <moveFrom start="true"/>
36.   <moveTo start="true"/>
37.   <attrib start="false"/>
38.   <modify start="false"/>
39. </inotify>
40. 
41. <sersync>
42.   <localpath watch="/data">
43.       <remote ip="172.16.1.41" name="nfs"/>
44.       <!--<remote ip="192.168.8.39" name="tongbu"/>-->
45.       <!--<remote ip="192.168.8.40" name="tongbu"/>-->
46.   </localpath>
47.   <rsync>
48.       <commonParams params="-avz"/>
49.       <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pas"/>
50.       <userDefinedPort start="false" port="874"/><!-- port=874 -->
51.       <timeout start="false" time="100"/><!-- timeout=100 -->
52.       <ssh start="false"/>
53.   </rsync>
54.   <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
55.   <crontab start="false" schedule="600"><!--600mins-->
56.       <crontabfilter start="false">
57.     <exclude expression="*.php"></exclude>
58.     <exclude expression="info/*"></exclude>
59.       </crontabfilter>
60.   </crontab>
61.   <plugin start="false" name="command"/>
62. </sersync>
63. 
64. <plugin name="command">
65.   <param prefix="/bin/sh" suffix="" ignoreError="true"/>  <!--prefix /opt/tongbu/mmm.sh suffix-->
66.   <filter start="false">
67.       <include expression="(.*)\.php"/>
68.       <include expression="(.*)\.sh"/>
69.   </filter>
70. </plugin>
71. 
72. <plugin name="socket">
73.   <localpath watch="/opt/tongbu">
74.       <deshost ip="192.168.138.20" port="8009"/>
75.   </localpath>
76. </plugin>
77. <plugin name="refreshCDN">
78.   <localpath watch="/data0/htdocs/cms.xoyo.com/site/">
79.       <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
80.       <sendurl base="http://pic.xoyo.com/cms"/>
81.       <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
82.   </localpath>
83. </plugin>
84. </head>
85. [root@NFS sersync]# echo 123456 > /etc/rsync.pas
86. [root@NFS sersync]# chmod 600 /etc/rsync.pas 
87. [root@NFS sersync]# ll /etc/rsync.pas
88. -rw------- 1 root root 7 Apr 24 17:29 /etc/rsync.pas
89. 
90. Backup修改配置文件,增加rsync模块
91. 
92. [root@Backup etc]# cat /etc/rsyncd.conf
93. uid = www
94. gid = www
95. port = 873
96. fake super = yes
97. use chroot = no
98. max connections = 200
99. timeout = 600
100. ignore errors
101. read only = false
102. list = false
103. auth users = rsync_backup
104. secrets file = /etc/rsync.passwd
105. log file = /var/log/rsyncd.log
106. #####################################
107. [backup]
108. path = /backup
109. [nfs]
110. path = /data
111. 
112. 创建/data目录并授权为www.www
113. [root@Backup ~]# mkdir /data
114. [root@Backup ~]# chown www.www /data
115. 
116. 重启服务
117. [root@Backup ~]# systemctl restart rsyncd
118. 
119. 
120. NFS服务器
121. 
122. 手动测试能否进行rsync
123. [root@NFS sersync]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::nfs
124. Password: 
125. @ERROR: auth failed on module nfs
126. rsync error: error starting client-server protocol (code 5) at main.c(1656) [sender=3.1.2]
127. [root@NFS sersync]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::nfs
128. Password: 
129. sending incremental file list
130. hosts
131. 
132. sent 140 bytes  received 43 bytes  52.29 bytes/sec
133. total size is 158  speedup is 0.86
134. 
135. [root@Backup ~]# ll /data            #成功发送
136. total 4
137. -rw-r--r-- 1 www www 158 Jun  7  2013 hosts
138. 
139. 
140. 查看帮助信息
141. 
142. [root@NFS sersync]# ./sersync2 -h
143. set the system param
144. execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
145. execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
146. parse the command param
147. _______________________________________________________
148. 参数-d:启用守护进程模式
149. 参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
150. c参数-n: 指定开启守护线程的数量,默认为10个
151. 参数-o:指定配置文件,默认使用confxml.xml文件
152. 参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
153. 参数-m:单独启用其他模块,使用 -m socket 开启socket模块
154. 参数-m:单独启用其他模块,使用 -m http 开启http模块
155. 不加-m参数,则默认执行同步程序
156. ________________________________________________________________
157. 
158. #启动Sersync, 如果需要同步多个目录, 那么需要配置多套环境
159. 
160. [root@NFS sersync]# ./sersync2 -dr
161. 
162. #测试,成功
163. 
164. [root@NFS sersync]# touch /data/1.txt
165. [root@Backup ~]# ll /data
166. -rw-r--r-- 1 www www         0 Apr 24 17:40 1.txt
167. 
168. 
169. 注意:
170. 
171. 查看进程:
172. [root@nfs ~]# ps axu|grep sersync
173. root       2406  0.0  0.0  92324   716 ?        Ssl  10:45   0:00 /server/sersync/sersync2 -dro /server/sersync/confxml.xml
174. 
175. 杀死进程:
176. [root@nfs ~]# kill -9 2406
177. 
178. 修改文件需要先杀死进程,修改好后再启动,注意进程有一个即可,多了重复

4、nfs故障后,挂载到backup

1. #将backup的环境与nfs设为一致
2. 
3. [root@Backup ~]# yum -y install nfs-utils
4. [root@Backup ~]# cat /etc/exports
5. /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
6. [root@Backup ~]# groupadd -g666 www
7. [root@Backup ~]# useradd -u666 -g666 -M -s /sbin/nologin www
8. [root@Backup ~]# systemctl start nfs
9. [root@Backup ~]# systemctl enable nfs
10. Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
11. 
12. #将nfs挂起,访问web01的data和df -h都会夯住,强制卸载,改挂41服务器
13. 
14. [root@Web01 ~]# umount -f /data
15. [root@Web01 ~]# mount -t nfs 172.16.1.41:/data /data
16. [root@Web01 ~]# df -h
17. Filesystem         Size  Used Avail Use% Mounted on
18. devtmpfs           476M     0  476M   0% /dev
19. tmpfs              487M     0  487M   0% /dev/shm
20. tmpfs              487M   33M  455M   7% /run
21. tmpfs              487M     0  487M   0% /sys/fs/cgroup
22. /dev/sda3           19G  2.4G   17G  13% /
23. /dev/sda1          197M  110M   88M  56% /boot
24. tmpfs               98M     0   98M   0% /run/user/0
25. 172.16.1.41:/data   19G  2.2G   17G  12% /data

实时同步总结

1. 1.为什么要使用实时同步?
2. 解决nfs单点;大量的静态资源迁移(本地迁移云端)
3. 
4. 2.实时同步能解决什么问题?
5. 平滑的迁移;备份:减少人为的干预
6. 
7. 3.实时同步工具选择?
8. rsync+inotify   少量文件同步,麻烦。同步大文件太慢,遍历扫描,非常影响效率。
9. sersync         配置简单,多线程同步,同步块。适合大量的小文件或者图片。
10. lsryncd 
11. 
12. 4.demo:
13.     本地备份:用户上传文件-->web-->写入-->nfs存储-->inotify-->action-->rsync--->backup
14.     云端备份:用户上传文件-->web-->写入-->nfs存储(本地)--->实时的同步到-->存储(云端)
15.                            web-->卸载存储(本地)--->重新挂载存储(云端)

我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

目录
相关文章
|
运维 监控 应用服务中间件
【运维知识进阶篇】zabbix5.0稳定版详解3(监控Nginx+PHP服务状态信息)(二)
【运维知识进阶篇】zabbix5.0稳定版详解3(监控Nginx+PHP服务状态信息)(二)
255 0
|
9月前
|
运维 DataWorks 关系型数据库
DataWorks产品使用合集之DataWorks中如何提升运维中心实时同步任务的运行速度
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
119 1
|
运维 网络安全 数据库
【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)(一)
【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)
1166 0
|
域名解析 运维 负载均衡
【运维知识进阶篇】Tomcat集群实战之部署zrlog博客(Tomcat服务安装+静态资源挂载NFS+Nginx负载均衡+HTTPS证书+Redis会话保持)
【运维知识进阶篇】Tomcat集群实战之部署zrlog博客(Tomcat服务安装+静态资源挂载NFS+Nginx负载均衡+HTTPS证书+Redis会话保持)
435 1
|
SQL 运维 监控
【运维知识进阶篇】Zabbix5.0稳定版详解11(在Grafana中使用Zabbix插件:安装Grafana+安装Zabbix插件+添加数据源+Grafana直连MySQL数据库取值)(下)
【运维知识进阶篇】Zabbix5.0稳定版详解11(在Grafana中使用Zabbix插件:安装Grafana+安装Zabbix插件+添加数据源+Grafana直连MySQL数据库取值)(下)
283 1
|
运维 监控
【运维知识进阶篇】Zabbix5.0稳定版详解10(Zabbix自动注册+Ansible自动部署,实现一条命令监控任意主机)
【运维知识进阶篇】Zabbix5.0稳定版详解10(Zabbix自动注册+Ansible自动部署,实现一条命令监控任意主机)
199 0
|
运维 监控 小程序
【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)(四)
【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)(四)
736 0
|
运维 数据库
【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)(三)
【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)(三)
243 0
|
运维 数据库 数据安全/隐私保护
【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)(二)
【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)(二)
267 0
|
运维 监控 数据可视化
【运维知识进阶篇】Zabbix5.0稳定版详解11(在Grafana中使用Zabbix插件:安装Grafana+安装Zabbix插件+添加数据源+Grafana直连MySQL数据库取值)(上)
【运维知识进阶篇】Zabbix5.0稳定版详解11(在Grafana中使用Zabbix插件:安装Grafana+安装Zabbix插件+添加数据源+Grafana直连MySQL数据库取值)
610 0

热门文章

最新文章