Loading

实时同步服务-sersync

实时同步服务-sersync

1. 什么是Sersync

sersync是基于inotify开发的,类似于inotify-tools的工具,Sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录,因此效率更高。


Sersync优点

  1. sersync是使用c++编写,而且对linux系统文件系统产生的临时文件和重复的文件操作进行过滤,所以在结合rsync同步的时候,节省了运行时耗和网络资源。因此更快。

  2. sersync配置很简单,其目录下已经有静态编译好的二进制文件,配合目录下的xml配置文件直接使用即可。

  3. sersync使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。

  4. sersync有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则按设定时长对同步失败的文件重新同步。

  5. sersync自带crontab功能,只需在xml配置文件中开启,即可按要求隔一段时间整体同步一次。无需再额外配置crontab功能。

  6. 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详解

image-20230215170234606


修改confxml.xml

  1. 监控本地目录/nfsdata
  2. 服务端ip和rsync模块名
  3. 修改为密码验证,配置用户名和密码验证文件
  4. 配置使用参数,修改日志文件路径
#备份原始配置文件
[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
posted @ 2023-09-12 22:25  YinJayChen  阅读(50)  评论(0编辑  收藏  举报