centos7.4 Rsync配置和觸發備份

rsync是一個快速的備份工具,可以在不同主機間鏡像同步整個目錄樹,簡單來說就是備份一臺服務器A數據到另一臺B上,A有變化則同步到B,還可反向備份

本例:
192.168.80.81 rsync同步源(被備份)備份源服務器
192.168.80.82 rsync客戶機(目標主機)發起端

1.備份源服務器80.81配置:

yum install -y rsync //7.4系統默認已安裝,不需要額外安裝
vi /etc/rsyncd.conf //以下配置rsync,原配置文件全刪除,添加以下

uid = nobody //rsync默認使用nobody用戶
gid = nobody
use chroot = yes //禁錮在源目錄/var/www/html裏(查看下面path配置)
address = 192.168.80.81 //自己的地址
port 873 //默認端口
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.80.0/24 //允許的客戶機網段
[wwwroot] //共享模塊名稱
path = /var/www/html //源目錄實際路徑
comment = Document Root of www.aa.com //描述備註信息
read only = yes //只讀 no 可讀可寫則是yes
dont compress = .gz .bz2 .tgz .zip .rar .z //排除的壓縮類型
auth users = backuper //授權登陸rsync的賬戶(不是系統用戶)
secrets file = /etc/rsyncd_users.db //存放賬戶的文件

根據上面配置文件裏建立虛擬用戶配置文件並設置恰當的權限
vi /etc/rsyncd_users.db
backuper:abc123
chmod 600 /etc/rsyncd_users.db

啓動、關閉rsync程序---
rsync --daemon
netstat -anpt | grep rsync
killall -3 rsync

2.192.168.80.82客戶機(發起端)的同步測試:

這裏分爲兩種模式:ssh源和rsync源

①客戶機使用rsync源同步:
下行同步:(本機和80.81保持一致)
rsync -avz [email protected]::wwwroot /aaa
//把同步源服務器80.81分享的目錄wwwroot下載到本機/aaa 提示輸入backuper密碼abc123

還可逆向(反向,上行)同步:(80.81和本機保持一致)
rsync -avz /aaa [email protected]::wwwroot
//把本機文件/aaa同步到同步源服務器80.81wwwroot目錄下
(需要注意:在80.81配置裏開啓read only=no ,還有系統中wwwroot本身的寫入權限:chown -R nobody /var/www/html)

把下面的命令加到/etc/profile裏可以不交互
export RSYNC_PASSWORD=abc123

下面舉幾個備份同步的例子:
A例:
80.81裏有a b c d e
80.82裏空 執行rsync -avz [email protected]::wwwroot /aaa後
80.82裏有a b c d e

B例:
80.81裏有a b c d e f
80.82裏有a b c d e g

執行rsync -avz [email protected]::wwwroot /aaa
80.82裏有a b c d e f g (把本地沒有的f同步過來了)

執行rsync -avz --delete [email protected]::wwwroot /aaa
80.82裏有a b c d e f (delete參數是刪除本地有但同步源沒有的文件g)
這條命令就是將同步源和客戶機文件完全保持一致了

rsync -avz --delete A B
將B完全同步和A一致 不管正向還是反向同步 和A一致

rsync -avz A B
把A同步到B裏,A裏有的全部同步到B

②客戶機使用ssh源同步:
原理基本和rsync一致,但使用ssh源,同步源服務器80.81就不要配置配置文件了,直接啓動rsync服務即可
下行同步:rsync -avz [email protected]:/bin/ /aaa
//把同步源服務器80.81分享的目錄下載到本地/aaa,全部使用絕對路徑,和scp命令相似
(注意使用的是root用戶)

逆向同步:rsync -avz /aaa/ [email protected]:/opt/
//把本機文件/aaa同步到同步源服務器80.81/opt/目錄下
(需要在80.81系統中/opt/開啓寫入權限)

如果避免交互的話需要配置公鑰驗證:
ssh-keygen -t rsa 本機80.82生成密鑰
ssh-copy-id [email protected] 把私鑰傳給80.81服務器

舉例同上rsync源

兩種不同源的格式比較:
rsync -avz [email protected]:/bin/ /aaa ssh源
rsync -avz [email protected]::wwwroot /aaa rsync源

3.如何實現源80.81上面分享的文件wwwroot(/var/www/html/)裏文件一有變動就實時同步到本機80.82的/aaa呢?

使用觸發備份可解決這一需求:
在源80.81上:
①調整內核參數:
vi /etc/sysctl.d/te.conf //自己創建的te.conf文件
fs.inotify.max_queued_events = 16384 //監控隊列大小
fs.inotify.max_user_instances = 1024 //最多監控實例數
fs.inotify.max_user_watches = 1048576 //每個實例最多監控文件數
sysctl -p

②編譯安裝inotify
tar xf inotify-tools-3.14 //需要自行下載
cd /opt/inotify-tools-3.14/
./configure
make && make install

③測試監控效果
inotifywait -mrq -e modify,create,move,delete /var/www/html/
//被監控目錄/var/www/html/ 出現修改創建重命名刪除等動作 會有輸出顯示
(這條命令是前臺運行的,需要複製putty會話,來測試查看)
m(持續監控)r(遞規整個目錄)q(簡化輸入信息) -e(指定監控的事件)

④可通過腳本來自動觸發備份
vi a.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /opt/"
RSYNC_CMD="rsync -azH --delete [email protected]::wwwroot /aaa/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 5 ] ; then
$RSYNC_CMD
fi
done

sh a.sh & //默認前臺運行,需要掛在後臺運行

⑤測試觸發備份:
在80.81的/var/www/html裏創建或者刪除文件,
到80.82上的/aaa/裏查看相應變化,會實時同步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章