OpenEuler系统常用服务(五)

Rsync + Sersync 服务

1. 方案目标

提供一种近实时的文件同步机制,将源服务器(通常是应用服务器)上的文件变化快速同步到备份服务器或多个目标服务器。

2. 核心组件功能
  • Rsync (Remote Sync):
    • 功能: 高效的增量文件传输工具,支持本地/远程同步,通过校验算法仅传输差异部分。
    • 角色: 在本方案中作为同步执行引擎(通常运行在目标服务器或源服务器上)。
  • Sersync (基于 Inotify):
    • 功能: 利用 Linux 内核的 inotify 机制,监控指定目录的文件系统事件(如创建、修改、删除)。
    • 角色: 在本方案中作为事件监听器(运行在源服务器上),检测到变化后触发 Rsync 进行同步。
  • 组合优势: Sersync 实时监听变化 + Rsync 高效传输 = 低延迟、高性能的文件同步方案。
3. 工作流程
  1. 监听事件: Sersync 监控源目录的文件变化。
  2. 触发同步: 一旦检测到变化(如文件修改),Sersync 立即调用预配置的 Rsync 命令。
  3. 增量传输: Rsync 连接到目标服务器,仅传输变化的文件或数据块。
  4. 同步完成: 目标服务器文件与源服务器保持一致。

安装步骤 (OpenEuler)

1. 安装 Rsync

Rsync 通常系统自带或包含在基础仓库中。确认并安装:

bash 复制代码
sudo yum install rsync -y
2. 安装 Sersync

Sersync 可能需要从第三方仓库或手动下载安装。这里以手动安装为例(假设下载到 /opt):

bash 复制代码
# 下载 Sersync (版本可能更新,请替换最新链接)
wget https://example.com/path/to/sersync2.tar.gz -P /opt # 请替换为实际有效的下载链接

# 解压
cd /opt
tar -zxvf sersync2.tar.gz

# 重命名目录(可选)
mv sersync2 /opt/sersync

配置详解

1. Rsync 服务端配置 (目标服务器)
  • 配置文件: /etc/rsyncd.conf
  • 功能模块定义:
bash 复制代码
# /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log

[webdata] # 模块名,客户端同步时指定
path = /data/webapps/ # 同步的目标路径
comment = Web Application Data
read only = no # 允许写入
auth users = rsync_user # 认证用户
secrets file = /etc/rsync.passwd # 密码文件路径
hosts allow = 192.168.1.100 # 允许连接的源服务器IP
  • 创建密码文件:
bash 复制代码
echo "rsync_user:your_strong_password" | sudo tee /etc/rsync.passwd
sudo chmod 600 /etc/rsync.passwd # 关键!设置严格权限
  • 启动 Rsync 守护进程:
bash 复制代码
sudo systemctl start rsyncd
sudo systemctl enable rsyncd
  • 防火墙 (如果启用):
bash 复制代码
sudo firewall-cmd --add-service=rsyncd --permanent
sudo firewall-cmd --reload
2. Sersync 配置 (源服务器)
  • 核心配置文件: /opt/sersync/conf/confxml.xml
  • 关键配置项:
XML 复制代码
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="1.0">
    <host hostip="localhost" port="8008"></host> <!-- 管理端口 -->
    <debug start="false"/> <!-- 调试模式 -->
    <fileSystem xfs="false"/> <!-- 是否XFS文件系统 -->
    <filter start="true"> <!-- 文件过滤 -->
        <exclude expression="(.*)\.tmp"></exclude> <!-- 排除.tmp文件 -->
        <exclude expression="(.*)\.log"></exclude> <!-- 排除.log文件 -->
    </filter>
    <inotify> <!-- 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"/> <!-- 监控修改 (与closeWrite重叠,通常关) -->
    </inotify>
    <sersync> <!-- Sersync 主配置 -->
        <localpath watch="/data/webapps"> <!-- 要监控的本地源路径 -->
            <remote ip="192.168.1.200" name="webdata"/> <!-- 目标服务器IP和Rsync模块名 -->
            <!-- 可配置多个<remote>实现多目标同步 -->
        </localpath>
        <rsync> <!-- Rsync 命令参数 -->
            <commonParams params="-az"/> <!-- -a归档模式 -z压缩 -->
            <auth start="true" users="rsync_user" passwordfile="/etc/rsync.passwd"/> <!-- 认证 -->
            <timeout start="true" time="100"/> <!-- 超时设置(秒) -->
            <ssh start="false"/> <!-- 是否使用SSH通道 (本方案通常为false,走Rsync协议) -->
        </rsync>
        <failLog path="/opt/sersync/log/rsync_fail_log.sh"/> <!-- 同步失败日志脚本 -->
        <crontab start="false"/> <!-- 是否启用定时全量同步 (本方案实时为主,可关闭) -->
    </sersync>
</head>
  • 创建 Rsync 密码文件 (源服务器):
bash 复制代码
echo "your_strong_password" | sudo tee /etc/rsync.passwd # 只包含密码
sudo chmod 600 /etc/rsync.passwd
3. 启动 Sersync (源服务器)
bash 复制代码
cd /opt/sersync
./sersync2 -d -r -o conf/confxml.xml # -d: 守护进程 -r: 先全量同步一次 -o: 指定配置文件
  • 验证进程:
bash 复制代码
ps -ef | grep sersync
  • 查看日志 (可选):
bash 复制代码
tail -f /opt/sersync/log/rsync_fail_log.sh # 同步失败日志

测试同步

  1. 在源服务器创建测试文件:
bash 复制代码
touch /data/webapps/test_sync.txt
  1. 检查目标服务器:
bash 复制代码
ls /data/webapps/ # 应能看到 test_sync.txt

关键注意事项

  1. 目录权限: 确保 Rsync 服务端的目标目录 (path) 和 Sersync 监控的源目录 (localpath watch) 存在且进程有读写权限。
  2. 密码安全: /etc/rsync.passwd 文件权限必须为 600
  3. 防火墙: 确保目标服务器的 873/tcp (Rsync 默认端口) 对源服务器开放。
  4. SELinux: 如果 OpenEuler 启用 SELinux,可能需要调整策略或暂时设置为 permissive 模式测试。
  5. 日志监控: 定期检查 /opt/sersync/log/rsync_fail_log.sh/var/log/rsyncd.log 以排查问题。
相关推荐
wanhengidc2 小时前
云手机 高振畅玩不踩坑
运维·服务器·安全·web安全·智能手机
有谁看见我的剑了?2 小时前
linux 添加硬盘后系统识别不到硬盘处理
linux·运维·服务器
JoyCong19982 小时前
ToDesk远程屏幕墙技术白皮书:如何重塑全局运维视界
运维·电脑·远程工作
易连EDI—EasyLink2 小时前
易连EDI–EasyLink实现OCR智能数据采集
网络·人工智能·安全·汽车·ocr·edi
偶尔上线经常挺尸3 小时前
《100个“反常识”经验15:Nginx 502排查:从应用到内核》
运维·nginx·性能调优·反向代理·502错误·http排错
@insist1233 小时前
信息安全工程师考点精讲:身份认证核心原理与分类体系(上篇)
大数据·网络·分类·信息安全工程师·软件水平考试
SmartRadio3 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
_.Switch3 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
yc_12243 小时前
用 Visual Studio 远程调试 Linux:从零到流畅的完整指南
linux·ide·visual studio
思茂信息3 小时前
CST软件如何进行参数化扫描?
运维·开发语言·javascript·windows·ecmascript·软件工程·软件需求