使用sersync实现数据实时同步

2023-10-29

sersync诞生过程

sersync作者:前金山公司周洋(花椒直播)
数据实时同步 (inotify+rsync 脚本) —> 开发实时同步程序(inotify+rsync)

原理:https://www.bilibili.com/video/BV1TK411B7hU

代码仓库:https://github.com/omaidb/sersync3
https://code.google.com/archive/p/sersync/source/default/source

项目地址:https://github.com/omaidb/sersync3
https://github.com/wsgzao/sersync

项目下载地址:https://code.google.com/archive/p/sersync/downloads

参考:
https://blog.csdn.net/m0_46095955/article/details/104032057
https://linux.cn/article-6032-1.html

  1. sersync是使用c++编写,而且对Linux系统文件系统产生的临时文件和重复的文件操作进行过滤(详细见附录,这个过滤脚本程序没有实现),所以在结合rsync同步的时候,节省了运行时耗和网络资源。因此更快。
  2. sersync配置起来很简单,其中已经静态编译好2进制文件和xml配置文件,直接使用即可。
  3. sersync使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。
  4. sersync有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则按设定时长对同步失败的文件重新同步。
  5. sersync不仅可以实时同步,另外还自带crontab功能,只需在xml配置文件中开启,即可按需求隔一段时间整体同步一次。无需再额外配置crontab功能。
  6. sersyncsockethttp插件扩展,满足二次开发的需要。

部署前提

  • 已安装inotify-tools
  • rsync为守护进程模式或已配置ssh免密
# 安装inotify-tools
yum install -y inotify-tools

# 安装rsync
yum install -y rsync

配置rsync服务端

https://blog.csdn.net/omaidb/article/details/121746997


部署sersync

一般情况下部署在rsyncclient端

  1. 下载软件二进制包

https://github.com/omaidb/qiaofei_notes/tree/main/shell_code/sersync

https://github.com/wsgzao/sersync
sersync2.5.4是软件的最后版本。

# 下载sersync二进制包
wget -c https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.gz
  1. 解压软件, 并保存到相应目录中
# 创建目录
mkdir -p /usr/local/sersync

# 解压文件
tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz

# 查看解压的目录结构
tree GNU-Linux-x86

image.png

# 将sersync2修改为sersync
mv GNU-Linux-x86/sersync2 GNU-Linux-x86/sersync

# 将目录下文件移动到/usr/local/sersync/
mv GNU-Linux-x86/* /usr/local/sersync/

配置sersync的path变量

vim /etc/profile.d/sersync.sh

# 指定sersync程序的路径
export PATH="$PATH:/usr/local/sersync"

使path变量生效
source /etc/profile.d/sersync.sh


修改sersync配置文件

vim /usr/local/sersync/confxml.xml

带有详细注释配置文件
https://github.com/omaidb/qiaofei_notes/tree/main/config_bak/sersync
2个配置文件

  • rsyncd守护进程模式配置:rsyncd_confxml.xml
  • ssh免密模式配置:ssh_key_confxml.xml

sersync常用参数

image.png

# 查看 sersync 参数
sersync -h
参数 解释
-d 启用守护进程模式
-r 在监控前,将监控目录与远程主机用rsync命令推送一遍
-n 指定开启守护线程的数量,默认为10个
-o 指定配置文件,默认使用confxml.xml文件
-m refreshCDN 启用刷新CDN模块-插件
-m socket 启用socket模块-插件
-m http 启用http模块-插件
不加-m参数 则默认执行同步程序
# 后台启动sersync同步服务程序
## -d 启用守护进程模式
## -r 在监控前,将监控目录与远程主机用rsync命令推送一遍
## -o 指定配置文件
sersync -dro /usr/local/sersync/confxml.xml

使用服务文件实现开机自启动

vim /etc/systemd/system/sersync.service

# /etc/systemd/system/sersync.service
[Unit]
Description= sersync数据实时同步服务
# 当指定的配置文件存在时,服务才会启动
ConditionPathExists=/usr/local/sersync/confxml.xml

[Service]
# 启动命令,不要加-d
ExecStart=/usr/local/sersync/sersync -ro /usr/local/sersync/confxml.xml
# 服务停止时的命令
## 命令要以绝对路径执行
ExecStop=/usr/bin/killall sersync

[Install]
WantedBy=multi-user.target

保存后,重载服务

# 重载服务
systemctl daemon-reload

# 设置开机自启动
systemctl enable --now sersync.service

实时同步服务debug

修改配置文件参数,进行调试
vim /usr/local/sersync/confxml.xml

<!-- 开启debug模式 -->
<debug start="true"/>

修改完debug模式重启服务

# 重启服务
systemctl restart sersync

# journalctl实时查看日志
journalctl -u sersync -f

使用前台运行查看详细日志

# 停止服务
systemctl stop sersync

# 不加-d以前台模式打印日志输出
sersync -ro /usr/local/sersync/confxml.xml
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用sersync实现数据实时同步 的相关文章

  • ipv6 socket bind 失败 - accept_dad

    file proc sys net ipv6 conf interface accept dad variable net ipv6 conf interface accept dad Official reference Whether
  • 网络层:IP协议

    本博文分享的是网络层的IP协议 从IP协议的基本概念 协议格式开始分析并分享出来 IP协议的基本概念 不同于讨论TCP UDP时只讨论通信主机之间的关系 在讨论IP协议中 会加上主机之间的网络来一起进行讨论分析 主机 一般配有IP地址 路由
  • whois命令常见用法

    whois命令常见用法 whois命令简介 安装whois Windows使用whois Linux安装whois whois常见用法 Linux下whois查询域名注册信息 whois命令简介 whois就是一个用来查询域名是否已经被注册
  • C++在线五子棋对战(网页版)项目:websocket协议

    目标 认识理解websocket协议 websocket切换过程和websocket协议格式 认识和学会使用websocketpp库常用接口 了解websocketpp库搭建服务器流程 认识和学会使用websocketpp库bin接口 最后
  • Linux下socket异步通讯聊天程序

    Linux下socket异步通讯聊天程序 转 original from http yangqi org linux socket asynchronous im system Posted by yangqi 2010年02月17日 We
  • 【Linux网络(C++)】——网络套接字(TCP/UDP编程模型)多进程,多线程,线程池服务器开发(画图解析)

    目录 一 套接字基本概念 IP地址 TCP和UDP协议 端口号 端口号vs 进程pid 网络字节序 本地字节序转换成网络字节序 网络字节序转换为本地字节序 二 套接字的基本操作 socket的创建 域 domain 类型 type 协议 P
  • linux 网络编程---->多路复用:select实例!

    好吧 我承认找了好久 网上都没有像样的完整的实例 然后自己参照书自己写一个吧 gt server 端代码 gt server c include
  • socket阻塞与非阻塞,同步与异步、I/O模型

    socket阻塞与非阻塞 同步与异步 作者 huangguisu 1 概念理解 在进行网络编程时 我们常常见到同步 Sync 异步 Async 阻塞 Block 非阻塞 Unblock 四种调用方式 同步 所谓同步 就是在发出一个功能调用时
  • Linux网络通信总结

    网络IO之阻塞 非阻塞 同步 异步 单播 多播 组播 广播 多路复用POLL SELECT epoll 超时 read write accept connect 超时 实现 1 用select来设置超时机制 2 使用setsockopt 函
  • 基于epoll的聊天室程序

    epoll相对于poll和select这两个多路复用的I O模型更加的高效 epoll的函数很简单 麻烦的地方在于水平出发和边沿触发 用张图来说明下 ET 边沿 只是在状态反转时触发 比如从不可读到可读 而LT 水平 就是如果可读 就会一直
  • Linux下Socket编程

    什么是Socket Socket接口是TCP IP网络的API Socket接口定义了许多函数或例程 程式员能够用他们来研发TCP IP网络上的应用程式 要学Internet上的TCP IP网络编程 必须理解Socket接口 Socket接
  • 【网络自定向下的学习】——TCP3次握手和4次挥手详解

    目录 前言 一 可靠数据传输 1 确认应答机制 2 超时重传机制 二 建立连接 三次握手 1 建立连接的过程 2 为什么会有三次握手 3 三次握手可以携带数据吗 4 什么是半连接队列 三 断开连接 4次挥手 1 4次挥手的过程 2 为什么连
  • linux下异步RPC的阶段性总结-非阻塞SOCKET客户端

    尽可能使用非阻塞socket int flags s flags fcntl fd F GETFL 0 if flags 1 close fd return 1 flags O NONBLOCK s fcntl fd F SETFL fla
  • 组播技术

    1 概述 1 1 产生背景 传统的IP通信有两种方式 一种是在源主机与目的主机之间点对点的通信 即单播 另一种是在源主机与同一网段中所有其它主机之间点对多点的通信 即广播 如果要将信息发送给多个主机而非所有主机 若采用广播方式实现 不仅会将
  • TCP通信流程解析

    B S通信简述 整个计算机网络的实现体现为协议的实现 TCP IP协议是Internet的核心协议 HTTP协议是比TCP更高层次的应用层协议 HTTP HyperText Transfer Protocol 超文本传输协议 是互联网上应用
  • linux c socket之异步IO

    cpp view plain copy File UDPEchoClient TimeOut c Author 云守护 include
  • linux非阻塞socket教程

    本文并非解释什么是非阻塞socket 也不是介绍socket API的用法 取而代替的是让你感受实际工作中的代码编写 虽然很简陋 但你可以通过man手册与其它资源非富你的代码 请注意本教程所说的主题 如果细说 内容可以达到一本书内容 你会发
  • 【网络自定向下学习】——TCP报文段的详细解析

    个人主页 努力学习的少年 版权 本文由 努力学习的少年 原创 在CSDN首发 需要转载请联系博主 如果文章对你有帮助 欢迎关注 点赞 收藏 一键三连 和订阅专栏哦 目录 一 Tcp报文段的结构 二 首部长度 三 窗口大小 四 序列号和确认序
  • poll()函数详解

    poll提供的功能与select类似 不过在处理流设备时 它能够提供额外的信息 include
  • 超级详细Tcpdump 的用法

    1 抓取回环网口的包 tcpdump i lo 2 防止包截断 tcpdump s0 3 以数字显示主机及端口 tcpdump n 第一种是关于类型的关键字 主要包括host net port 例如 host 210 27 48 2 指明

随机推荐

  • wsl set default version: 请启用虚拟机平台 windows 功能并确保在 bios 中启用虚拟化

    前段时间电脑偶然间恢复了出厂设置 之前安装的docker之类的东西都得重来了 既然要安装docker 肯定得用到WSL 于是就想要先把WSL的版本切换到2 在运行了如下命令后出现了这么个问题 PS C Users me gt wsl set
  • ​广州地区高校福利来啦!6月29日华为云开发者沙龙门票限时免费领取!

    6月29日华为云开发者沙龙广州站开启报名 华为专家现场指导实操演示并有精品图书相送 了解行业趋势进行技术储备 高校教师 学生免费参会 报名地址 https click hm baidu com clk 7a57cac1ed530949ab0
  • 【Redis 6】缓存穿透、缓存雪崩、缓存击穿(附解决方案、代码)

    各位小伙伴们大家好 欢迎来到这个小扎扎的Redis 6专栏 在这个系列专栏中我对B站黑马的Redis教程进行一个总结 鉴于 看到就是学到 学到就是赚到 精神 这波依然是血赚 O Redis知识点速览 缓存穿透 原理以及解决方案 缓存空对象代
  • Redis入门

    1 前言 1 1 什么是Redis Redis是一个基于内存的key value结构数据库 Redis 是互联网技术领域使用最为广泛的存储中间件 它是 Remote Dictionary Service 的首字母缩写 也就是 远程字典服务
  • 断言(Assert)的用法

    一 概念 编写代码时 我们总是会做出一些假设 断言就是用于在代码中捕捉这些假设 可以将断言看作是异常处理的一种高级形式 使用断言可以创建更稳定 品质更好且不易于出错的代码 当需要在一个值为FALSE时中断当前操作的话 可以使用断言 单元测试
  • 二进制间距

    二进制间距 给定一个正整数 n 找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 如果不存在两个相邻的 1 返回 0 如果只有 0 将两个 1 分隔开 可能不存在 0 则认为这两个 1 彼此 相邻 两个 1 之间的距离是它们的
  • MySQL创建S,P,J,SPJ表,以及SQL语句

    MySQL创建S P J SPJ表 CREATE TABLE S SNO char 9 primary key SNAME char 9 STATUS char 9 CITY char 9 CREATE TABLE P PNO char 9
  • Linux休眠,挂起,待机,关机的区别及相关命令

    转 http blog 163 com kukwkukw 126 blog static 97095900201410672425693 体眠是一种更加省电的模式 它将内存中的数据保存于硬盘中 所有设备都停止工作 当再次使用时需按开关机键
  • 一文读懂深度学习框架下的目标检测(附数据集)

    从简单的图像分类到3D位置估算 在机器视觉领域里从来都不乏有趣的问题 其中我们最感兴趣的问题之一就是目标检测 如同其他的机器视觉问题一样 目标检测目前为止还没有公认最好的解决方法 在了解目标检测之前 让我们先快速地了解一下这个领域里普遍存在
  • 整理的最全 python常见面试题(基本必考)① ②③④⑤⑥⑦⑧⑨⑩

    1 大数据的文件读取 利用生成器generator 迭代器进行迭代遍历 for line in file 2 迭代器和生成器的区别 答 1 迭代器是一个更抽象的概念 任何对象 如果它的类有next方法和iter方法返回自己本身 对于stri
  • Vim进阶

    Vim实用技术 第1部分 实用技巧 http www ibm com developerworks cn linux l tip vim1 index html Vim实用技术 第2部分 常用插件 http www ibm com deve
  • 软件测试13个最容易犯的错误

    目录 一 输入框测试 二 搜索功能测试 三 添加 修改功能 四 删除功能 五 上传图片功能测试 六 查询结果列表 七 返回键检查 八 回车键检查 九 刷新键检查 十 直接URL链接检查 盗链问题 十一 并发问题 十二 业务流程测试 十三 界
  • nvme分区选mbr还是guid_Linux 扩容 / 根分区(LVM+非LVM)

    目录 1 概述 2 CentOS7 LVM根分区扩容步骤 3 CentOS7 非LVM根分区扩容步骤 一 背景 概述 MBR Master Boot Record 主引导记录 和GPT GUID Partition Table GUID意为
  • 和泉纱雾

    和泉纱雾 Time Limit 1000 ms Memory Limit 65536 KiB Submit Statistic Problem Description 众所周知 和泉纱雾是著名的埃罗芒阿老师 画画功力首屈一指 今天我们的埃罗
  • 长度大小为零的数组(柔性数组、可变数组)

    书山有路勤为径 学海无涯苦作舟 目录 前言 一 什么是柔性数组 二 柔性数组应用及优势对比 1 定长数组 2 指针域 3 柔性数组 总结 前言 柔性数组 Arrays of Length Zero 是GNU GCC在C C 标准下扩展而引出
  • 网络测速命令

    linux命令行测速 https blog 51cto com 13718210 2418661
  • C语言课程设计-工资管理系统

    前言 这个程序是博主在大学第一个学期学完C语言后的课程设计 那时刚从一个小白变得会一点点编程 老师就布置了这个课程设计 当时一脸懵这是啥 我在哪 我要干什么 但是通过查阅了很多资料以及问了许多人以后 我逐渐开始写我的第一个项目 现在来看这个
  • opencv_gpu加速环境配置教程问题汇总

    1 安装CUDA 1 1 安装的cuda版本与英伟达驱动中的版本必须是一致的 1 2 安装的cuda后必须把cuda的环境配置到系统的环境变量中 1 3 检查cuda安装的版本与英伟达版本是不是一致的 cmd中输入 nvcc V 2 安装o
  • IDEA 怎么自定义代码模板?

    打开idea gt File gt Settings 点击 Editor gt Live Templates 添加组名或组的变量名 输入自己定义的变量名 即可输出代码 点击 Edit variables Expression改为与自己代码需
  • 使用sersync实现数据实时同步

    使用sersync实现数据实时同步 sersync诞生过程 部署前提 配置rsync服务端 部署sersync 配置sersync的path变量 修改sersync配置文件 sersync常用参数 使用服务文件实现开机自启动 实时同步服务d