设为首页 收藏本站
查看: 324|回复: 0

[经验分享] Sersync实时同步企业应用配置实战

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-10 08:41:21 | 显示全部楼层 |阅读模式
一、实验环境

CentOS版本: 6.6(2.6.32.-504.el6.x86_64)

Rsync版本:  Rsync-3.0.6(系统自带)

Sersync版本:sersync2.5.4_64bit_binary_stable_final.tar.gz(下载上传)

二、准备工作

查看系统是否支持inotify及参数优化:

[iyunv@backup ~]# ls -l  /proc/sys/fs/inotify/

------------------

总用量 0

0 dr-xr-xr-x 0 root root 0 12月 4 14:04 ..

0 dr-xr-xr-x 0 root root 0 12月 4 11:35 .

0 -rw-r--r-- 1 root root 0 12月 4 11:35 max_user_watches

0 -rw-r--r-- 1 root root 0 12月 4 11:35 max_user_instances

0 -rw-r--r-- 1 root root 0 12月 4 11:35 max_queued_events

------------------

  返回以上内容,则系统支持inotify。这一步可能博友不太明白,本文实验是sersync实时同步,和支持inotify有什么关系。这是因为sersync实时监控时会调用 max_user_watches和 max_queued_events这两个文件

max_user_watches       #可实时监控的目录的最大个数,该值默认为8192

max_queued_events    #可实时监控的最大的队列事件, 超出这个值的事件将被丢弃。该值默认为16384

[iyunv@backup ~]# cat /proc/sys/fs/inotify/*
16384
128
8192
[iyunv@backup inotify]# echo 50000000 > max_user_watches
[iyunv@backup inotify]# cat max_user_watches
50000000
[iyunv@backup inotify]# echo 327679 > max_queued_events
[iyunv@backup inotify]# cat max_queued_events
327679

关闭防火墙: service iptables stop                                               #(服务端,客户端)均关闭

            chkconfig iptables off

关闭selinux:sed -i 's/SELINUX=disabled/SELINUX=enforcing/g' /etc/selinux/config #(服务端,客户端)均关闭

                 init 6 重启系统一定要!

三、Rsync服务端配置

[iyunv@backup ~]# vi /etc/rsyncd.conf
#rsyncd.conf,create 2015-07-30,linuxzkq
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 192.168.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup           #此为虚拟用户
secrets file = /etc/rsync.password
[cc]
path = /cc/
保存退出!
[iyunv@backup ~]# echo "rsync_backup:8700389">/etc/rsync.password #创建同步自动认证的用户名与密码
[iyunv@backup ~]# cat /etc/rsync.password
rsync_backup:8700389
[iyunv@backup ~]# chmod 600 /etc/rsync.password                   #处于安全考虑,赋予600权限
[iyunv@backup ~]# ll /etc/rsync.password
-rw------- 1 root root 21 Jul 30 21:36 /etc/rsync.password
[iyunv@backup ~]# mkdir /cc                                       #创建服务端同步目录
[iyunv@backup ~]# useradd rsync -s /sbin/nologin
[iyunv@backup ~]# chown -R rsync.rsync /cc
[iyunv@backup ~]# rsync --daemon                                  #表示以守护进程的方式启动
[iyunv@backup ~]# netstat -tunlp|grep 873
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      28631/rsync         
tcp        0      0 :::873                      :::*                        LISTEN      28631/rsync         
[iyunv@backup ~]# ps -ef|grep rsync
root     28631     1  0 21:30 ?        00:00:00 rsync --daemon
root     28647 28596  0 21:32 pts/0    00:00:00 grep rsync
[iyunv@backup ~]# echo "/usr/bin/rsync --daemon" >>/etc/rc.local  #加入开机自启动
[iyunv@backup ~]# tail -1 /etc/rc.local
/usr/bin/rsync --daemon
四、Rsync客户端配置
[iyunv@LAMP ~]# vi /etc/rsync.password
8700389

保存退出!

[iyunv@LAMP ~]# cat /etc/rsync.password
8700389
[iyunv@LAMP ~]# chmod 600 /etc/rsync.password
[iyunv@LAMP ~]# ll /etc/rsync.password
-rw------- 1 root root 8 Jul 30 22:15 /etc/rsync.password
[iyunv@LAMP ~]# mkdir /cc
[iyunv@LAMP ~]# useradd rsync -s /sbin/nologin
[iyunv@LAMP ~]# chown -R rsync.rsync /cc
[iyunv@LAMP ~]# which rsync
/usr/bin/rsync
[iyunv@LAMP ~]# rz -y
rz waiting to receive.
zmodem trl+C

  100%    4686 KB 4686 KB/s 00:00:01       0 Errors.
[iyunv@LAMP ~]# ll
-rw-r--r-- 1 root root  727290 Oct 26  2011 sersync2.5.4_64bit_binary_stable_final.tar.gz
[iyunv@LAMP ~]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
[iyunv@LAMP ~]# ll
drwxr-xr-x 2 root root    4096 Oct 26  2011 GNU-Linux-x86
[iyunv@LAMP ~]# mv GNU-Linux-x86 /usr/local/sersync
[iyunv@LAMP ~]# cd /usr/local/sersync
[iyunv@LAMP ~]# 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
[iyunv@LAMP ~]# cp confxml.xml confxml.xml-bak
[iyunv@LAMP ~]# vi confxml.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify>
<sersync>
<localpath watch="/cc">
<remote ip="192.168.0.112" name="cc"/>
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<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="/usr/local/sersync/logs/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="true" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
<plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/>  <!--prefix /server/scripts/check_sersync.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin>
<plugin name="socket">
<localpath watch="/cc">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head>
"confxml.xml" 67L, 2267C written
:wq!  #保存退出
参数说明:
1)修改24-28行,定义同步的本地目录及远程目标服务器IP和模块名
24         <localpath watch="/opt/tongbu">
25             <remote ip="127.0.0.1" name="tongbu1"/>
26             <!--<remote ip="192.168.8.39" name="tongbu"/>-->
27             <!--<remote ip="192.168.8.40" name="tongbu"/>-->
28         </localpath>
修改后内容为:
24         <localpath watch="/cc">
25             <remote ip="192.168.0.112" name="cc"/>

26         </localpath>
2) 修改29-35行,认证部分:
29         <rsync>
30             <commonParams params="-artuz"/>
31             <auth start="false" users="root" passwordfile="/etc/
    rsync.pas"/>
32             <userDefinedPort start="false" port="874"/><!-- port
    =874 -->
33             <timeout start="false" time="100"/><!-- timeout=100
    -->
34             <ssh start="false"/>
35         </rsync>
修改后的内容:
32         <rsync>
33             <commonParams params="-artuz"/>
34             <auth start="true" users="rsync_backup" passwordfile="/e
    tc/rsync.password"/>
35             <userDefinedPort start="false" port="874"/><!-- port=874
     -->
36             <timeout start="true" time="100"/><!-- timeout=100 -->
37             <ssh start="false"/>
38         </rsync>
3)修改36-37行,定义同步队列或事件失败后,再次同步失败队列或事件的时间间隔
36         <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60
    "/><!--default every 60mins execute once-->
37         <crontab start="false" schedule="600"><!--600mins-->
修改后的内容为:
39         <failLog path="/usr/local/sersync/logs/rsync_fail_log.sh" timeToExecute="60"/>  <!--default every 60mins execute once-->
40         <crontab start="true" schedule="600"><!--600mins-->

以上修改完了,配置sersync环境变量:
[iyunv@LAMP ~]# echo "export PATH=$PATH:/usr/local/sersync/bin" >>/etc/profile
[iyunv@LAMP ~]# tail -1 /etc/profile
export PATH=$PATH:/usr/local/sersync/bin
[iyunv@LAMP ~]# source /etc/profile
[iyunv@LAMP ~]# echo "/usr/local/sersync/sersync2 -d -r -o  /usr/local/sersync/confxml.xml" >>/etc/rc.local                        #加入开机自启动

[iyunv@LAMP ~]# cat /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
/usr/local/sersync/sersync2 -d -r -o  /usr/local/sersync/confxml.xml
[iyunv@LAMP ~]# mkdir /server/scripts -p

[iyunv@LAMP ~]# cd /server/scripts
[iyunv@LAMP ~]# vi check_sersync.sh
#!/bin/sh

sersync="/usr/local/sersync/sersync2"

confxml="/usr/local/sersync/confxml.xml"

status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)

if [ $status -eq 0 ];

then

$sersync -d -r -o $confxml &

else

exit 0;

fi
:wq!  #保存退出
[iyunv@LAMP ~]# chmod +x check_sersync.sh              
[iyunv@LAMP ~]# ll
total 4
-rwxr-xr-x 1 root root 224 Aug  4 23:27 check_sersync.sh
[iyunv@LAMP ~]# crontab -e  #加入定时任务
*/5 * * * * root /server/scripts/check_sersync.sh > /dev/null 2>&1  #每隔5分钟执行一次脚本
[iyunv@LAMP ~]# sh check_sersync.sh
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
option: -d      run as a daemon
option: -r      rsync all the local files to the remote servers before the sersync work
option: -o      config xml name:  /usr/local/sersync/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost     host port: 8008
daemon start,sersync run behind the console
Start the crontab       Every 600 minutes rsync all the files to the remote servers entirely
use rsync password-file :
user is rsync_backup
passwordfile is         /etc/rsync.password
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12  = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
Max threads numbers is: 32 = 12(Thread pool nums) + 20(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /cc && rsync -artuz -R --delete ./ rsync_backup@192.168.0.110::cc --password-file=/etc/rsync.password >/dev/null 2>&1
run the sersync:
watch path is: /cc
[iyunv@LAMP ~]# touch /cc/bb{1..500}.log
[iyunv@LAMP ~]# ls
bb140.log  bb230.log  bb320.log  bb410.log  bb500.log
bb141.log  bb231.log  bb321.log  bb411.log  bb50.log
bb142.log  bb232.log  bb322.log  bb412.log  bb51.log
bb143.log  bb233.log  bb323.log  bb413.log  bb52.log
bb144.log  bb234.log  bb324.log  bb414.log  bb53.log
bb145.log  bb235.log  bb325.log  bb415.log  bb54.log
bb146.log  bb236.log  bb326.log  bb416.log  bb55.log
bb147.log  bb237.log  bb327.log  bb417.log  bb56.log
bb148.log  bb238.log  bb328.log  bb418.log  bb57.log
bb149.log  bb239.log  bb329.log  bb419.log  bb58.log
bb14.log   bb23.log   bb32.log   bb41.log   bb59.log

现在再到Rsync服务端查看/cc目录:
[iyunv@backup ~]# ls /cc
bb140.log  bb230.log  bb320.log  bb410.log  bb500.log
bb141.log  bb231.log  bb321.log  bb411.log  bb50.log
bb142.log  bb232.log  bb322.log  bb412.log  bb51.log
bb143.log  bb233.log  bb323.log  bb413.log  bb52.log
bb144.log  bb234.log  bb324.log  bb414.log  bb53.log
bb145.log  bb235.log  bb325.log  bb415.log  bb54.log
bb146.log  bb236.log  bb326.log  bb416.log  bb55.log
bb147.log  bb237.log  bb327.log  bb417.log  bb56.log
bb148.log  bb238.log  bb328.log  bb418.log  bb57.log
bb149.log  bb239.log  bb329.log  bb419.log  bb58.log
bb14.log   bb23.log   bb32.log   bb41.log   bb59.log
以上测试都通过,说明inotify实时触发rsync同步脚本运行正常。
至此,Rsync+sersync实现数据实时同步完成,如有遗漏之处,还请广大博友拍砖指正!               


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-96731-1-1.html 上篇帖子: linux下的ps 查看进程命令 下篇帖子: Linux-Centos5.3中文乱码问题解决
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表