首页 > 其他分享 >rsync+sersync实时同步目录和文件

rsync+sersync实时同步目录和文件

时间:2023-11-28 17:14:52浏览次数:29  
标签:rsync sersync log 实时 sersync2 file data

0、服务器准备

0.1、三台服务器:

rsync:192.168.1.9

sersync:192.168.1.10、192.168.1.11

 

0.2、部署这套服务的背景

       将多个子公司的备份数据实时同步到备份服务器上,rsync作为备份服务器,sersync部署在各个子公司上,只需将各个子公司服务器上需要备份的数据拷贝到/data/sersync/tongbu目录即可实时同步到rsync上对应的/data/rsync/data/zgjt、zggy目录上

 

0.3、服务器以及对应同步目录

 

sersync服务器 192.168.1.10 源目录:/data/sersync/tongbu rsync服务器 192.168.1.9 目标目录:/data/rsync/data/zgjt
sersync服务器 192.168.1.11 源目录:/data/sersync/tongbu rsync服务器 192.168.1.9 目标目录:/data/rsync/data/zggy

 

1、rsync部分

# 下载rsync服务
yum install rsync

 

1.1、配置 rsync 服务端

在源服务器上,配置 rsync 服务端。编辑 /etc/rsyncd.conf 文件,创建并配置一个模块,模块定义了同步的规则。

[root@rl--0001 rsync]# cat /etc/rsyncd.conf 
# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:

uid = root
gid = root
use chroot = no                          # 安全相关
max connections = 2000                   # 并发连接数
timeout = 600                            # 超时时间(秒)
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
#hosts allow = 172.16.4.0/23
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password  #需要创建对应的用户密码文件,并放置到指定目录,我这里是在/etc

[zg]
comment = zg 
path = /data/rsync/data/zgjt

[zggy]
comment = zggy
path = /data/rsync/data/zggy

 

1.2、设置远程同步认证文件(需要和上边rsyncd.conf配置文件中的auth users、secrets file 两项保持一致)

echo "rsync_backup:Hik@123" | sudo tee /etc/rsync.passwordchmod 600 /etc/rsync.password

 

1.3、启动脚本(也可以添加crontab,做守护脚本)

[root@rl--0001 rsync]# cat rc_daemon.sh 
#!/bin/bash

rsync_port=873  # 修改为你的 rsync 端口号
log_file="/var/log/rsync_check.log"  # 修改为你希望保存日志的文件路径
pid_file="/var/run/rsyncd.pid"

# 获取当前时间的时间戳
timestamp=$(date +"%Y-%m-%d %H:%M:%S")

# 使用 ps 命令检测 rsync 进程,并使用 nc 命令检测 rsync 的端口
if ps aux | grep -q "[r]sync.*--daemon"; then
    echo "$timestamp: rsync process and port are both running. No action needed." | tee -a $log_file
else
    echo "$timestamp: rsync process or port is not running. Restarting rsync..." | tee -a $log_file
    
    # 停止 rsync 进程(如果存在)
    pkill -f "[r]sync.*--daemon"
    
    # 删除旧的 PID 文件
    rm -f "$pid_file"

    # 启动 rsync(在这里修改为你的 rsync 启动命令,包括端口参数)
    /usr/bin/rsync --daemon --port=$rsync_port
    
    echo "$timestamp: rsync has been restarted." | tee -a $log_file
fi

 

2、sersync安装

2.1、下载sersync安装包

wget https://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz
tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz 
mv /data/GNU-Linux-x86 /data/sersync

 

2.2、confxml.xml 配置文件说明

<inotify>部分
这部分定义了同步时的策略,包含目录和文件删除、创建、属性变化等

<inotify>
    <delete start="true"/>
    <createFolder start="true"/>
    <createFile start="true"/>
    <closeWrite start="true"/>
    <moveFrom start="true"/>
    <moveTo start="true"/>
    <attrib start="true"/>
    <modify start="true"/>
</inotify>



这是 inotify 部分的配置,用于指定 sersync 监听的不同文件系统事件。下面是每一行的含义:

<delete start="true"/>: 文件或目录被删除。
<createFolder start="true"/>: 目录被创建。
<createFile start="true"/>: 文件被创建。
<closeWrite start="true"/>: 文件被关闭以进行写入。
<moveFrom start="true"/>: 文件或目录从监控的目录中移出。
<moveTo start="true"/>: 文件或目录被移动到监控的目录中。
<attrib start="true"/>: 文件属性发生变化。
<modify start="true"/>: 文件内容被修改。

 

<localpath> 部分:
这部分定义了本地监控的路径为 /data/sersync/tongbu,并指定了一个远程服务器 18.0.141.70 作为同步目标,使用名称 "zcdl" 标识。这意味着 /data/sersync/tongbu 中的文件更改将实时同步到远程服务器

<localpath watch="/data/sersync/tongbu">
    <remote ip="18.0.141.70" name="zcdl"/>
</localpath>

 

<rsync> 部分
这是 rsync 相关的配置,指定了 rsync 的参数(-artuz),启用了身份验证,指定了用户名为 "rsync_backup",并指定了密码文件的路径。此外,定义了用户自定义的端口、超时时间等。

<rsync>
    <commonParams params="-artuz"/>
    <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
    <userDefinedPort start="true" port="873"/>
    <timeout start="true" time="100"/>
    <ssh start="false"/>
</rsync>

 

<failLog> 部分
这一部分定义了一个日志文件路径,用于记录同步失败的情况,并且配置了每隔 60 分钟执行一次

<failLog path="/data/sersync/rsync_fail_log.sh" timeToExecute="60"/>

 

<crontab> 部分:
这一部分定义了一个 cron 任务,但目前是禁用状态。如果启用,将每隔 600 分钟执行一次。其中,还定义了一个过滤器,排除了匹配 *.php 和 info/* 表达式的文件。

<crontab start="false" schedule="600">
    <crontabfilter start="false">
        <exclude expression="*.php"/>
        <exclude expression="info/*"/>
    </crontabfilter>
</crontab>

 

<plugin> 部分:
这一部分定义了一个插件,使用了命令行插件 (name="command"),并指定了一些参数。插件配置中还有一个过滤器,用于包含特定的文件。

<plugin start="false" name="command">
    <param prefix="/bin/sh" suffix="" ignoreError="true"/>
    <filter start="false">
        <include expression="(.*)\.php"/>
        <include expression="(.*)\.sh"/>
    </filter>
</plugin>

 

2.3、confxml.xml配置文件展示

[root@rl--0002 sersync]# cat confxml.xml 
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
    <host hostip="localhost" port="8008"></host>
    <debug start="false"/>
    <fileSystem xfs="false"/>
    <filter start="false">
    <exclude expression="(.*)\.svn"></exclude>
    <exclude expression="(.*)\.gz"></exclude>
    <exclude expression="^info/*"></exclude>
    <exclude expression="^static/*"></exclude>
    </filter>
    <inotify>
    <delete start="true"/>
    <createFolder start="true"/>
    <createFile start="true"/>
    <closeWrite start="true"/>
    <moveFrom start="true"/>
    <moveTo start="true"/>
    <attrib start="false"/>
    <modify start="false"/>
    </inotify>

    <sersync>
        <localpath watch="/data/sersync/tongbu">
        <remote ip="192.168.1.9" name="zg"/>
        <!--<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="rsync_backup" passwordfile="/etc/rsync.password"/>
        <userDefinedPort start="true" port="873"/><!-- port=874 -->
        <timeout start="true" time="100"/><!-- timeout=100 -->
        <ssh start="false"/>
    </rsync>
    <failLog path="/data/sersync/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
    <crontab start="false" schedule="600"><!--600mins-->
        <crontabfilter start="false">
        <exclude expression="*.php"></exclude>
        <exclude expression="info/*"></exclude>
        </crontabfilter>
    </crontab>
    <plugin start="false" name="command"/>
    </sersync>

    <plugin name="command">
    <param prefix="/bin/sh" suffix="" ignoreError="true"/>    <!--prefix /opt/tongbu/mmm.sh suffix-->
    <filter start="false">
        <include expression="(.*)\.php"/>
        <include expression="(.*)\.sh"/>
    </filter>
    </plugin>

    <plugin name="socket">
    <localpath watch="/opt/tongbu">
        <deshost ip="192.168.138.20" port="8009"/>
    </localpath>
    </plugin>
    <plugin name="refreshCDN">
    <localpath watch="/data0/htdocs/cms.xoyo.com/site/">
        <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
        <sendurl base="http://pic.xoyo.com/cms"/>
        <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
    </localpath>
    </plugin>
</head>

 

2.4、配置远程同步认证文件(此文件的密码需要和rsync服务器上的/etc/rsync.password文件中的密码保持一致,但是这块是不需要用户的)

echo "Hik@123" > /etc/rsync.passwordchmod 600 /etc/rsync.password

 

2.5、sersync启动(也可以结合crontab做守护脚本)

[root@rl--0002 sersync]# cat sc_daemon.sh 
#!/bin/bash

log_file="/var/log/sersync2_check.log"  # 修改为你希望保存日志的文件路径
sersync2_executable="/data/sersync/sersync2"  # sersync2 可执行文件的路径
confxml_file="/data/sersync/confxml.xml"  # sersync2 配置文件的路径

# 获取当前时间的时间戳
timestamp=$(date +"%Y-%m-%d %H:%M:%S")

# 检查 sersync2 进程是否在运行
if pgrep -x "sersync2" >/dev/null; then
    sersync2_pid=$(pgrep -x "sersync2")
    echo "$timestamp: sersync2 process with PID $sersync2_pid is already running." | tee -a $log_file
else
    echo "$timestamp: sersync2 process is not running. Starting sersync2..." | tee -a $log_file
    
    # 启动 sersync2(在这里修改为你的 sersync2 启动命令,包括参数)
    $sersync2_executable -d -r -o $confxml_file
    echo "$timestamp: sersync2 has been started." | tee -a $log_file
fi

 

3、测试

在sersync服务器上(192.168.1.10、192.168.1.11)上,将需要同步的文件复制到/data/sersync/tongbu目录下,即可远程同步到备份服务器(192.168.1.9)的对应目录上,怎么对应目录?

3.1 需要在rsync服务器的配置文件rsyncd.conf中申明远程名称以及目录,在sersync的config.xml文件中,申明rsync的远程名称即可

rsync:

[zg]    #对应sersync的name
comment = zg 
path = /data/rsync/data/zgjt

sersync:

<sersync>
        <localpath watch="/data/sersync/tongbu">
        <remote ip="192.168.1.9" name="zg"/>               #这块就对应rsync上的[zg]
        <!--<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="rsync_backup" passwordfile="/etc/rsync.password"/>
        <userDefinedPort start="true" port="873"/><!-- port=874 -->
        <timeout start="true" time="100"/><!-- timeout=100 -->
        <ssh start="false"/>
    </rsync>

 

至此就部署完成了。

标签:rsync,sersync,log,实时,sersync2,file,data
From: https://www.cnblogs.com/Leonardo-li/p/17835870.html

相关文章

  • 碧莲盛 x Tapdata:实时数据如何赋能医疗美容行业,助力医疗决策及个性化服务升级
    使用Tapdata,化繁为简,轻量代替OGG、DSG这样的同步工具,以及Kettle、Informatica、Python这样的ETL工具或脚本,帮助企业在五花八门的数据需求面前,实现“做且仅做最后一次ETL”的目标,这绝非纸上谈兵。Tapdata持续迭代产品能力,优化用户体验的同时,也在不断探索各行各业数据需求......
  • Rsync增量备份,数据同步工具
    Rsync是可实现全量及增量的本地或远程数据同步备份的优秀工具。SCP是全量备份,Rsync可以全量备份也可以是增量备份。centos5 rsync2.0是先把所有文件对比,在进行差异备份centos6 rsync3.0是边对所有文件进行对比,将对比的差异边进行备份rsync的三种工作模式:(1)本地同步......
  • 【Python】【OpenCV】Cameo项目(一)实时显示摄像头帧
     Cameo项目介绍:1、实时捕获并显示摄像头帧。2、具备截图、保存视频和退出三个功能键。 要求存在文件:manager.py和cameo.py 一、manager.py两个类:CaptureManager、WindowManager  CaptureManager负责摄像头帧的捕获,编解码得到实际帧,当前帧保存为图片、一段时间内的......
  • Windows平台Unity下实现camera场景推送RTMP|轻量级RTSP服务|实时录像
    技术背景我们在对接Unity平台camera场景采集的时候,除了常规的RTMP推送、录像外,还有一些开发者,需要能实现轻量级RTSP服务,对外提供个拉流的RTSPURL。目前我们在Windows平台Unity下数据源可采集到以下部分:采集Unitycamera场景;采集摄像头;采集屏幕;采集Unity声音;采集麦克风;采集扬声器;Un......
  • Oracle实时同步技术
    Oracle数据库的价值Oracle数据库是一种高度可靠、安全和强大的关系型数据库管理系统,它具有以下几个方面的价值:可靠性和稳定性:Oracle数据库以其高度可靠性、稳定性和数据完整性而闻名于世。安全性:Oracle数据库提供了一系列强大的安全功能,包括访问控制、加密、身份验证和审计。处理大......
  • 实时监控、智能控制:智慧芯片可视化大屏的应用前景展望
    随着科技的不断发展,智能芯片作为一种新型的电子元件,被广泛应用于各个领域,其中智慧芯片可视化大屏是一种重要的应用形式。 一、智慧芯片可视化大屏的优势智慧芯片可视化大屏是一种将智能芯片与大屏幕显示技术相结合的产品,山海鲸智慧芯片可视化大屏运用了指标卡、分组柱状图、百......
  • 获取paramiko的实时输出信息(转)
    addbyzhj:其实两种方案区别很小,就是在stdout读取时有细微的区别原文:https://www.cnblogs.com/t-road/p/13963759.html作者:道霖方案一:ssh_client=paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_client.connect(hostname=ip,......
  • 数仓实时算子难以观测,快来试试算子级监控吧
    本文分享自华为云社区《GaussDB(DWS)监控工具指南(四)算子级监控【绽放吧!GaussDB(DWS)云原生数仓】》,作者:幕后小黑爪。随着数据量的增大和数据处理的复杂性增加,数据库系统的性能问题变得越来越突出。应用程序对数据库的访问频率和数据量也越来越大。因此,优化数据库系统的性能成为了......
  • 第七期 |《实时洞察 智能运营一用友企业绩效管理白皮书》解读
    在EPM领域,中国企业与国际企业相比最大的问题是:战略、计划、预算、报告分析、绩效等都是部门级独立应用,难以形成企业级管理合力。大型企业如何击破这一困局、从容迈向高质量发展?近日,用友正式发布主题为《实时洞察智能运营——用友企业绩效管理白皮书》。用友专家团齐力精研,基于事项......
  • rsync+inotify数据传输
    rsync+inotify数据传输说明与名称IP应用操作系统源端:server192.168.58.146rsyncinotify-tools脚本centos7目标:node192.168.58.152rsynccentos7一、在node服务器操作1.关闭防火墙与selinuxsystemctlstopfirewalldsystemctldisablefirewalldsed......