sersync实时同步 解决单点NFS单点故障问题
一般中型公司的页面访问量
pv (页面浏览量) 6千万
uv (独立用户浏览量) 2千
QPS (每秒查询率) 10-20
实时同步
- rsync + inotify : 适用于文件比较少的情况
- sersync + rsync : 大批量文件同步
- 什么是实时同步
实时同步是⼀种只要当前⽬录发⽣变化则会触发⼀个事件,事件触发后会将变化的⽬录同步⾄远程服务器 - 为什么要实时同步
保证数据的连续性, 减少⼈⼒维护成本,解决nfs单点故障 - 实时同步的原理
实时同步需要借助inotify通知接⼝,⽤来监控⽬录的变化,如果监控的⽬录发⽣变更,则触发动作,这个动作可以是进⾏⼀次同步操作或其他操作 - 实时同步工具的选择
sersync+rsync(√) 、 inotify+rsync
Inotify是⼀个通知接⼝,⽤来监控⽂件系统的各种变化,如果⽂件存取,删除,移动。可以⾮常⽅便地实现⽂件异动告警,增量备份,并针对⽬录或⽂件的变化及时作出响应。rsync+inotify可以做到实时增量备份
sersync是国⼈基于rsync+inotify开发的⼯具,不仅保留了优点同时还强化了实时监控,⽂件过滤,简化配置等功能,帮助⽤户提⾼运⾏效率,节省时间和⽹络资源
rsync + inotify+循环,解决NFS单点故障问题
如果NFS服务器挂了,可以使用backup服务器代替NFS服务器做文件共享。
- backup服务端
1. 下载rsync软件包
yum -y install rsync2. 搭建rsync服务端
vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = lala
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#################################################################################
[nana]
comment = "备份文件的目录"
path = /lala_bak创建用户
useradd rsync -s /sbin/nologin -M配置虚拟用户密码文件
echo "lala:123" > /etc/rsync.passwd配置虚拟用户密码文件权限
chmod 600 /etc/rsync.passwd创建模块[nana]的真实目录
mkdir /lala_bak
chown rsync:rsync /lala_bak3. 启动守护进程服务
rsync --daemon
- NFS服务端
1. 安装nfs
yum install -y nfs-utils rpcbind2. 修改配置文件
vim /etc/exports
/mnt/data 172.16.1.0/16(rw,sync,all_squash)创建共享目录
mkdir /mnt/data 创建共享目录的属主和属组
chown nfsnobody:nfsnobody -R /mnt/ 3. 启动NFS服务
systemctl start nfs-server查看NFS服务
cat /var/lib/nfs/etab
- web服务器
1. 安装httpd php
yum install httpd php -y2. 启动httpd服务
systemctl start httpd
- 将NFS服务端共享目录挂载到web服务器
mount -t nfs 172.16.1.31:/mnt/data /var/www/html/
- web服务器实时监控数据同步脚本
1. 下载inotify软件
vim /etc/yum.repos.d/epel.repo
[epel]
name='epel repo'
baseurl=https://repo.huaweicloud.com/epel/7/x86_64/
gpgcheck=0yum clean all
yum makecache
yum -y install inotify-tools 2. 编写实时监控脚本
vim inotify.sh
#!/bin/bash
RSYNC="rsync -az --delete /var/www/html/ lala@192.168.15.41::nana"
export RSYNC_PASSWORD=123
/usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /var/www/html/ | while read line; do $RSYNC ; done
- 在backup服务器中搭建NFS服务器,创建共享目录==》备份目录
1. 安装nfs
yum install -y nfs-utils rpcbind2. 修改配置文件
vim /etc/exports
/lala_bak 172.16.1.0/16(rw,sync)3. 启动nfs服务
systemctl start nfs-server
- 在web服务器中编写切换挂载点的脚本
vim nfs_backup.sh
#!/bin/bashping -c1 172.16.1.31 >/dev/nullif [ $? -ne 0 ];thenumount -lf /var/www/html && mount -t nfs 172.16.1.41:/lala_bak/ /var/www/html/
elsedf -h | grep 172.16.1.31 >/dev/nullif [ $? -ne 0 ];thenumount -lf /var/www/html && mount -t nfs 172.16.1.31:/mnt/data/ /var/www/html/fi
fi
总结
- 在backup服务器搭建rsync服务端,在web服务器使用的方法是rsync+inotify+while循环编写脚本的方式实现了实时监控。
- 解决单点故障的方法,在backup服务器也搭建一个nfs服务端,将nfs服务端的共享目录设置为备份目录。
- 通过这种方法搭建服务架构,如果nfs服务器发生了故障,直接执行web服务器中切换挂载点的脚本,那么就可以直接切换到backup服务器,那么backup服务器可以直接代替nfs服务器进行数据共享。
sersync + rsync,解决NFS单点故障问题
sersync数据同步代替了第一种方式的inotify+while循环所写的脚本
- web服务器
1. 安装httpd php
yum install httpd php -y2. 启动httpd服务
systemctl start httpd
- backup服务端
1. 下载rsync软件包
yum -y install rsync2. 搭建rsync服务端
vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = lala
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#################################################################################
[nana]
comment = "备份文件的目录"
path = /lala_bak创建用户
useradd rsync -s /sbin/nologin -M配置虚拟用户密码文件
echo "lala:123" > /etc/rsync.passwd配置虚拟用户密码文件权限
chmod 600 /etc/rsync.passwd创建模块[nana]的真实目录
mkdir /lala_bak
chown rsync:rsync /lala_bak3. 启动守护进程服务
rsync --daemon
- NFS服务端
1. 安装nfs
yum install -y nfs-utils rpcbind2. 修改配置文件
vim /etc/exports
/mnt/data 172.16.1.0/16(rw,sync,all_squash)创建共享目录
mkdir /mnt/data 创建共享目录的属主和属组
chown nfsnobody:nfsnobody -R /mnt/ 3. 启动NFS服务
systemctl start nfs-server查看NFS服务
cat /var/lib/nfs/etab
- 将NFS服务端共享目录挂载到web服务器
mount -t nfs 172.16.1.31:/mnt/data /var/www/html/
- NFS服务器部署sersync
1. 安装sersync
下载源码包网址 : http://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 GNU-Linux-x86 /usr/local/sersync2. 配置sersync
cd /usr/local/sersync
ls
# confxml.xml sersync2修改配置文件
vim 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># 监控的动作,true就推送,false就不推送<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><sersync># 监控的⽬录<localpath watch="/mnt/data">#rsync服务端IP #模块名字<remote ip="172.16.1.41" name="nana"/><!--<remote ip="192.168.8.39" name="tongbu"/>--><!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath><rsync># rsync推送时的参数<commonParams params="-az"/># rsync推送时认证 #认证的虚拟⽤户 #虚拟⽤户对应的密码⽂件<auth start="true" users="lala" passwordfile="/etc/rsync.passwd"/># 如果rsync不使⽤默认的873端⼝,使⽤改参数指定<userDefinedPort start="false" port="873"/><!-- port=874 --># 超时时间<timeout start="false" time="100"/><!-- timeout=100 --><ssh start="false"/></rsync># 错误⽇志保存路径<failLog path="/tmp/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>创建密码文件
echo "123" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd查看sersync
./sersync2 -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参数,则默认执行同步程序
# __________________________________________________________启动sersync./sersync2 -dro confxml.xml
/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
- 在backup服务器中搭建NFS服务器,创建共享目录==》备份目录
1. 安装nfs
yum install -y nfs-utils rpcbind2. 修改配置文件
vim /etc/exports
/lala_bak 172.16.1.0/16(rw,sync)3. 启动nfs服务
systemctl start nfs-server
- 在web服务器中编写脚本
vim nfs_backup.sh
#!/bin/bashping -c1 172.16.1.31 >/dev/nullif [ $? -ne 0 ];thenumount -lf /var/www/html && mount -t nfs 172.16.1.41:/lala_bak/ /var/www/html/
elsedf -h | grep 172.16.1.31 >/dev/nullif [ $? -ne 0 ];thenumount -lf /var/www/html && mount -t nfs 172.16.1.31:/mnt/data/ /var/www/html/fi
fi
以上两种方式都可以实现数据实时同步,且解决了单点故障问题,验证方式如下:
- NFS服务器
- 关闭内网的网卡,共享目录的挂载点会断开
ifdown eth1
# Device 'eth1' successfully disconnected.
- web服务器
- 启动脚本,查看挂载点是否会切换到backup共享目录的挂载点
./nfs_backup.sh
df -h
# 172.16.1.41:/lala_bak 19G 2.2G 17G 12% /var/www/html
如果我们重新启用NFS的网卡eth1,那么再次启动脚本文件,web服务器的挂载点会重新切换至NFS的共享目录/mnt/data
sersync实时同步 解决单点NFS单点故障问题相关推荐
- sersync实时同步 sersync项目实战 nfs单点故障解决
文章目录 sersync实时同步 什么是实时同步 为什么实时同步 实现同步的原理 实时同步工具的选择 sersync项目实战 1.环境准备 安装web服务器(web01和web02两台机器上全需要执行 ...
- Sersync 实时同步
Sersync 实时同步 实时同步概述 什么是实时同步 实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器. 为什么要实时同步 保证数据的连续性, 减少人力维 ...
- Sersync实时同步
Sersync实时同步 1.实时同步概述 2.实时同步案例 3.实时同步扩展 本章课程大纲 1.什么是实时同步? 2.实时同步的原理 3.实时同步的场景 4.实时同步的工具的选择 5.实时同步的案例演 ...
- Rsync+Inotify+Sersync实时同步服务
目录 实时同步服务原理 实时同步服务部署 部署rsync守护进程 部署inotify监控服务 下载安装软件 熟悉命令使用 inotify企业应用 部署sersync同步服务 下载安装软件 编写配置文件 ...
- rsync+sersync实时同步数据
前言 rsync+sersync实时同步数据. 简介 rsync+sersync实时同步数据的原理是在客户端安装sersync监控目录的变化,一般是增删改,检测到变化以后,将变化的文件同步到服务端. ...
- Rsync+Sersync实时同步详细配置
Rsync+Sersync实时同步 一.基本介绍 1.什么是Rsync? Rsync(Remote Synchronize)是一款开源的.快速的.多功能的.可以实现全量及增量的本地或远程数据同步备份 ...
- 20170710L07-09-03老男孩Linux运维实战培训-Sersync实时同步软件实战应用指南07
接上一节的sersync压力测试 这一节主要是对着上一节的压力测试文本做真实的压力测试 测试出到底sersync的压力极限是多少 从每秒10个到100个 # tree |wc -l #查看写了多少文 ...
- sersync/lsync实时同步
第一章 为什么需要实时同步 1.第二阶段实时同步解决了什么问题: 解决 NFS单点故障问题 备份NFS数据并且提供冗余的服务功能 2.实时同步难点 什么条件才同步 多久同步一次 用什么备份方式同步 用 ...
- sersync+rsync实现实时同步
在分布式应用中会遇到一个问题,就是多个服务器间的文件如何能始终保持一致.一种经典的办法是将需要保持一致的文件存储在NFS上,这种方法虽然简单方便但却将本来多点的应用在文件存储上又变成了单点,这违背了分 ...
最新文章
- 合并排序(C语言实现)
- Java对多线程的支持
- 面试:讲一讲Spring中的循环依赖
- 字母全排列快速算法C代码
- Repeater利用PagedDataSource进行分页
- mysql 魔术设置_详解php魔术方法(Magic methods)的使用方法
- 首个JDK 10(18.3)发行候选版(内部版本43)展示了新的版本控制方案
- 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析 1
- 在odoo服务器文件夹,在windows10上安装odoo12开发环境的方法
- mysql 服务意外停止1067错误解决办法小结
- 分享一款在线less转css的神器
- c语言 数组指针函数,C语言:数组 指针 函数
- 团“模子”政策模式乱舞
- 树链剖分解析---WYD
- 深入理解 Spring 事务原理
- 百度地图在项目应用示例
- Android App开发实战项目之电子书架的实现(附源码 简单易懂 可直接使用)
- matlab中正弦信号的功率计算,范数norm
- 荣耀30会更新鸿蒙系统吗,华为荣耀30肿么升级鸿蒙系统?
- 关键业绩指标(KPI)