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

Rsync+sersync2实现目录实时同步

Sersync + rsync 实现实时同步服务

sersync2二进制包目录规划

/app/tools/sersync/
/app/tools/sersync/bin
/app/tools/sersync/conf

项目架构是这样的:

+-------------------+        +-------------------+        +-------------------+
|                   |        |                   |        |                   |
|    Web Server     | -----> |    NFS Server     | -----> | Backup Server     |
|                   |        |                   |        |                   |
+-------------------+        +-------------------+        +-------------------+^                               ^                           ^|                               |                           ||                               |                           |(通过NFS挂载)                 (提供共享目录)             (实时同步数据)

首先需要在rsync服务端更改一下配置文件,增加nfsbackup模块,

[nfsbackup]
path = /nfsbackup
comment = nfsbackup Directory
read only = no
list = no                   # 禁止列出模块(安全建议)

再创建nfsbackup文件夹

mkdir /nfsbackup/ -p

最后重启rsyncd服务

systemctl restart rsyncd 

NFS服务器的相关配置

先决条件:创建data目录,挂载本地目录

mkdir /data/ -p
mount -t nfs /data/ /mnt

接下来需要更改NFS的配置文件,它是/etc/exports

vim /etc/exports

增加一行

/nfsdata 192.168.179.0/24(rw,sync,all_squash,anonuid=1999,anongid=1999,no_subtree_check)

然后重新加载一下nfs 服务

systemctl reload nfs 
  • 配置sersync2,先创建目录
mkdir /app/tools/sersync/ -p
mkdir /app/tools/sersync/bin -p
mkdir /app/tools/sersync/conf -p

下载sersync的二进制包到本地

wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz

解压压缩包,然后进入目录,里面有两个文件,sersync2是二进制包,可以直接运行。confxml.xml是sersync的配置文件

tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
cd GNU-Linux-x86
[root@nfs-01 GNU-Linux-x86]# ll
total 1772
-rwxr-xr-x 1 root root    2214 Oct 26  2011 confxml.xml
-rwxr-xr-x 1 root root 1810128 Oct 26  2011 sersync2

对于sersync2,可以使用软链接的方式放到/bin目录下,不需要移动文件

ln -s /app/tools/sersync/bin/sersync2 /bin

然后进入/app/tools/sersync/conf目录下,修改confxml.xml这个配置文件

cd /app/tools/sersync/conf
vim confxml.xml
    <localpath watch="/data"><remote ip="192.168.179.152" name="nfsbackup"/><!--<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="root" passwordfile="/etc/rsync-client.pass"/><userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="false" time="100"/><!-- timeout=100 --><ssh start="false"/></rsync>
2.1 本地路径与监控配置 (<localpath>)
xml复制代码<localpath watch="/监控的目录路径">  <!-- 示例:/data/www --><remote ip="远程IP1" name="rsync模块名"/>  <remote ip="远程IP2" name="rsync模块名"/>  
</localpath>
  • 关键参数 :
    • watch:需监控的本地目录(如 /data/www),目录需存在且有读权限。
    • <remote>:可配置多个远程服务器,ip 为远程服务器 IP,name 对应服务端 rsyncd.conf 中定义的模块名。
2.2 rsync 参数配置 (<rsync>)
xml复制代码<rsync><commonParams params="-artuz --delete"/>  <!-- rsync 命令参数 --><auth start="true" users="rsync用户名" passwordfile="/密码文件路径"/>  <!-- 认证配置 --><userDefinedPort start="false" port="874"/>  <!-- 默认端口873 --><timeout start="false" time="100"/>  <!-- 超时设置 --><ssh start="false"/>  <!-- 是否使用SSH -->
</rsync>
  • 关键参数:

    • commonParams
      

      • -artuz:归档模式、递归、保留时间、增量同步、压缩传输。
      • --delete建议添加,删除目标端多余文件(保持严格一致时使用)。
    • auth
      

      • users:远程 rsyncd.conf 中配置的认证用户名(如 rsync_user)。
      • passwordfile:本地存储密码的文件路径(如 /etc/rsync.pass),文件内容仅为密码,权限需 600
    • userDefinedPort:若修改了 rsync 默认端口(默认 873),需在此处启用并指定端口。

    • sshstart="false" 表示使用 rsync 协议,若为 true 则需配置 SSH 密钥认证。

修改完之后查看区别

vimdiff /GNU-Linux-x86/confxml.xml

在这里插入图片描述

web服务器挂载NFS共享目录

现在还需要挂载NFS的目录:

先创建一个目录,就叫做upload吧

mkdir /upload -p

然后再进行挂载:

mount -t nfs 192.168.179.151:/data

查看目录挂载情况

df -h /upload/

在这里插入图片描述

软链接到bin目录

ln -s /app/tools/sersync/bin/sersync2 /bin/

使用sersync2的help命令

sersync2 -h

在这里插入图片描述

启动服务

sersync2 -rdo /app/tools/bin/confxml.xml 

查看状态是否正常

ps -ef | grep sersync2

在这里插入图片描述

测试,在web服务器上创建十个文件

在这里插入图片描述

在备份服务器上查看,可以看到数据完全被同步过来了。

在这里插入图片描述

到此,测试通过。通过rsync+sersync2的方式完成了一个实时同步的小项目,还是非常有实战价值的

相关文章:

  • 模拟SSE流式输出的四种方法
  • 黑马商城(四)网关
  • velocity模板引擎
  • C语言用if else求三个数最小值的一题多解
  • 页内碎片和页外碎片的区别
  • 第十届团体程序设计天梯赛-上理赛点随笔
  • @Validated与@Valid的正确使用姿势
  • Python制作简易PDF查看工具PDFViewerV1.0显示优化
  • 【生态与未来】立足原生仓颉:Cangjie Magic 的生态位与未来发展潜力分析
  • 基于 GPT-SoVITS 实现个性化语音复刻的API服务调用:让小说朗读拥有专属声线
  • 静态成员相关知识
  • AOSP的Doze模式-LightIdle初识
  • 测试基础笔记第六天
  • 『Linux_网络』 第二章 UDP_Socket编程
  • 从《周游记3》演绎歌剧版《菊花台》,周杰伦婚礼曲目意大利文版惊喜亮相
  • docker 搭建nacos 2.2.1版本单机版
  • 下一代互联网
  • java怎么完善注册,如果邮箱中途更换,能否判断
  • 2025/4/19 数据库的流程控制函数
  • Redis客户端下载使用
  • 尹锡悦涉嫌发动内乱案第二次庭审21日举行,媒体获准拍摄
  • 甘肃古浪县发生3.0级地震,未接到人员伤亡和财产损失报告
  • 伊朗外长: 下一轮伊美核问题谈判将于26日举行
  • 网络社群的早期历史及其启示
  • 美政府公布1968年罗伯特·肯尼迪遇刺事件档案
  • 商务部新闻发言人就美对我海事、物流和造船等领域宣布最终措施答记者问