Sersync 实时同步
实时同步概述
什么是实时同步
实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器。
为什么要实时同步
保证数据的连续性, 减少人力维护成本,解决nfs单点故障
实时同步工具选择
sersync+RSYNC(√)、inotify+rsync
Inotify是一个通知接口,用来监控文件系统的各种变化,如果文件存取,删除,移动。可以非常方便地实现文件异动告警,增量备份,并针对目录或文件的变化及时作出响应。rsync+inotify可以实触发式实时同步增量备份
sersync是国人基于rsync+inotify-tools开发的工具,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。项目地址:https://github.com/wsgzao/sersync
方案一.web和NFS的重要数据 /etc/hosts /etc/passwd 都备份到备份服务器的/backup. (用到rsync技术)
********************各服务器配置/etc/备份********************
rsync定时备份
web----------------------------->backup
rsync定时备份
nfs----------------------------->backup
backup安装rsync
**********************************************************
1.1)备份服务器41部署Rsync服务
[root@backup ~]# yum -y install rsync
1.2)配置Rsync服务
[root@backup ~]# cat /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
[backup]
comment= 用于备份web等服务器配置文件
path = /backup
[data]
comment= 用于备份web上传到nfs的视频等资料
path = /data
1.3)根据配置创建必要信息
创建虚拟用户rsync
useradd -s /sbin/nologin -M rsync
echo rsync_backup:123456 > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
创建目录
mkdir /backup /data
chown rsync.rsync /backup
chown rsync.rsync /data
1.4)启动Rsync服务
systemctl start rsyncd
systemctl enable rsyncd
1.5)客户端使用脚本
#在WEB01和NFS上部署客户端脚本
[root@nfs ~]# mkdir -p /server/scripts
[root@nfs ~]# vim /server/scripts/backup.sh
#1.定义变量
HOST=`hostname`
IP=`ifconfig eth0|awk 'NR==2{print $2}'`
TIME=`date +%F`
DIR=/backup/${IP}
FILENAME=${HOST}_${IP}_$TIME
#客户端创建以主机名称+IP地址+时间命名
mkdir -p $DIR
#2.客户端在本地打包备份放入上面创建好的目录下
cd /etc/
tar zcf $DIR/${FILENAME}.tar.gz hosts passwd
#3.对打包后的文件做MD5校验值 存入md5.txt文件中
md5sum $DIR/${FILENAME}.tar.gz > $DIR/md5.txt
#4.客户端最后将备份的数据进行推送至备份服务器
export RSYNC_PASSWORD=123456
rsync -avz $DIR rsync_backup@172.16.1.41::backup
#5.查找7天前的文件并且删除
find /backup/ -mtime +7|xargs rm &>/dev/null
1.6)WEB01和NFS 定时任务进行推送
~]# crontab -e
00 01 * * * sh /server/scripts/backup.sh
注意: 备份最少三份 备份服务器 企业内部服务器 笔记本 移动硬盘或者网盘
方案二: 实现web上传视频文件,实则是写入NFS存储,当NFS存在新的数据则会实时的复制到备份服务器
********************web数据备份********************
nfs上传 sersync+rsync实时同步
web1---------->nfs------------------->backup
nfs上配置nfs,sersync
backup上配置rsync
*************************************************
web1 172.16.1.7
nfs 172.16.1.31
backup 172.16.1.41
2.1 web上传视频至NFS存储(NFS技术)
2.1.1)部署NFS服务
nfs机器安装rpcbind和nfs
[root@nfs ~]# yum -y install rpcbind nfs-utils
web1机器安装nfs
[root@web01 ~]# yum -y install nfs-utils
2.1.2)配置NFS服务
[root@nfs ~]vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
创建必要信息:
[root@nfs ~]# groupadd -g666 www
[root@nfs ~]# useradd -u666 -g666 -M -s /sbin/nologin www
[root@nfs ~]# mkdir /data
[root@nfs ~]# chown -R www.www /data
要先启动rpcbind
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl enable rpcbind
[root@nfs ~]# systemctl start nfs
[root@nfs ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@nfs ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)
2.1.3)WEB挂载NFS共享目录 10.0.0.7
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /upload
[root@web01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 20G 1.7G 19G 9% /
devtmpfs 514M 0 514M 0% /dev
tmpfs 525M 0 525M 0% /dev/shm
tmpfs 525M 8.1M 517M 2% /run
tmpfs 525M 0 525M 0% /sys/fs/cgroup
/dev/sda1 197M 102M 95M 52% /boot
tmpfs 105M 0 105M 0% /run/user/0
172.16.1.31:/data 20G 1.7G 19G 9% /upload
[root@web01 ~]# touch /upload/1.txt
[root@web01 ~]# ll /upload/
total 0
-rw-r--r-- 1 666 666 0 Jun 10 09:27 1.txt
2.2 将NFS /data 视频 数据实时同步到备份服务器的/data目录(sersync服务)
2.2.1).部署sersync服务
#下载sersync
[root@nfs tools]# wget https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@nfs tools]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@nfs ~]# mkdir /server/tools -p
[root@nfs tools]# mv GNU-Linux-x86 /server/tools/sersync
注意: 在运行监控前 一定要先从命令行可以推送成功
rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.passwd
2.2.2).配置sersync服务
需要修改的配置为
<localpath>指定本地要推送到备份服务器上的目录和备份服务器的ip和备份目录
<rsync>指定备份所用的用户名和密码文件
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="true"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
......
<sersync>
<localpath watch="/data/">
<remote ip="172.16.1.41" name="data"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-avz"/>
<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"/>
在nfs31上创建rsync_backup验证密码文件
[root@nfs tools]#echo 123456 > /etc/rsync.passwd
[root@nfs tools]#chmod 600 /etc/rsync.passwd
2.2.3).启动sersync服务
[root@nfs sersync] ln -s /server/tools/sersync/sersync2 /bin/
[root@nfs sersync]# sersync2 -dro /server/tools/sersync/confxml.xml
注意事项: 启动一次进程即可 不要重复启动 如果配置不正确 需要先杀死进程在重新启动
[root@nfs sersync]# ps axu|grep sersync
root 17828 0.0 0.0 108716 728 ? Ssl 11:06 0:00 /server/tools/sersync/sersync2 -dro /server/tools/sersync/confxml.xml
root 17885 0.0 0.0 92324 716 ? Ssl 11:23 0:00 /server/tools/sersync/sersync2 -dro /server/tools/sersync/confxml.xml
root 17901 0.0 0.0 112704 956 pts/1 R+ 11:23 0:00 grep --color=auto sersync
[root@nfs sersync]# kill -9 17828 17885
2.2.4).验证是否成功
[root@nfs sersync]#touch /data/1.txt
[root@backup ~]#ll /data/
-rw-r--r-- 1 rsync www 0 Jun 10 11:25 1.txt
2.2.4)如果nfs服务器挂掉,由于nfs的数据已经实时备份到backup服务器上,所以需要在backup服务器上安装nfs,并启动nfs,web卸载31nfs地址,重新挂载41nfs地址
2.2.4.1) 41部署安装NFS服务:
[root@backup ~]# yum -y install rpc-bind nfs-utils
配置NFS服务:
[root@backup ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@backup ~]# groupadd -g 666 www
[root@backup ~]# useradd -u666 -g666 -s /sbin/nologin -M www
为了方便,统一用户,都用www用户
配置文件: rsyncd.conf 修改
uid = www
gid = www
[root@backup ~]# chown -R www.www /backup/
[root@backup ~]# chown -R www.www /data
启动NFS服务:
[root@backup ~]# systemctl start nfs
[root@backup ~]# systemctl enable nfs
2.2.4.2) 客户端测试: 模拟nfs31挂了, web卸载31挂载点,然后挂载到41挂载点
[root@web01 ~]# umount -f /upload
[root@web01 ~]# ll /upload/
[root@web01 ~]# showmount -e 172.16.1.41
Export list for 172.16.1.41:
/data 172.16.1.0/24
[root@web01 ~]# mount -t nfs 172.16.1.41:/data /upload
[root@web01 ~]# ll /upload/
[root@web01 upload]#
-rw-r--r-- 1 1000 1000 0 Jun 10 10:58 1.txt
-rw-r--r-- 1 1000 1000 0 Jun 10 11:07 2.txt
-rw-r--r-- 1 666 666 0 Jun 10 11:34 test.txt