sersync 实现实时同步数据
1 sersync实时同步原理
image-20210104163102063.png- rsync守护进程服务,实现数据传输
- inotify服务,实现目录中数据变化监控
- 将rsync服务和inotify服务建立联系,将变化的数据进行实时备份传输
2 实时同步服务部署
2.1 部署rsync守护进程方式
2.1.1 备份服务rsync守护进程服务
#step1 安装rsync软件
rpm -qa |grep rsync
yum install -y rsync
#step2 编写配置文件 以root身份运行rsync但保留用户所有权
vim /etc/rsyncd.conf
uid = root
gid = root
port = 873
#fake super = yes
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 = true
hosts allow = 172.17.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by devops"
path = /backup
#step3 创建rsync服务的虚拟账户 上面配置使用的rsync 不创建也可以 没有测试
useradd rsync -M -s /sbin/nologin
#step4 配置rsync的认证信息
ehco "rsync_backup:1" >/etc/rsync.password
chmod 600 /etc/rsync.password
#step5 创建备份目录 属主属组默认是root 所有不需要修改
mkdir /backup
#step6 启动服务
systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd
2.1.2 存储服务器即 rsync客户端配置
#step1 安装rsync软件
rpm -qa |grep rsync
yum install -y rsync
#配置下密码文件,这个密码是存储服务器rsync认证信息中的密码
echo "1" > /etc/rsync.pas
2.2 存储服务器部署inotify监控服务
2.2.1 安装inotify软件
yum -y install inotify-tools
2.2.2 inotify 软件的命令的使用
rpm -ql inotify-tools
[root@ data]# rpm -ql inotify-tools
/usr/bin/inotifywait
/usr/bin/inotifywatch
inotifywait命令使用方法
Usage: inotifywatch [ options ] file1 [ file2 ] [ ... ]
-m|--monitor --------------- 实现一直监控目录的数据变化
-r|--recursive ----------------- 进行递归监控
-q|--quiet ------------------- 尽量减少信息的输出
--format <fmt> -------------- 指定输出信息的格式
--timefmt ------------------- 指定输出的时间信息格式
-e|--event ------------------ 指定监控的事件信息
创建文件监控信息输出
/data/ CREATE test --- 一个文件被创建
/data/ OPEN test --- 打开创建的文件
/data/ ATTRIB test --- 修改文件的属性信息
/data/ CLOSE_WRITE,CLOSE test --- 保存关闭一个文件
sed 命令修改文件原理
#一屏打开执行sed修改文件
[root@ www]# sed -i 's#b#a#g' test
#一屏监控文件变化
[root@ data]# inotifywait -m /data/www
Setting up watches.
Watches established.
/data/www/ OPEN test --------------- 打开test文件
/data/www/ CREATE sedBw5yaY --------------- 创建一个临时文件(内存)
/data/www/ OPEN sedBw5yaY --------------- 打开临时文件
/data/www/ ACCESS test --------------- 读取源文件
/data/www/ MODIFY sedBw5yaY --------------- 修改临时文件
/data/www/ ATTRIB sedBw5yaY --------------- 修改临时文件属性变化
/data/www/ CLOSE_NOWRITE,CLOSE test --------------- 不编辑直接关闭源文件
/data/www/ CLOSE_WRITE,CLOSE sedBw5yaY ------------ 写入关闭临时文件
/data/www/ MOVED_FROM sedBw5yaY --------------- 将临时文件 移除
/data/www/ MOVED_TO test --------------- 移入一个新的test源文件
inotify监控命令格式:
inotifywait -mrq --timefmt "%F" --format "%T %w %f 事件信息:%e" /data -e CREATE
一般监控 create创建,delete删除,move_to移入,close_write修改
2.2.3 inotify应用
需要用到inotify进行实时一直监控 /etc passwd /var/spool/cron/root
2.3 存储服务器部署sersync同步服务
2.3.1 安装sersync
#step1 下载sersync 并解压 此项目github地址 https://github.com/wsgzao/sersync
mkdir /server/tools
cd /server/tools
wget https://codeload.github.com/wsgzao/sersync/zip/master
yum -y install unzip
unzip master
cd sersync-master
tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
#安装解压好的二进制程序
mv GNU-Linux-x86 /usr/local/sersync
2.3.2 编写配置文件
<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程序需要监控的事件--->
<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="/data/www">
<!---修改rsync服务端的ip和rsync服务端的模块信息--->
<remote ip="172.17.1.104" name="backup"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<!---修改rsync参数--->
<commonParams params="-az"/>
<!---修改远程rsync服务端的认证信息--->
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pas"/>
<!---修改端口信息默认是873--->
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/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>
<plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin>
<plugin name="socket">
<localpath watch="/opt/tongbu">
<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>
2.3.3 启动实时同步服务
/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
网友评论