所有用到的包和文檔記錄 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
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL2MzN1QjN1kDM4ETNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
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