当前位置: 首页 > news >正文

使用Rsync+sersync实现数据实时同步

目录

一、rsync概述

二、rsync运行原理

三、rsync部署

四、备份测试

五、rsync+sersync 实现数据实时同步

5.1、数据同步原理

5.2 、部署rsync+sersync

一、rsync概述

Rsync(Remote Sync)是Linux系统下的数据镜像备份工具。该工具可以实现远程同步、不同主机之间的同步,也能实现全量备份增量备份,保持数据链接和权限,并采用优化的同步算法,传输前对数据进行压缩,故该工具非常适合架构集中式备份异地备份,也支持本地复制。

官网地址:https://rsync.samba.org/

优点:

  • scp无法备份大量数据,而rsync备份、统计、比较一起进行。

  • 可以备份整个目录树和文件系统,并保持文件原来的权限、时间、软硬链接。

  • 安装较容易,无需特殊权限。

  • 同步快速,首次同步完全备份,再次同步增量备份。

  • 可以使用scp和ssh等方式传输备份文件

  • 支持匿名传输

  • 选择性保持:符号链接、硬链接、文件属性、权限、时间等

  • 传输速度快:压缩再传输、解压再使用,减少带宽。

备份分类:

  • 完全备份:所有文件进行备份

  • 差异备份:备份自上次完全备份以来所有的修改

  • 增量备份:备份自上次备份依赖所作的修改

二、rsync运行原理

rsync采用C/S模式,即点到点的传输。通过xinetd服务监听873端口,再让xinetd服务下的rsync服务作出响应。

源主机:需要同步数据的服务器

目标主机:存放服务器同步数据的主机

数据同步方式:push 和 pull

  • 推push:主动同步,把数据发送给目标主机。服务器开销大,适合后端服务器较少的情况。【服务器备份推给rsync客户端存放,主动模式】

目的主机配置为 rsync 服务端,源主机周期性的使用 rsync 命令把要同步的目录推过去。

  • 拉pull:所有客户端主机去服务器上面拉数据,导致数据传输缓慢。【rsync客户端去服务器上拉数据,存放到客户端上,被动模式】

源主机配置为 rsync 服务端,目的主机周期性的使用 rsync 命令把要同步的目录拉过来。

三、rsync部署

  • rsync服务由xinetd服务进行管理,故也需要安装xinetd服务
  • 客户端和服务器都需要安装xinetd服务和rsync服务
[root@source-server ~]# yum install -y rsync
local                                                  3.4 MB/s | 3.5 kB     00:00    
Package rsync-3.2.7-5.oe2403sp1.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete![root@source-server ~]# yum install -y xinetd
Last metadata expiration check: 0:02:33 ago on 2025年09月19日 星期五 14时38分43秒.
Dependencies resolved.
=======================================================================================Package         Architecture    Version                          Repository      Size
=======================================================================================
Installing:xinetd          x86_64          2:2.3.15-35.oe2403sp1            local           82 kTransaction Summary
=======================================================================================
Install  1 PackageTotal size: 82 k
Installed size: 193 k
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transactionPreparing        :                                                               1/1 Installing       : xinetd-2:2.3.15-35.oe2403sp1.x86_64                           1/1 Running scriptlet: xinetd-2:2.3.15-35.oe2403sp1.x86_64                           1/1 
Created symlink /etc/systemd/system/multi-user.target.wants/xinetd.service → /usr/lib/systemd/system/xinetd.service.Verifying        : xinetd-2:2.3.15-35.oe2403sp1.x86_64                           1/1 Installed:xinetd-2:2.3.15-35.oe2403sp1.x86_64                                                   Complete!
  • 查看是否监听873号端口
[root@backup-server ~]# systemctl start rsyncd
[root@backup-server ~]# netstat -anpt | grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      6229/rsync          
tcp6       0      0 :::873                  :::*                    LISTEN      6229/rsync   

用法:

--port指定端口号,默认873
--delete删除那些目标位置有的文件而备份源没有的文件,最大程度的保持一致
-avz常用:保留权限、显示同步过程、压缩传输

四、备份测试

  • 服务端(需要进行数据备份的主机) 上创建测试目录/data,并写入数据
[root@source-server ~]# mkdir /data
[root@source-server ~]# cd /data/
[root@source-server data]# for i in {1..10}; do touch $i.txt && mkdir dir$i; done
[root@source-server data]# ls
10.txt  2.txt  4.txt  6.txt  8.txt  dir1   dir2  dir4  dir6  dir8
1.txt   3.txt  5.txt  7.txt  9.txt  dir10  dir3  dir5  dir7  dir9
  • 客户端(备份存储的主机) 上创建备份存放目录/backup,并编写rsync配置文件
[root@backup-server ~]# mkdir /backup[root@backup-server ~]# vim /etc/rsyncd.conf 
port=873
address = 192.168.100.128     # 监听地址,一般是目标主机的IP地址
uid = root
gid = root
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
motd file = /etc/rsyncd.motd
hosts allow = 192.168.100.0/24   # 允许同步的主机
[backup]
path = /backup
comment = bakcup data
read only = false
list = yes
auth users = rsyncuser
secrets file = /etc/rsync.passwd
  •  创建欢迎信息文件
[root@backup-server ~]# vim /etc/rsyncd.motd
Welcome to Backup Server!
  • 创建密码文件,格式   用户名:密码
[root@backup-server ~]# vim /etc/rsync.passwd
rsyncuser:123456
  • 设置密码文件权限为600
[root@backup-server backup]# chmod 600 /etc/rsync.passwd[root@backup-server etc]# ls -l rsync.passwd 
-rw-------. 1 root root 17  9月19日 16:06 rsync.passwd
  • pull拉取数据进行同步
[root@backup-server ~]# rsync root@192.168.100.253:/data/* /backup/
The authenticity of host '192.168.100.253 (192.168.100.253)' can't be established.
ED25519 key fingerprint is SHA256:31rlqlsTnd0HoJKaXEOLDXR1zPtZ2+W94bYXeJJKN3Q.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.100.253' (ED25519) to the list of known hosts.Authorized users only. All activities may be monitored and reported.
root@192.168.100.253's password: 
skipping directory dir1
skipping directory dir10
skipping directory dir2
skipping directory dir3
skipping directory dir4
skipping directory dir5
skipping directory dir6
skipping directory dir7
skipping directory dir8
skipping directory dir9[root@backup-server ~]# cd /backup/
[root@backup-server backup]# ls
10.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt
--delete删除那些目标位置有的文件而备份源没有的文件,最大程度的保持一致
-avz常用:保留权限、显示同步过程、压缩传输
[root@backup-server backup]# touch 12124234
[root@backup-server backup]# touch fgwegqeh
[root@backup-server backup]# ls
10.txt  12124234  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt  fgwegqeh[root@backup-server backup]# rsync -avz --delete root@192.168.100.253:/data/ /backup/Authorized users only. All activities may be monitored and reported.
root@192.168.100.253's password: 
receiving incremental file list
deleting fgwegqeh
deleting 12124234
./
1.txt
10.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
9.txt
dir1/
dir10/
dir2/
dir3/
dir4/
dir5/
dir6/
dir7/
dir8/
dir9/sent 261 bytes  received 833 bytes  128.71 bytes/sec
total size is 0  speedup is 0.00
[root@backup-server backup]# ls
10.txt  2.txt  4.txt  6.txt  8.txt  dir1   dir2  dir4  dir6  dir8
1.txt   3.txt  5.txt  7.txt  9.txt  dir10  dir3  dir5  dir7  dir9
  • push推送数据进行同步
[root@source-server ~]# rsync -avz --delete /data/ rsyncuser@192.168.100.128::backup
Welcome to Backup Server!Password: 
sending incremental file list
./
1.txt
10.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
9.txt
dir1/
dir10/
dir2/
dir3/
dir4/
dir5/
dir6/
dir7/
dir8/
dir9/sent 845 bytes  received 253 bytes  313.71 bytes/sec
total size is 0  speedup is 0.00[root@backup-server backup]# rm -rf *
[root@backup-server backup]# ls
10.txt  2.txt  4.txt  6.txt  8.txt  dir1   dir2  dir4  dir6  dir8
1.txt   3.txt  5.txt  7.txt  9.txt  dir10  dir3  dir5  dir7  dir9

五、rsync+sersync 实现数据实时同步

5.1、数据同步原理

1、为什么要是用rsync+sersync?

sersync是基于inotify开发的,可以记录目录中发生变化的内容,具体到某个文件或者目录,在使用rsync同步的时候,只同步发生变化的文件或者目录。【增量同步】

2、rsync+inotify-tools 与 rsync+sersync 架构的区别?

①inotify-tools只能记录目录发生了变化,但是不能具体到某个文件或者目录。

②rsync同步不清楚哪些文件或目录发生了变化,就会整个目录都同步,效率低。

3、同步过程:

①源服务器上开启sersync记录指定路径的文件系统变化情况。

②源服务器上使用rsync命令把变化的数据同步到目标服务器上。

③源服务器上配置sersync服务,目标服务器安装rsync服务。

5.2 、部署rsync+sersync

sersync服务端【同步服务器】:192.168.100.253

rsync客户端【存放备份,目标服务器】:192.168.100.128

  • 开始部署sersync守护进程

下载并解压到指定路径

[root@source-server ~]# rz
rz waiting to receive.**[root@source-server ~]# 
[root@source-server ~]# ls
anaconda-ks.cfg  fdisk.sh        if.sh                read.sh                                        testfile
case.sh          first_shell.sh  nginx-1.29.1         sersync2.5.4_64bit_binary_stable_final.tar.gz  test.sh
chpasswd.sh      for.sh          nginx-1.29.1.tar.gz  sshd_check_status.sh                           while.sh
expect.exp       if1.sh          passwd.txt           test.exp
[root@source-server ~]# tar -xf sersync2.5.4_64bit_binary_stable_final.tar.gz                                                                                                                                                                             [root@source-server ~]# ls
anaconda-ks.cfg  fdisk.sh        if1.sh               passwd.txt                                     test.exp
case.sh          first_shell.sh  if.sh                read.sh                                        testfile
chpasswd.sh      for.sh          nginx-1.29.1         sersync2.5.4_64bit_binary_stable_final.tar.gz  test.sh
expect.exp       GNU-Linux-x86   nginx-1.29.1.tar.gz  sshd_check_status.sh           
[root@source-server ~]# mv sersync2.5.4_64bit_binary_stable_final.tar.gz /opt[root@source-server opt]# cd GNU-Linux-x86/
[root@source-server GNU-Linux-x86]# ls
confxml.xml  sersync2

 修改sersync的配置文件

 [root@source-server GNU-Linux-x86]# vim confxml.xml 
<sersync><localpath watch="/data"><remote ip="192.168.100.128" name="backup"/><!--<remote ip="192.168.8.39" name="tongbu"/>--><!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath><rsync><commonParams params="-artuz"/><auth start="true" users="rsyncuser" passwordfile="/etc/rsync.passwd"/><userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="false" time="100"/><!-- timeout=100 --><ssh start="false"/>

开启sersync守护进程同步数据,即实时同步。

[root@source-server opt]# mv GNU-Linux-x86/ sersync
[root@source-server opt]# ls
nginx-1.29.1  nginx-1.29.1.tar.gz  patch_workspace  sersync  sersync2.5.4_64bit_binary_stable_final.tar.gz[root@source-server opt]# export PATH=$PATH:/opt/sersync  #保留系统原有的路径配置,避免被覆盖[root@source-server opt]# sersync2 -d -r -o ./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:  ./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 rsyncuser
passwordfile is         /etc/rsync.passwd
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 /data && rsync -artuz -R --delete ./ rsyncuser@192.168.100.128::backup --password-file=/etc/rsync.passwd >/dev/null 2>&1    #同步指令
run the sersync: 
watch path is: /data
[root@source-server data]# mkdir dir20
[root@source-server data]# touch 20.txt
[root@source-server data]# ls
10.txt  20.txt  3.txt  5.txt  7.txt  9.txt  dir10  dir20  dir4  dir6  dir8
1.txt   2.txt   4.txt  6.txt  8.txt  dir1   dir2   dir3   dir5  dir7  dir9[root@backup-server backup]# ls
20.txt  data  dir20

从以上测试可以看出,rsync+sersync已经部署完成,可以正常的同步数据到目标主机上。

http://www.dtcms.com/a/390779.html

相关文章:

  • 关于conda forge长时间solving的问题以及如何解决
  • 前端学习手册-JavaScript基础语法(十)
  • 如何在 Linux 服务器上查看 GPU 型号与 CUDA 版本?
  • LeetCode hot 100 解题思路记录(三)
  • 小程序移动端设计UI(二)酒店自助入住小程序—东方仙盟练气期
  • 解决pnpm中的 Pinia 版本冲突:Cannot read properties of undefined (reading ‘_s‘)
  • 说一说大模型后训练的流程
  • 【微实验】激光测径系列(三)
  • Vim 使用从入门到精通
  • 快速实现 Excel 表格转 SVG:Java 教程
  • [极客大挑战 2019]LoveSQL
  • Excel和WPS表格中选中全部空单元格并输入相同内容
  • 日志易制造业安全UEBA解决方案
  • Java 将 HTML 转换为 Excel:实用指南
  • MySQL索引篇---数据结构的选择
  • 【STM32 CubeMX + Keil】 中断、NVIC 、EXTI
  • BIGO一面面试总结
  • Ansible-fetch模块
  • DevExpress WPF中文教程:DataGrid - 服务器数据和大型数据源
  • Vue项目不同页面显示不同的title
  • NW820NW825美光固态闪存NW829NW832
  • aosp13/14/15/16如何实现窗口局部区域高斯模糊毛玻璃效果及Winscope原生重大bug发现
  • Java微服务架构设计模式精解
  • 设计模式面试之单例模式常问知识点
  • 深入解析 MySQL 元数据锁 (MDL) 与 SHOW PROCESSLIST 实战
  • 能不能写一个可以在linux使用的类nano编辑器
  • Rocky10 使用kubeadm部署K8s v1.34 一主两从
  • 深入理解Buffer:数据世界的“蓄水池“
  • 通义万相开源 Wan2.2-S2V-14B,实现图片+音频生成电影级数字人视频
  • windows c++环境 使用VScdoe配置opencv