rsync+sersync文件实时同步
rsync+sersync文件实时同步
什么是Rsync?
Rsync(Remote Synchronize)是一款开源的、快速的、多功能的、可以实现全量及增量的本地或远程数据同步备份的优秀工具,并且支持多种操作系统平台运行。
什么是Sersync?
1、sersync是基于inotify开发的,类似于inotify-tools的工具,Sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录,因此效率更高。
2、主要应用场景为数据体积大,并且文件很多。
小结:Rsync+sersync
1、sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;
2、rsync在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此,效率很高。
准备环境
在centos7.9的环境下操作
实验步骤
在备份服务器上操作
关闭 selinux 永久关闭linux防火墙
[root@gh-mysql ~] getenforce
Disabled
[root@gh-mysql ~] vim /etc/selinux/config
[root@gh-mysql ~]#
在配置文件中记得把:SELINUX 设置为 disabled
关闭防火墙
[root@gh-mysql ~] service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
安装rsync服务端软件
[root@gh-mysql ~] yum install rsync xinetd -y
vim /etc/rc.d/rc.local # #设置开机启动
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf # 添加开机启动
chmod +x /etc/rc.d/rc.local
systemctl start xinetd #启动xinetd
xinted是一个提高保姆服务的进程,rsync是它照顾的进程
独立的服务:ssk dhcp,mysq1
非独立的服务,非独立的服务需要依赖其他的服务来管理,rsync就是一个非独立的服务,依赖xinetd来管理
创建rsyncd.conf配置文件
$ vi /etc/rsyncd.conf
uid = root
gid = root
use chroot = yes
max connections = 0
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
secrets file = /etc/rsync.pass
motd file = /etc/rsyncd.Motd
[back_data] #配置项名称(自定义)
path = /backup #备份文件存储地址
comment = A directory in which data is stored
ignore errors = yes
read only = no
hosts allow = 192.168.153.136 #允许的ip地址(数据源服务器地址)
创建用户认证文件
[root@gh-mysql etc] vim /etc/rsync.pass # 配置文件,添加以下内容,添加允许传输用户和密码
[root@gh-mysql etc] cat /etc/rsync.pass # 格式,用户名:密码,可以设置多个,每行一个用户名:密码
sc:sc123456
设置文件权限
[root@gh-mysql etc]# chmod 600 /etc/rsyncd.conf #设置文件所有者读取、写入权限
[root@gh-mysql etc]# chmod 600 /etc/rsync.pass
启动rsync和xinetd
[root@gh-mysql etc]# /usr/bin/rsync --daemon --config=/etc/rsyncd.conf
[root@gh-mysql etc]# ps aux|grep rsync
root 2327 0.0 0.0 114852 568 ? Ss 10:21 0:00 /usr/bin/rsync --daemon --config=/etc/rsyncd.conf
root 2329 0.0 0.0 112824 976 pts/0 S+ 10:21 0:00 grep --color=auto rsync
[root@gh-mysql etc]# systemctl start xinetd
[root@gh-mysql etc]# ps aux|grep xinetd
root 2271 0.0 0.0 25044 588 ? Ss 09:57 0:00 /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid
root 2340 0.0 0.0 112824 976 pts/0 S+ 10:22 0:00 grep --color=auto xinetd
[root@gh-mysql etc]#
rsync监听的端口
[root@gh-mysql etc]# netstat -antplu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 972/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1331/master
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 2327/rsync
tcp 0 36 192.168.153.132:22 192.168.153.1:50707 ESTABLISHED 2120/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 972/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1331/master
tcp6 0 0 :::873 :::* LISTEN 2327/rsync
tcp6 0 0 :::3306 :::* LISTEN 1309/mysqld
udp 0 0 127.0.0.1:323 0.0.0.0:* 701/chronyd
udp6 0 0 ::1:323 :::* 701/chronyd
[root@gh-mysql etc]#
可以看出监听的是873端口
在数据源服务器上操作
(1)安装rsync客户端软件
关闭防火墙和selinux步骤同上
[root@mysql-2 ~]# vim /etc/selinux/config
[root@mysql-2 ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@mysql-2 ~]# getenforce
Disabled
[root@mysql-2 ~]#
安装rsync客户端软件
$ yum install rsync xinetd # 安装
$ vi /etc/rc.local # #设置开机启动
/usr/bin/rsync --daemon # 添加开机启动
[root@mysql-2 ~] chmod +x /etc/rc.d/rc.local
[root@mysql-2 ~] vim /etc/rsyncd.conf
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
motd file = /etc/rsyncd.Motd
[Sync]
comment = Sync
uid = root
gid = root
port= 873
systemctl start xinetd #启动(CentOS中是以xinetd来管理rsync服务的
创建认证密码文件
$ vim /etc/passwd.txt #编辑文件,添加以下内容,该密码应与目标服务器中的/etc/rsync.pass中的密码一致
sc123456
$ chmod 600 /etc/passwd.txt #设置文件权限,只设置文件所有者具有读取、写入权限即可
测试数据同步
数据源服务器 192.168.153.136 到备份服务器 192.168.153.132 之间的数据同步
$ rsync -avH --port=873 --progress --delete /backup(要备份的数据源目录 ) root@192.168.153.132::back_data(rsyncd.conf文件配置名称) --password-file=/etc/passwd.txt
rsync -avH --port=873 --progress --delete /backup root@192.168.153.132::back_data --password-file=/etc/passwd.txt
这是一个用于同步文件的rsync命令。下面是对每个选项的解释:
-a
:表示归档模式,用于保持文件的所有属性,包括权限、所有者和组、时间戳等。-v
:表示详细模式,用于输出更详细的同步过程信息。-H
:表示保留硬链接。--port=873
:表示使用873端口进行传输。--progress
:表示显示传输进度。--delete
:表示在目标目录中删除已被源目录删除的文件。/backup
:表示源目录的路径。root@192.168.153.132::back_data
:表示目标服务器和模块名。这里的root
是目标服务器的用户名,192.168.153.132
是目标服务器的IP地址,back_data
是目标服务器上的一个模块名。--password-file=/etc/passwd.txt
:表示从指定文件中读取密码。这里的/etc/passwd.txt
是存储密码的文件的路径。综上所述,这个操作的目的是将本地的
/backup
目录中的文件同步到目标服务器的back_data
模块中,同时保持文件属性和硬链接,并在传输过程中显示进度。如果目标服务器上已经存在的文件在源目录中不存在,则会在目标目录中删除这些文件。密码信息存储在/etc/passwd.txt
文件中。
[root@mysql-2 ~] rsync -avH --port=873 --progress --delete /backup root@192.168.153.132::back_data --password-file=/etc/passwd.txt
sending incremental file list
backup/
backup/2023-11-28_wangshuai.sql
2,071 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=6/8)
backup/all_db.sql
909,712 100% 173.51MB/s 0:00:00 (xfr#2, to-chk=5/8)
backup/backup_db.sh
222 100% 43.36kB/s 0:00:00 (xfr#3, to-chk=4/8)
backup/gh.txt
0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=3/8)
backup/gh_gaohui.sql
5,548 100% 1.06MB/s 0:00:00 (xfr#5, to-chk=2/8)
backup/ten_pla.sql
3,771 100% 613.77kB/s 0:00:00 (xfr#6, to-chk=1/8)
backup/ws.sql
2,018 100% 328.45kB/s 0:00:00 (xfr#7, to-chk=0/8)
sent 924,115 bytes received 153 bytes 88,025.52 bytes/sec
total size is 923,342 speedup is 1.00
[root@mysql-2 ~]#
测试成功,这个时候会在备份服务器上的/backup 文件夹中多出一个 backup文件夹,这个文件夹里的内容就是源服务器里的内容
[root@gh-mysql backup]# ls
2023-11-28_wangshuai.sql backup
[root@gh-mysql backup]#
增加,删除文件,测试增量备份
源:
[root@mysql-2 backup]# rm -rf passwd
[root@mysql-2 backup]# cp /etc/hosts .
[root@mysql-2 backup]# rsync -avH --port=873 --progress --delete /backup root@192.168.153.132::back_data --password-file=/etc/passwd.txt
sending incremental file list
deleting backup/passwd
backup/
backup/hosts
158 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=2/9)
sent 482 bytes received 56 bytes 46.78 bytes/sec
total size is 923,500 speedup is 1,716.54
[root@mysql-2 backup]#
备:
[root@gh-mysql backup]# ls
2023-11-28_wangshuai.sql all_db.sql backup_db.sh gh_gaohui.sql gh.txt hosts ten_pla.sql ws.sql
[root@gh-mysql backup]#
实时同步
(2)安装sersync工具(安装在数据源服务器),实时触发rsync进行同步
修改inotify默认参数(inotify默认内核参数值太小) 修改参数
sysctl -w fs.inotify.max_queued_events="99999999"
sysctl -w fs.inotify.max_user_watches="99999999"
sysctl -w fs.inotify.max_user_instances="65535"
[root@mysql-2 backup] vim /etc/sysctl.conf 永久修改参数
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535
安装sersync
[root@mysql-2 backup]# wget http://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz
--2023-12-09 11:18:48-- http://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz
正在解析主机 down.whsir.com (down.whsir.com)... 111.180.191.24
正在连接 down.whsir.com (down.whsir.com)|111.180.191.24|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 301 Moved Permanently
位置:https://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz [跟随至新的 URL]
--2023-12-09 11:18:48-- https://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz
正在连接 down.whsir.com (down.whsir.com)|111.180.191.24|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:727290 (710K) [application/octet-stream]
正在保存至: “sersync2.5.4_64bit_binary_stable_final.tar.gz”
100%[=====================================================================>] 727,290 --.-K/s 用时 0.1s
2023-12-09 11:18:48 (5.80 MB/s) - 已保存 “sersync2.5.4_64bit_binary_stable_final.tar.gz” [727290/727290])
[root@mysql-2 backup]#
[root@mysql-2 backup] tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@mysql-2 backup]# ls
2023-11-28_wangshuai.sql gh_gaohui.sql hosts ws.sql
all_db.sql gh.txt sersync2.5.4_64bit_binary_stable_final.tar.gz
backup_db.sh GNU-Linux-x86 ten_pla.sql
[root@mysql-2 backup] mv GNU-Linux-x86/ /usr/local/sersync
[root@mysql-2 backup]#
创建rsync
[root@mysql-2 backup] cd /usr/local/sersync
[root@mysql-2 sersync]#
[root@mysql-2 sersync]# ls
confxml.xml sersync2
[root@mysql-2 sersync] cp confxml.xml confxml.xml.bak
[root@mysql-2 sersync] cp confxml.xml data_configxml.xml 备份一下,防止出错,好还原
[root@mysql-2 sersync]#
[root@mysql-2 sersync]# ls
confxml.xml confxml.xml.bak data_configxml.xml sersync2
[root@mysql-2 sersync]#
修改配置 data_configxml.xml 文件
<localpath watch="/backup">
25 <remote ip="192.168.153.132" name="back_data"/>
26 <!--<remote ip="192.168.8.39" name="tongbu"/>-->
27 <!--<remote ip="192.168.8.40" name="tongbu"/>-->
28 </localpath>
29 <rsync>
30 <commonParams params="-artuz"/>
31 <auth start="false" users="root" passwordfile="/etc/passwd.txt"/>
32 <userDefinedPort start="false" port="874"/><!-- port=874 -->
33 <timeout start="false" time="100"/><!-- timeout=100 -->
34 <ssh start="false"/>
35 </rsync>
启动服务
先修改环境变量,方便执行
[root@mysql-2 sersync] PATH=/usr/local/sersync/:$PATH
[root@mysql-2 sersync] which sersync2
/usr/local/sersync/sersync2
[root@mysql-2 sersync] echo 'PATH=/usr/local/sersync/:$PATH' >>/root/.bashrc '永久修改'
[root@mysql-2 sersync]#
[root@mysql-2 sersync]# sersync2 -d -r -o /usr/local/sersync/data_configxml.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: /usr/local/sersync/data_configxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console
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 /backup && rsync -artuz -R --delete ./ 192.168.153.132::back_data >/dev/null 2>&1
[root@mysql-2 sersync]# run the sersync:
watch path is: /backup
[root@mysql-2 sersync]#
成功了!
设置sersync监控开机自动执行
$ vim /etc/rc.d/rc.local #编辑,在最后添加
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/data_configxml.xml
这里有个小问题
密码不正确或者用户名不正确,也可以实时同步文件,思考底层是否利用了我们建立的ssh免密通道?
是的,如果在两台机器之间设置了免密通道(即通过密钥对进行身份验证),即使密码不正确,文件仍然可以实时同步。sersync使用rsync命令进行文件同步,当rsync命令在两台机器之间建立了免密通道后,不再需要输入密码进行身份验证。
一图能抵千言万语
本篇文章参考地址:https://blog.csdn.net/qq_36045024/article/details/105072818