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

posted @ 2020-05-11 20:28  元气少女郭德纲!!  阅读(564)  评论(0编辑  收藏  举报