rsync+sersync文件实时同步

rsync+sersync文件实时同步

什么是Rsync?

Rsync(Remote Synchronize)是一款开源的、快速的、多功能的、可以实现全量及增量的本地或远程数据同步备份的优秀工具,并且支持多种操作系统平台运行。

什么是Sersync?

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

2、主要应用场景为数据体积大,并且文件很多。

小结:Rsync+sersync
1、sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;
2、rsync在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此,效率很高。

准备环境

image-20231209094318008

在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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不冤不乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值