所有用到的包和文档记录 https://download.csdn.net/download/qq_38147601/18829586
两台kylin402,可以实现一到多,暂时没测,现128往129同步[p1]
系统Kylin-4.0.2-server-sp1-Community-20170412-x86_64
cpu类型x86 (经测试arm64只需要更换包,dpkg去安装deb的包)
主要软件 inotify-tools-3.14.tar
源主机ip 192.168.220.128
目的主机 192.168.220.129
目的主机操作
1编辑配置文件
vim /etc/rsyncd.conf (内容多放引用了,都在下面)[p2]
vim /etc/rsync.pas
chmod 600 /etc/rsync.pas
mkdir /data
mkdir /data/file
2关防火墙(源好像可以不关,这里关了省得麻烦)
ufw disable
3开rsync守护进程
rsync --daemon
源主机操作
mkdir /data
1安装inotify
cd /root/
mkdir inotify
mv inotify-tools-3.14.tar.gz inotify
cd inotify/
tar -zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14/
./configure --prefix=/usr
make
make install (经测试此包在arrch64服务器上不可用)
--aarch64服务器 用kylin官网的deb包
dpkg –i *.deb
2关防火墙(源好像可以不关,这里关了省得麻烦)
ufw disable
3inotify脚本
vim inotify_init.sh[p3] (内容多放外面了)
chmod +x /root/inotify_init.sh
4密码文件
vim rsynv.pwd
chmod 600 /root/rsync.pwd
4启动和试
./inotify_init.sh (启动之后去/data/里面随便新建个东西测试,这里有时会出问题,出现末尾when异常和[[异常,尝试:set ff=unix或者bash启动)
5晚上定时全备份一下,因为这个全是增量,久了会出问题
vim /etc/crontab
1 2 * * * rsync -avz --password-file=/root/rsync.pwd /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd
增备
rsync -aqzrtopg --delete [email protected]192.168.220.129::bbsatt /home/oa_daba_backup --password-file=/root/rsync.pwd
crontab定时执行增备,这样对服务器压力会小一点
vim /etc/crontab
添加内容[p4] ,定时10秒一次增备
Service cron restart
如果需要可以暂时开启cron日志
Vim /etc/rsyslog.d/50-default.conf
把#cron.* 前面的注释#去掉
重启rsyslog服务: service rsyslog restart
[p1]经测试如果数据量变动较大,是常用系统,会对服务器造成巨大伤害,不建议在业务量大的系统上使用。
[p2]uid = root
gid = root
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[bbsatt]
path = /data/file/
ignore errors
read only = no
list = false
hosts allow = 192.168.220.128
auth users = root
secrets file = /etc/rsync.pas
[p3]#!/bin/bash
src=/data/ # 需要同步的源路径
des=bbsatt # 目标服务器上 rsync --daemon 发布的名称,rsync --daemon这里就不做介绍了,网上搜一下,比较简单。
rsync_passwd_file=/root/rsync.pwd # rsync验证的密码文件
#ip1=192.168.220.128 # 目标服务器1
ip2=192.168.220.129 # 目标服务器2
user=root # rsync --daemon定义的验证用户名
cd ${src} # 此方法中,由于rsync同步的特性,这里必须要先cd到源目录,inotify再监听 ./ 才能rsync同步后目录结构一致,有兴趣的同学可以进行各种尝试观看其效果
/usr/bin/inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file # 把监控到有发生更改的"文件路径列表"循环
do
INO_EVENT=$(echo $file | awk '{print $1}') # 把inotify输出切割 把事件类型部分赋值给INO_EVENT
INO_FILE=$(echo $file | awk '{print $2}') # 把inotify输出切割 把文件路径部分赋值给INO_FILE
echo "-------------------------------$(date)------------------------------------"
echo $file
#增加、修改、写入完成、移动进事件
#增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。
if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]] # 判断事件类型
then
echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
# rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} && # INO_FILE变量代表路径哦 -c校验文件内容
rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
#仔细看 上面的rsync同步命令 源是用了$(dirname ${INO_FILE})变量 即每次只针对性的同步发生改变的文件的目录(只同步目标文件的方法在生产环境的某些极端环境下会漏文件 现在可以在不漏文件下也有不错的速度 做到平衡) 然后用-R参数把源的目录结构递归到目标后面 保证目录结构一致性
fi
#删除、移动出事件
if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
then
echo 'DELETE or MOVED_FROM'
# rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} &&
rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
#看rsync命令 如果直接同步已删除的路径${INO_FILE}会报no such or directory错误 所以这里同步的源是被删文件或目录的上一级路径,并加上--delete来删除目标上有而源中没有的文件,这里不能做到指定文件删除,如果删除的路径越靠近根,则同步的目录月多,同步删除的操作就越花时间。这里有更好方法的同学,欢迎交流。
fi
#修改属性事件 指 touch chgrp chmod chown等操作
if [[ $INO_EVENT =~ 'ATTRIB' ]]
then
echo 'ATTRIB'
if [ ! -d "$INO_FILE" ] # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带更新此目录。
then
# rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} &&
rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
fi
fi
done
[p4]1 2 * * * root rsync -avz --password-file=/root/rsync.pwd /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd
#增备
* * * * * root rsync -aqzrtopg --delete /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd
* * * * * root sleep 10; rsync -aqzrtopg --delete /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd
* * * * * root sleep 20; rsync -aqzrtopg --delete /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd
* * * * * root sleep 30; rsync -aqzrtopg --delete /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd
* * * * * root sleep 40; rsync -aqzrtopg --delete /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd
* * * * * root sleep 50; rsync -aqzrtopg --delete /data/ [email protected]::bbsatt --password-file=/root/rsync.pwd