Sersync 实时同步
实时同步概述
什么是实时同步
实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器。
为什么要实时同步
保证数据的连续性, 减少人力维护成本,解决nfs单点故障
实时同步工具选择
sersync+RSYNC(√)、inotify+rsync
Inotify是一个通知接口,用来监控文件系统的各种变化,如果文件存取,删除,移动。可以非常方便地实现文件异动告警,增量备份,并针对目录或文件的变化及时作出响应。rsync+inotify可以实触发式实时同步增量备份
sersync是国人基于rsync+inotify-tools开发的工具,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。项目地址:https://github.com/wsgzao/sersync
如何配置sersync
web1 172.16.1.7
backup 172.16.41 (已完成rsync守护进程模式)
1)sersync需要依赖inotify和rsync,所以需要安装对应软件
[root@web1 ~]# yum install rsync -y
[root@web1 ~]# yum install rsync inotify -y
2)下载解压安装包
[root@web1 ~]# tar -xf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@web1 ~]# mv GNU-Linux-x86 /server/tools/sersync
3)修改配置文件
[root@web1 ~]# vim /server/tools/sersync/confxml.xml
4)启动sersync服务
[root@web1 sersync]#./sersync2 -dro confxml.xml
5)查看是否启动成功
[root@web1 sersync]#ps aux|grep sersync
root 2589 0.0 0.0 100520 716 ? Ssl 17:25 0:00 ./sersync2 -dro confxml.xml
root 3427 0.0 0.0 112808 964 pts/2 R+ 18:21 0:00 grep --color=auto sersync
案例: 实现web上传视频文件,实则是写入NFS存储,当NFS存在新的数据则会实时的复制到备份服务器
一. web上传视频至NFS存储
1)部署NFS服务 10.0.0.31
服务端和客户端安装NFS软件
[root@nfs ~]# yum -y install nfs-utils
[root@web01 ~]# yum -y install nfs-utils
配置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 www.www /data
[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 ~]#
[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)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 /mnt
[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% /mnt
[root@web01 ~]# touch /mnt/1.txt
[root@web01 ~]# ll /mnt/
total 0
-rw-r--r-- 1 666 666 0 Jun 10 09:27 1.txt
二.web和NFS的重要数据 /etc/hosts /etc/passwd 都备份到备份服务器的/backup
1)41部署Rsync服务
[root@backup ~]# yum -y install rsync
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]
path = /backup
[data]
path = /data
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
4)启动Rsync服务
systemctl start rsyncd
systemctl enable rsyncd
5)客户端使用脚本+定时任务进行推送
在WEB01和NFS上部署客户端脚本
[root@nfs ~]# mkdir -p /server/scripts
[root@nfs ~]# vim /server/scripts/backup.sh
[root@nfs ~]# cat /server/scripts/backup.sh
#定义变量
HOST=`hostname`
IP=`ifconfig eth0|awk 'NR==2{print $2}'`
TIME=`date +%F`
DIR=/backup/${HOST}_${IP}_$TIME
#客户端创建以主机名称+IP地址+时间命名
mkdir -p $DIR
#2.客户端在本地打包备份放入上面创建好的目录下
cd /etc/
tar zcf $DIR/etc.tar.gz hosts passwd
#3.对打包后的文件做MD5校验值 存入md5.txt文件中
md5sum $DIR/etc.tar.gz > $DIR/md5.txt
#3.客户端最后将备份的数据进行推送至备份服务器
export RSYNC_PASSWORD=123456
rsync -avz $DIR rsync_backup@172.16.1.41::backup
#4.查找7天前的文件并且删除
find /backup/ -mtime +7|xargs rm &>/dev/null
6)写入定时任务
[root@nfs ~]# crontab -e
00 01 * * * sh /server/scripts/backup.sh
注意: 备份最少三份 备份服务器 企业内部服务器 笔记本 移动硬盘或者网盘
三.如何将NFS/data 视频 数据实时同步到备份服务器的/data目录
NFS: 安装inotify
[root@nfs ~]# yum install rsync inotify -y
[root@nfs ~]# mkdir /server/tools -p
[root@nfs scripts]# cd /server/tools/
1.部署sersync服务
[root@nfs tools]# wget wget #下载sersync软件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 tools]# mv GNU-Linux-x86 sersync
[root@nfs tools]# ll
total 0
drwxr-xr-x 2 root root 41 Oct 26 2011 sersync
注意: 在运行监控前 一定要先从命令行可以推送成功
rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.passwd
2.配置sersync服务
.....
<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"/>
..........
在31上创建rsync_backup验证密码文件
[root@nfs tools]#echo 123456 > /etc/rsync.passwd
[root@nfs tools]#chmod 600 /etc/rsync.passwd
3.启动sersync服务
[root@nfs sersync]# #./sersync2 -dro ./confxml.xml
[root@nfs sersync]# cd
注意事项: 启动一次进程即可 不要重复启动 如果配置不正确 需要先杀死进程在重新启动
[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]#
[root@nfs sersync]# kill -9 17828 17885
4.验证是否成功
[root@nfs sersync]#touch /data/1.txt
[root@backup ~]#ll /data/
total 0
-rw-r--r-- 1 rsync www 0 Jun 10 11:25 1.txt
4.如果31服务器挂掉 则 卸载重新挂载到41服务器
41部署安装NFS服务:
[root@backup ~]# yum -y install 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 修改
[root@backup ~]# head -2 /etc/rsyncd.conf
uid = www
gid = www
[root@backup ~]# chown www.www /backup/
[root@backup ~]# chown www.www /data
启动NFS服务:
[root@backup ~]# systemctl start nfs
[root@backup ~]# systemctl enable nfs
客户端测试: 假如31挂了 卸载 然后挂载到41服务器上
[root@web01 ~]# umount -f /mnt
[root@web01 ~]# ll /mnt/
total 0
[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 /mnt
[root@web01 ~]# cd /mnt/
[root@web01 mnt]# ll
total 24
-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