sersync实时同步实战+nfs共享存储
目录
实时同步介绍
# 什么是实时同步
实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器。
# 为什么要实时同步
保证数据的连续性, 减少人力维护成本,解决nfs单点故障
# 实时同步工具选择
sersync+RSYNC(√)、inotify+rsync
Inotify是一个通知接口,用来监控文件系统的各种变化,如果文件存取,删除,移动。可以非常方便地实现文件异动告警,增量备份,并针对目录或文件的变化及时作出响应。rsync+inotify可以实触发式实时同步增量备份
sersync是国人基于rsync+inotify-tools开发的工具,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。[sersync项目地址](https://github.com/wsgzao/sersync)
# 实时同步总结
1.为什么要使用实时同步?
1.解决nfs单点
2.大量的静态资源迁移(本地迁移云端)
2.实时同步能解决什么问题?
1.平滑的迁移
2.备份:减少人为的干预
3.实时同步工具选择?
rsync+inotify 少量文件同步,麻烦。同步大文件太慢,遍历扫描,非常影响效率。
sersync 配置简单,多线程同步,同步块。适合大量的小文件或者图片。
lsryncd
4.demo:用户上传文件-->web-->写入-->nfs存储-->inotify-->action-->rsync--->backup
用户上传文件-->web-->写入-->nfs存储(本地)--->实时的同步到-->存储(云端)
web-->卸载存储(本地)--->重新挂载存储(云端)
# 基于rsync海量文件实时同步:[TP](https://blog.51cto.com/jin544642965/2339314)
nfs+rsync+sersync实现共享存储实时备份案例
要求:
web01和web02搭建apache网站,用户上传数据共享至nfs服务端,并且对共享数据进行实时备份到backup中,
backup中需要搭建nfs服务,实现高可用,当nfs服务端down机,backup充当nfs服务端角色,web两台机器做到及时故障处理。
总流程
1. 环境准备
2. 针对不同服务器搭建不同服务, 修改配置文件,创建对应用户及目录
4. rsync客户端安装sersync服务,实现实时数据备份
5. 模拟nfs服务端不可用,backup替代nfs角色
6. web故障发现,处理故障
细化流程
1.环境准备
环境准备
主机名 | 外网IP | 内网IP | 角色 | 部署服务 |
---|---|---|---|---|
web01 | 10.0.0.7 | 172.16.1.7 | rsync的客户端,nfs的客户端 | rsync,nfs |
web02 | 10.0.0.8 | 172.16.1.8 | rsync的客户端,nfs的客户端 | rsync,nfs |
nfs | 10.0.0.31 | 172.16.1.31 | rsync的客户端,nfs的服务端 | rsync,nfs,sersync |
backup | 10.0.0.41 | 172.16.1.41 | rsync的服务端,nfs服务端备份机 | rsync,nfs |
2.服务搭建与配置
backup服务端(nfs备份机)
# 1. 服务安装
[root@backup ~]# yum install -y rsync
[root@backup ~]# yum install -y nfs-utils
# 2. 修改配置(针对rsync)
[root@backup ~]# 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 = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup
# 3. 根据配置文件在backup中创建对应目录和应用等其他信息并启动服务
[root@backup ~]# useradd rsync -s /sbin/nologin -M
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/
[root@backup ~]# vim /etc/rsync.passwd
rsync_backup:123
[root@backup ~]# chmod 600 /etc/rsync.passwd
[root@backup ~/.certs]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
--------------------------------------------------------------------------------------------
# 4. 编辑nfs的配置文件(针对nfs配置文件)
[root@backup ~]# vim /etc/exports
/backup 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
# 5. 根据配置文件创建对应用户及文件
[root@backup ~]# groupadd www -g 666
[root@backup ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R www.www /backup
# 6. 启动nfs服务(针对CentOS7)
[root@backup ~]# systemctl start nfs-server
[root@backup ~]# systemctl enable nfs-server
#启动rpc,在启动nfs(针对CentOS6,需要多启动一个服务)
[root@backup ~]# systemctl start rpcbind nfs-server
nfs安装配置
# 1. 服务安装(CentOs7)---------关于nfs的安装与配置
[root@nfs01 ~]# yum install -y nfs-utils
# CentOS 6,需要安装nfs和rpc
[root@nfs ~]# yum install -y nfs-utils rpcbind
# 2. 编辑nfs的配置文件(这里的内容有影响到nfs客户端的用户创建)
[root@nfs01 ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
# 3. 根据配置文件创建对应用户及文件
[root@nfs01 ~]# groupadd www -g 666
[root@nfs01 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
[root@nfs01 ~]# mkdir /data
[root@nfs01 ~]# chown -R www.www /data
# 4. 启动nfs服务(针对CentOS7)
[root@nfs01 ~]# systemctl start nfs-server
[root@nfs01 ~]# systemctl enable nfs-server
#启动rpc,在启动nfs(针对CentOS6,需要多启动一个服务)
[root@nfs ~]# systemctl start rpcbind nfs-server
# 5. 服务安装-----------作为rsync的客户端安装配置
[root@nfs ~]# yum install -y rsync inotify-tools
[root@nfs ~]# wget--------这个包为二进制包,解压即可用 https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@nfs ~]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@nfs ~]# mv GNU-Linux-x86 /usr/local/sersync
# 6. 修改配置文件
[root@nfs ~]# vim /usr/local/sersync/confxml.xml -------------------只需将配置文件中注释内容修改
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="true"/> # 改为true说明属性修改此进行监控同步
<modify start="true"/> # 改为true说明针对修改进行监控同步
</inotify>
<sersync>
<localpath watch="/data"> # 本地监控路径
<remote ip="10.0.0.41" name="backup"/> # rsync的服务端和服务端备份路径
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-az"/> # 使用rsync推送时使用命令
# 下方true为开启,用户为服务端虚拟用户,使用密码文件
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.passwd"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
# 7.针对配置文件创建密码文件
[root@nfs ~]# vim /etc/rsync.pas
123
# 8.授权密码文件权限为600
[root@nfs ~]# chmod 600 /etc/rsync.pass
# 7.启动服务----------因是二进制包,没有环境变量,需要以绝对路径启动服务
[root@nfs ~]# /usr/local/sersync/sersync2 -rdo /usr/local/sersync/confxml.xml
web双机配置
# 1. 服务安装(web01和web02同时操作)
[root@web01 ~]# yum install apache php
[root@web02 ~]# yum install apache php
[root@web01 ~]# yum install -y nfs-utils
[root@web02 ~]# yum install -y nfs-utils
# 2. 创建www用户(作为匿名访问nfs时的用户 web01和web02同时操作)
[root@web01 ~]# groupadd www -g 666
[root@web01 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
[root@web02 ~]# groupadd www -g 666
[root@web02 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
# 3. 修改共享目录的属主和属组信息(web01和web02同时操作)
[root@web01 /var/www/html]# chown -R www.www /var/www/html
[root@web01 /var/www/html]# chown -R www.www /var/www/html
# 4. 修改apache配置文件(将apache站点目录属主属组信息进行修改,作为共享目录需要和nfs配置文件中定义用户保持一致)
[root@web01 /var/www/html]# vim /etc/httpd/conf/httpd.conf # 将原本apache改为www
User www
Group www
[root@web02 /var/www/html]# vim /etc/httpd/conf/httpd.conf # 将原本apache改为www
User www
Group www
# 5. 查看共享服务器信息(因backup和rsync都有部署rsync服务端)
[root@web01 /var/www/html]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
[root@web02 /]# showmount -e 10.0.0.41
Export list for 10.0.0.41:
/backup 172.16.1.0/24
# 6. 将数据上传目录修改
[root@web02 /var/www/html]# vim upload_file.php
<?php
header("Content-type:text/html;charset=utf-8");
ini_set('date.timezone','Asia/Shanghai');
$wen="/var/www/html/upload"; # 修改此处路径为用户数据上传目录
$pre=preg_match("/^([0-9])+_/",$_FILES['file']["name"][0]);
$size =$_FILES['file']["size"][0];
if (!is_dir($wen.'/')) {
mkdir($wen.'/', 0777);
}
# 7. 服务重启
[root@web02 /var/www/html]# systemctl restart httpd
# 7.浏览器访问页面并上传图片,让服务器产生upload文件
# 8. 将本地目录挂载至共享存储中(web01和web02同时操作)
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /var/www/html/upload
[root@web02 ~]# mount -t nfs 172.16.1.31:/data /var/www/html/upload
# 7. 查看是否挂载成功
[root@web02 /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.3G 18G 7% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/data 19G 1.3G 18G 7% /var/www/html/upload
# 8. 再次用户端上传数据查看数据是否在nfs服务端中同步
-
实验步骤8操作
-
查看nfs是否同步
- 查看backup服务端是否生效
3.脚本监控挂载状态
- 使用脚本检测挂载状态,当31服务器无法挂载时,自动挂载到服务器41中
[root@web02 /]# vim jiance.sh
#!/bin/bash
a=`ls /var/www/html/upload|grep jpg` &> /dev/null
if [ $? -ne 0 ];then
mount -t nfs 172.16.1.41:/backup /var/www/html/upload
echo '正在重新为您挂载到备份nfs服务器'
fi
- 将脚本放入定时任务,每分钟执行一次
[root@web02 /]# crontab -l
* * * * * /usr/bin/sh /jiance.sh &>/dev/null