Day44-sersync企业实时复制实战

Day44-sersync企业实时复制实战

  • 1. sersync实时复制工具介绍
    • 1.1 sersync工具简介
    • 1.2 sersync特点
    • 1.3 sersync图解原理
    • 1.4 sersync+rsync实时复制方案项目实践
      • 1.4.1 图解项目方案架构及实现原理
      • 1.4.2 确保远程数据传输服务部署完成
      • 1.4.3 检查当前系统nfs01是否支持inotify实时监控
      • 1.4.4 在nfs01安装配置sersync
      • 1.4.5 解压配置
      • 1.4.6 配置文件讲解及修改配置
      • 1.4.7 启动sersync
      • 1.4.8 配置:systemctl start sersync启动方案
  • 2. 企业案例
    • 2.1 问题一
    • 2.2 大型企业级高并发文件实时复制方案
    • 2.3 企业级解决 NFS 存储实时复制案例
    • 2.4 更多网站后端存储解决方案
  • 3. rsync多实例

1. sersync实时复制工具介绍

1.1 sersync工具简介

Sersync项目利用inotify与rsync技术实现对服务器数据实时复制的解决方案,其中inotify用于监控sersync所在服务器上文件系统的事件变化,当事件发生变化时就调用rsync命令将变化的数据复制到远端服务器上。

1.2 sersync特点

sersync项目特点是:

  • 使用c++编写,支持对监控的事件过滤功能。
  • sersync采用xml配置文件,然后由守护进程启动,配置起来比inotify-tools更简单。
  • 使用多线程进行复制,即可以并发复制多个不同文件。
  • sersync自带出错处理机制,通过失败队列对出错的文件重新复制。
  • sersync自带crontab功能,可实现对失败队列中的文件定时整体复制。
  • sersync自带socket与http的协议扩展,可以满足有特殊需求的公司二次开发。

1.3 sersync图解原理

在这里插入图片描述

如上图所示:
1、inotify监控指定目录对应事件的变化,当有事件变化时进入事件过滤队列。

2、过滤队列负责过滤不需要复制的数据,也可以过滤短时间内产生的重复inotify事件信息,过滤过的事件触发rsync对变化数据执行复制。

3、图中线程组线程是等待线程队列的守护线程,当事件队列中有事件产生的时候,线程组守护线程就会逐个唤醒复制线程,当队列中inotify事件较多的时候,复制线程就会被全部唤醒一起工作提升复制的效率。

4、除了线程组线程外,还有sersync服务线程,负责处理复制失败的文件,将他们再次复制,对于再次复制失败的文件(命令)记录到rsync_fail_log.sh 脚本,然后定期在执行脚本,同时利用自带的cron功能,实现每隔一定时间,将所有未复制的数据在进行整体复制。

1.4 sersync+rsync实时复制方案项目实践

1.4.1 图解项目方案架构及实现原理

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.4.2 确保远程数据传输服务部署完成

大前提rsyncdaemon服务配置成功,可以在rsync客户端推送拉取数据,然后才能配置inotify服务。

确保已经配置好rsync服务,并且能在客户端推送和拉取数据信息:

rsync -avz  /data  rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

1.4.3 检查当前系统nfs01是否支持inotify实时监控

通过检查/proc/sys/fs/inotify目中是否存在以下三个文件,可以确认系统是否支持实时监控程序。

[root@nfs01 ~]# uname -r
3.10.0-957.1.3.el7.x86_64  #<==内核是3.10,支持inotify机制。
[root@nfs01 ~]# ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r--. 1 root root 0 Apr 14 18:54 max_queued_events
-rw-r--r--. 1 root root 0 Apr 14 18:54 max_user_instances
-rw-r--r--. 1 root root 0 Apr 14 18:54 max_user_watches

1.4.4 在nfs01安装配置sersync

mkdir /server/tools
cd /server/tools
wget https://github.com/wsgzao/sersync/blob/master/sersync2.5.4_64bit_binary_stable_final.tar.gz

1.4.5 解压配置

[root@nfs01 tools]# tar xf sersync_oldboy_64bit_20160928.tar.gz 
sersync_oldboy_64bit_20160928.tar.gz
[root@nfs01 tools]# tree application/
application/
└── sersync├── bin│   └── sersync├── conf│   ├── confxml.xml│   └── confxml.xml.ori├── logs│   └── rsync_fail_log.sh└── readme.txt
[root@nfs01 tools]# mv application /
[root@nfs01 tools]# tree /application/
/application/
└── sersync├── bin│   └── sersync├── conf│   ├── confxml.xml│   └── confxml.xml.ori├── logs│   └── rsync_fail_log.sh└── readme.txt4 directories, 5 files

1.4.6 配置文件讲解及修改配置

请对比新老配置查看修改的内容

sersync配置文件:干两件事:
1)完成监控配置:

inotifywait -mrq -e createFolder,close_write,delete,moveFrom,moveTo /data

2)完整命令拼接:

rsync -avz  /data  rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

1.4.7 启动sersync

[root@nfs01 /application/sersync/conf]# ../bin/sersync -h
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_______________________________________________________
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序
________________________________________________________________[root@nfs01 conf]# echo 50000000 > /proc/sys/fs/inotify/max_user_watches
[root@nfs01 conf]# echo 327679 > /proc/sys/fs/inotify/max_queued_events[root@nfs01 conf]# /application/sersync/bin/sersync -r -o /application/sersync/conf/confxml.xml -dcd /data && rsync -artuz -R --delete ./  --timeout=100 rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password >/dev/null 2>&1 [root@nfs01 ~]# pstree -a -p 1918
sersync,1918 -r -o /application/sersync/conf/confxml.xml -d├─{sersync},1924├─{sersync},1925├─{sersync},1926├─{sersync},1927├─{sersync},1928├─{sersync},1929├─{sersync},1930├─{sersync},1931├─{sersync},1932├─{sersync},1933└─{sersync},1934#同步过程
rsync -artuz -R --timeout=100 ./548.txt rsync_backup@172.16.1.41::oldboy --password-file=/etc/sync.password
root       5764   5760  0 11:00 ?        00:00:00 rsync -artuz -R --timeout=100 ./548.txt rsync_backup@172.16.1.41::backup --password-file=/etc/sync.password
root       5765   1918  0 11:00 ?        00:00:00 sh -c cd /data && rsync -artuz -R  --timeout=100 "./549.txt" rsync_backup@172.16.1.41::oldboy --password-file=/etc/rsync.password >/dev/null 2>&1 
root       5766   1918  0 11:00 ?        00:00:00 sh -c cd /data && rsync -artuz -R  --timeout=100 "./549.txt" rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password >/dev/null 2>&1 
root       5767   5765  0 11:00 ?        00:00:00 rsync -artuz -R --timeout=100 ./549.txt rsync_backup@172.16.1.41::oldboy --password-file=/etc/sync.password
root       5768   5766  0 11:00 ?        00:00:00 rsync -artuz -R --timeout=100 ./549.txt rsync_backup@172.16.1.41::backup --password-file=/etc/sync.password
root       5771   1918  0 11:00 ?        00:00:00 sh -c cd /data && rsync -artuz -R  --timeout=100 "./550.txt" rsync_backup@172.16.1.41::oldboy --password-file=/etc/rsync.password >/dev/null 2>&1 
root       5772   1918  0 11:00 ?        00:00:00 sh -c cd /data && rsync -artuz -R  --timeout=100 "./550.txt" rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password >/dev/null 2>&1 
root       5773   5771  0 11:00 ?        00:00:00 rsync -artuz -R --timeout=100 ./550.txt rsync_backup@172.16.1.41::oldboy --password-file=/etc/sync.password
root       5774   5772  0 11:00 ?        00:00:00 rsync -artuz -R --timeout=100 ./550.txt rsync_backup@172.16.1.41::backup --password-file=/etc/sync.password
root       5778   2254  0 11:00 pts/0    00:00:00 grep --color=auto sync
root       5779   1918  0 11:00 ?        00:00:00 sh -c cd /data && rsync -artuz -R  --timeout=1

最终

/application/sersync/bin/sersync -d
pkill sersync

二进制程序,不是yum安装的,所以不能systemctl start sersync

1.4.8 配置:systemctl start sersync启动方案

https://blog.51cto.com/oldboy/2155931

[root@nfs01 /data]# tail -1 /etc/rc.local
/application/sersync/bin/sersync -d

配置:systemctl start sersync启动方案
https://blog.51cto.com/oldboy/2155931

[root@nfs01 /data]# cat /etc/rc.d/init.d/sersync
#!/bin/bash
# chkconf
# ig: 2345 21 81
# description: rsync service start and stop scripts
# Author: oldboy
# Organization: www.oldboyedu.comstart(){/application/sersync/bin/sersync -d -o /application/sersync/conf/confxml.xml &>/dev/null
}
stop(){killall sersync 2>/dev/null
}
case "$1" instart)start;;stop)stop;;restart)stopsleep 2start;;*)echo $"Usage:$0 {start|stop|restart}"exit 1
esac

练习脚本启动:

chmod +x /etc/rc.d/init.d/sersync/etc/init.d/sersync stop
ps -ef|grep sync/etc/init.d/sersync start
ps -ef|grep sync

写一个启动脚本:使用service sersyc start/stop启动停止。
解答:

/etc/init.d/sersync start
/etc/init.d/sersync stop[root@nfs01 /data]# cat /etc/rc.d/init.d/sersync
#!/bin/bash
# chkconfig: 2345 21 81   ###实现开机启动顺序以及在哪些级别上开机启动。
# description: rsync service start and stop scriptsservice sersync stop/start

C7:

[root@nfs01 /data]# cat /usr/lib/systemd/system/sersync.service
[Unit]
Description=sersyncd service
After=network.target[Service]
Type=forking           
ExecStart=/etc/rc.d/init.d/sersync start   
ExecReload=/etc/rc.d/init.d/sersync restart
ExecStop=/etc/rc.d/init.d/sersync stop     
PrivateTmp=true[Install]
WantedBy=multi-user.targetchmod +x /usr/lib/systemd/system/sersync.service[root@nfs01 /data]# systemctl enable sersync.service
Created symlink from /etc/systemd/system/multi-user.target.wants/sersync.service to /usr/lib/systemd/system/sersync.service.[root@nfs01 /data]# systemctl status sersync.service
● sersync.service - sersyncd serviceLoaded: loaded (/usr/lib/systemd/system/sersync.service; enabled; vendor preset: disabled)Active: inactive (dead)[root@nfs01 /data]# systemctl stop sersync
[root@nfs01 /data]# ps -ef|grep sersync|grep -v grep
[root@nfs01 /data]# systemctl start sersync

2. 企业案例

2.1 问题一

挂载的盘有将近24t,里面有200G数据,都是tomcat用到的数据,nfs服务器磁盘容量是24t,tomcat服务器里面跑着4个tomcat服务,他们昨天通过jenkins部署代码,控制台输出信息是超时,在排查时,发现tomcat服务器虽然现实挂载nfs服务器的24t硬盘,但是往里面无法写数据,ls就是夯住没反应,后来是重新挂载才解决的,但是有时候就是莫名其妙的夯住。

分析:

  1. 数据是太大。
  2. 挂载参数有问题。
  3. 网络连接不稳定,
  4. 服务器压力大
  5. 架构错误(站点目录挂载NFS上了),这样不行。

解决办法:

  1. 还用NFS,但要调整架构,例如动静分离、读写分离。
  2. 更换分布式文件系统
  3. 注意CDN的使用,看看命中率,想法提高命中。
  4. 还可以弃用NFS,读取本地方案,

2.2 大型企业级高并发文件实时复制方案

除了本文讲解的数据实时复制方案外,其实,企业运维工作中还有很多的方案,例如:

  1. inotify(sersync)+rsync复制方案是文件级别的复制,优点:简单、易用,缺点:速度不快。
  2. drbd复制方案是文件系统级别复制,基于block块进行复制,优点:速度快,缺点:主节点工作时,备节点数据处于不可使用状态。
  3. 借用第三方软件的复制功能复制文件:例如:mysql复制(主从复制),oracle,mongodb自身的复制工具。
  4. 在业务上开发程序双写不同的服务器,即直接写两台服务器。
  5. 应用服务器写一台,在写日志(消息队列),利用异步方式复制。

对于复制延迟的问题,可以利用产品业务逻辑解决(例如:读写分离,备读不到读主)。

2.3 企业级解决 NFS 存储实时复制案例

  1. 有些网友觉得NFS性能不高,其实在共享存储时,可以使用读写分离的方案,即用户上传时把文件传到NFS上,这部分写的并发要比读小很多,可能写读比只有 1:20。
  2. 然后借用 inotify(sersync)+rsync方案把NFS上数据实时复制到Web服务器本地(静态服务器)
  3. Web 服务直接读本地的目录实时复制过来的文件,如果本地没有,再去NFS共享上读文件,缓解延迟带来的问题。
  4. 经过实测,inotify(sersync)+rsync方案单进程多线程可以处理并发200个100K左右的文件,而不会延迟,当然还可以开多进程,拆分监控不同的二级目录。

2.4 更多网站后端存储解决方案

  1. 使用CDN加速以及内网搭建文件缓存服务(squid,nginx,varnish)减轻存储压力。
  2. 把多个文件目录分配到不同的NFS服务器上,相当于把NFS服务器拆分多台。
  3. 弃用NFS方案
  4. 使用分布式文件系统(例如:FastDFS、Mfs)

3. rsync多实例

rsync --config=/etc/rsyncd01.conf --daemon  #用于nfs实时复制
rsync --config=/etc/rsyncd02.conf --daemon  #用于定时备份

通过指定配置文件参数

--config=FILE           specify alternate rsyncd.conf file

建议:不推荐
最佳方法:把www uid和rsync一样。

[root@backup ~]# cat /etc/rsyncd.conf
#rsync_config_______________start
#created by oldboy
#site: http://www.oldboyedu.com
uid = rsync
gid = rsync
use chroot = no
fake  super  = yes
max connections = 200
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 = true
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = 所有服务器定时任务备份
path = /backup/[data]
uid = www
gid = www
comment = 存储NFS实时复制数据
path = /data/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/748259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue使用elementPlus ui框架,如何给Dialog 对话框添加Loading 自定义类名显示隐藏

vue使用elementPlus ui框架时&#xff0c;如何给Dialog 对话框添加Loading 自定义类名&#xff0c;想要实现dialog对话框区域有loading效果 官方给出的这个API配置项customClass&#xff0c;使用不太明确。暂时无法实现绑定class。 最后的实现方式&#xff1a; <template&…

吐槽FineDataLink工具Format函数处理日期转字符串格式的说明文档

一.背景 为公司师带徒的任务做些记录。 二.文档存在的问题 1.文档情况 FORMAT-格式转换- FineBI帮助文档 FineBI帮助文档 函数定义&#xff1a; FORMAT(object,format) formart的格式有哪些呢&#xff1f;我们截图看看&#xff1a; 2.文档说明不足问题 同事的需求是把时…

AI人工智能培训讲师ChatGPT讲师叶梓培训简历及提纲ChatGPT等AI技术在医疗领域的应用

叶梓&#xff0c;上海交通大学计算机专业博士毕业&#xff0c;高级工程师。主研方向&#xff1a;数据挖掘、机器学习、人工智能。历任国内知名上市IT企业的AI技术总监、资深技术专家&#xff0c;市级行业大数据平台技术负责人。 长期负责城市信息化智能平台的建设工作&#xff…

免费阅读篇 | 芒果YOLOv8改进109:注意力机制SimAM:用于卷积神经网络的简单、无参数注意力模块

免费阅读篇|芒果YOLOv8改进109&#xff1a;注意力机制篇SimAM&#xff1a;用于卷积神经网络的简单、无参数注意力模块 &#x1f4a1;&#x1f680;&#x1f680;&#x1f680;本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接&#x…

RocketMQ学习笔记四(黑马)项目

课程地址&#xff1a; 1.Rocket第二章内容介绍_哔哩哔哩_bilibili &#xff08;视频35~88&#xff0c;搭建了一个电商项目&#xff09; 待学&#xff0c;待完善。

找准方向选CRM客户管理系统!2023年排行榜推荐

本文将为大家带来2023有哪些好用CRM客户管理系统&#xff1f;CRM系统排行榜基于品牌知名度、功能、产品实力、系统稳定性、用户体量等多重因素考量。其中Zoho CRM、红圈CRM等产品市场表现优异入选此次榜单。 1.Zoho CRM 公司成立时间&#xff1a;1996年 Zoho&#xff08;卓豪…

【算法】AC自动机的优化:增量更新与删除

一、概述 AC自动机&#xff08;Aho-Corasick Automation&#xff09;是著名的多模匹配算法&#xff0c;源于贝尔实验室&#xff0c;并且在实际应用中得到广泛的引用&#xff0c;且具有以下特点&#xff1a; 只需要扫描一次文本&#xff0c;即可获取所有匹配该文本的模式串复杂…

CSS扩展选择器

文章目录 1. 并集选择器2. 交集选择器3. 后代选择器4. 子代选择器5. 兄弟选择器5.1. 相邻兄弟选择器5.2. 通用兄弟选择器 6. 属性选择器7. 伪类选择器7.1. 动态伪类7.2. 结构伪类7.3. 否定伪类 8. 伪元素选择器9. Google 改进案例 1. 并集选择器 选中多个选择器对应的元素。一…

如何在Linux上使用git远程上传至gitee托管(add-commit-push指令详解)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

力扣209. 长度最小的子数组

思路&#xff1a;题目是 数组和 > target&#xff0c;不是等于target 双指针法&#xff1a;用for循环中的 r 来界定右边界的下标&#xff0c;右边界每移动一位&#xff0c;左边界可能需要移动多位&#xff0c;所以内部再用while, 当满足 数组和>target时&#xff0c;记录…

C语言基础之结构体

文章目录 一、结构体1、结构体概述2、结构体类型的定义方式&#xff08;1&#xff09;先定义结构体类型&#xff0c;再定义结构体变量&#xff08;2&#xff09;结构体类型、变量同时定义&#xff08;3&#xff09;一次性结构体 3、结构体成员的初始化(1)结构体初始化(2)清空结…

RISC-V Optimization Guide(笔记)

官网发表的文章地址&#xff1a;RISC-V Optimization Guide B站有人做过解读视频&#xff0c;这篇文章也是看视频时做的笔记&#xff1a;视频地址 一、标量整数优化 1.1 常量的具体化 使用lui/addiw将立即数加载至寄存器&#xff0c;当立即数低12位的最高位为1时&#xff0c…

数据库 | MYSQL这个复杂系统如何上手?

当你不知道从何入手研究或解决一个复杂系统的问题时&#xff0c;通常意味着你没有找到合适的切入点或者缺乏对系统整体和细节之间联系的理解。在这种情况下&#xff0c;一个有用的策略是寻找系统的基本原理或构成要素。 小时候&#xff0c;你可能也玩过玩具四驱车。有的四驱车…

从零开始利用MATLAB进行FPGA设计(三)将Simulink模型转化为定点数据类型

文章灵感来源于MATLAB官方免费教程&#xff1a;HDL Coder Self-Guided Tutorial 考虑到MATLAB官网的英文看着慢&#xff0c;再加上视频讲解老印浓浓的咖喱味&#xff0c;我决定记录利用MATLAB&Simulink&SystemGenerator进行FPGA数字信号处理的学习过程。 往期回顾&am…

什么是响应式设计?响应式设计的基本原理是什么?如何做?

文章目录 一、是什么二、实现方式媒体查询百分比vw/vhrem小结 三、总结参考文献 一、是什么 响应式网站设计&#xff08;Responsive Web design&#xff09;是一种网络页面设计布局&#xff0c;页面的设计与开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)…

软考高级:BPR 和 BPM概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【四 (1)数据可视化之如何选用正确的图表】

目录 文章导航一、数据分析中可视化的作用1、揭示数据关联和模式2、支持数据分析和决策3、提升沟通和共享效果4、强调关键信息和发现5、增强故事叙述和记忆效果6、有效增强数据交互性数据7、复杂信息易理解8、数据多维度显示 二、如何选用合适的图表1、简洁性避免使用过于复杂或…

软考高级:企业应用集成概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

八 超级数据查看器   讲解稿   详情3  分享和外观

八 超级数据查看器 讲解稿 详情3 分享和外观 app下载地址 下载地址4 ​ 讲解稿全文&#xff1a; 第3讲 分享 顶栏颜色 外观设置 现在讲解分享功能。点击&#xff0c;会打开分享对话框&#xff0c;我们这里演示2个&#xff0c;可以按照标题做出分享&#xff0c;在第一组…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Badge)

可以附加在单个组件上用于信息标记的容器组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 支持单个子组件。 说明&#xff1a; 子组件类型&#xff1a;系统组件和自定义组件&#xf…