实时同步服务-sersync
实时同步服务-sersync
1. 什么是Sersync
sersync是基于inotify开发的,类似于inotify-tools的工具,Sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录,因此效率更高。
Sersync优点
-
sersync是使用c++编写,而且对linux系统文件系统产生的临时文件和重复的文件操作进行过滤,所以在结合rsync同步的时候,节省了运行时耗和网络资源。因此更快。
-
sersync配置很简单,其目录下已经有静态编译好的二进制文件,配合目录下的xml配置文件直接使用即可。
-
sersync使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。
-
sersync有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则按设定时长对同步失败的文件重新同步。
-
sersync自带crontab功能,只需在xml配置文件中开启,即可按要求隔一段时间整体同步一次。无需再额外配置crontab功能。
-
sersync可以二次开发。
2. 使用Sersync
2.1 实验环境
主机 | IP | 运行服务 |
---|---|---|
nfs01 | 10.0.0.31 | 运行sersync、,监控/nfsdata目录,nfs服务此时可以没有运行。(rsync客户端) |
backup | 10.0.0.41 | 运行rsync守护进程模式,推送到此目录/nfsbackup,Rsync模块名字nfsbackup。(rsync服务端) |
2.2 客户端环境准备
首先将sersync2.5.4_64bit_binary_stable_final.tar.gz
软件包上传到nfs01主机/server/tools下进行解压。
#创建目录
[root@nfs01 ~]# mkdir -p /server/tools /app/tools/
/server/tools/ #存放软件包(解压前)
/app/tools/ #存放编译安装软件,解压后软件
#解压文件到指定目录
[root@nfs01 ~]# cd /server/tools/
[root@nfs01 /server/tools]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /app/tools/
#查看解压的文件,重新命令
[root@nfs01 /server/tools]# cd /app/tools/
[root@nfs01 /app/tools]# ll
total 0
drwxr-xr-x 2 root root 41 Oct 26 2011 GNU-Linux-x86
[root@nfs01 /app/tools]# mv GNU-Linux-x86/ sersync
[root@nfs01 /app/tools]# tree /app/tools/
/app/tools/
└── sersync
├── confxml.xml
└── sersync2
1 directory, 2 files
#给confxml.xml赋予权限
[root@nfs01 /app/tools]# chmod 644 sersync/confxml.xml
[root@nfs01 /app/tools]# ll sersync/
total 1772
-rw-r--r-- 1 root root 2214 Oct 26 2011 confxml.xml
-rwxr-xr-x 1 root root 1810128 Oct 26 2011 sersync2
#安装rsync
[root@nfs01 ~]# yum install rsync -y
#创建/nfsdata目录
[root@nfs01 ~]# mkdir /nfsdata
#创建rsync密码文件并赋予权限
[root@nfs01 ~]# echo '1' >/etc/rsync.pass
[root@nfs01 ~]# chmod 600 /etc/rsync.pass
[root@nfs01 ~]# cat /etc/rsync.pass
1
[root@nfs01 ~]# ll /etc/rsync.pass
-rw------- 1 root root 2 Feb 15 17:34 /etc/rsync.pass
2.3 修改sersync配置文件
sersync配置文件confxml.xml详解
修改confxml.xml
- 监控本地目录/nfsdata
- 服务端ip和rsync模块名
- 修改为密码验证,配置用户名和密码验证文件
- 配置使用参数,修改日志文件路径
#备份原始配置文件
[root@nfs01 /app/tools/sersync]# cp confxml.xml confxml.xml.bak
#编辑配置
[root@nfs01 /app/tools/sersync]# vim confxml.xml
#修改后配置与原始配置对比,有改动的地方如下
[root@nfs01 /app/tools/sersync]# diff confxml.xml confxml.xml.bak
24,25c24,25
< <localpath watch="/nfsdata">
< <remote ip="10.0.0.41" name="nfsbackup"/>
---
> <localpath watch="/opt/tongbu">
> <remote ip="127.0.0.1" name="tongbu1"/>
30,31c30,31
< <commonParams params="-az"/>
< <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pass"/>
---
> <commonParams params="-artuz"/>
> <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
36c36
< <failLog path="/var/log/sersync.log" timeToExecute="60"/><!--default every 60mins execute once-->
---
> <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
2.4 服务端环境准备
2.4.1 安装rsync
#安装rsync
[root@backup ~]# yum install rsync -y
#启动rsync并设置开机自启动
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
2.4.2 创建虚拟用户
[root@backup ~]# useradd -s /sbin/nologin -M rsync
[root@backup ~]# id rsync
uid=1001(rsync) gid=1001(rsync) groups=1001(rsync)
2.4.3 创建密码文件
#创建密码文件
[root@backup ~]# echo 'rsync_backup:1' > /etc/rsync.password
#修改权限
[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]# ll /etc/rsync.password
-rw------- 1 root root 15 Feb 15 17:35 /etc/rsync.password
2.4.4 创建模块目录
#创建目录
[root@backup ~]# mkdir -p /nfsbakcup
#修改所有者
[root@backup ~]# chown rsync.rsync /nfsbakcup/
[root@backup ~]# ll -d /nfsbackup/
drwxr-xr-x 2 rsync rsync 6 Feb 15 17:36 /nfsbackup/
2.4.5 修改rsync.conf配置文件
fake super = yes
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
auth users = rsync_backup
secrets file = /etc/rsync.password
[nfsbackup]
comment = "test sersync"
path = /nfsbackup
2.4.6 重新启动服务
[root@backup ~]# systemctl restart rsyncd
2.5 测试同步
2.5.1 启动sersync
#查看使用帮助
[root@nfs01 ~]# /app/tools/sersync/sersync2 -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参数,则默认执行同步程序
#启用守护进程模式进行监控
[root@nfs01 ~]# /app/tools/sersync/sersync2 -dro /app/tools/sersync/confxml.xml
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: /app/tools/sersync/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console
use rsync password-file :
user is rsync_backup
passwordfile is /etc/rsync.pass
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: 22 = 12(Thread pool nums) + 10(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 /nfsdata && rsync -az -R --delete ./ rsync_backup@10.0.0.41::nfsbackup --password-file=/etc/rsync.pass >/dev/null 2>&1
run the sersync:
watch path is: /nfsdata
#查看进程
[root@nfs01 ~]# ps -ef | grep sersync
root 24881 1 0 17:52 ? 00:00:00 /app/tools/sersync/sersync2 -dro /app/tools/sersync/confxml.xml
root 25550 122922 0 17:55 pts/0 00:00:00 grep --color=auto sersync
2.5.2 检查实时同步结果
在nfs01主机上创建文件,看backup主机上是否有实时同步。
#backup主机 /nfsbackup目录没有文件
[root@backup /nfsbackup]# ll
total 0
#nfs01主机上创建测试文件
[root@nfs01 ~]# cd /nfsdata/
[root@nfs01 /nfsdata]# echo test_sersync > test.txt
#backup主机上查看,有了!
[root@backup /nfsbackup]# ll
total 4
-rw-r--r-- 1 rsync rsync 13 Feb 15 17:57 test.txt
Tips:终止实时同步可以ps -ef | grep sersync查出进程,kill进程即可。另外可以在服务端开启watch ls -l /nfsbackup,实时可看同步过程。
2.6 监控多个目录
#准备多个配置文件即可,修改配置里面的目录
[root@nfs01 ~]# /app/tools/sersync/sersync2 -dro /app/tools/sersync/confxml-01.xml
[root@nfs01 ~]# /app/tools/sersync/sersync2 -dro /app/tools/sersync/confxml-02.xml
作者:YinJay
Email:szgetshell@163.com