rsync+inotify
- 一、Rsync——rpcbind+sync
- 1.1 作用
- 二、rsync源服務器
- 2.1 rsync同步源
- 三、配置rsync源
- 3.1 基本思路
- 四、配置部署
- 4.1 下行同步
- 五、配置rsync源服務器(master)
- 5.1 建立/etc/rsyncd.conf組態檔(master)
- 5.2 為備份賬戶創建資料檔案(master)
- 5.3 啟動rsync服務程式(master)
- 5.4 關閉rsync服務(master)
- 六、使用rsync備份工具
- 6.1 rsync命令
- 6.2 配置源的兩種表示方法
- 6.2.1 格式一
- 6.2.2 格式二
- 6.2.3 rsync同步操作示例
- 七、rsync腳本的互動處理
- 7.1 rsync源的免互動處理配置(客戶端)
- 八、rsync實時同步
- 8.1 定期同步的不足
- 8.2 實時同步的優點
- 九、關于inotify
- 9.1 Linux內核的inotify機制
- 十、rsync+inotify實時同步
- 10.1 修改rsync源服務器組態檔(master)
- 10.2 調整inotify內核引數(客戶端)
- 10.3 安裝inotify-tools輔助工具(客戶端)
- 10.4 通過inotifywait觸發rsync同步操作(客戶端)
一、Rsync——rpcbind+sync
一種快速增量備份的工具
1.1 作用
1、Romote Sync,遠程同步
(1)支持在同一臺服務器上備份或復制,類比cp/mv/重定向/dd模擬引導磁區故障)
(2)支持跨服務器備份/復制
2、支持本地復制,或者與其他SSH、rsync主機同步
http://rsync.samba.org
二、rsync源服務器
2.1 rsync同步源
指備份操作的遠程服務器,也稱為備份源
需求1:B服務器同步A服務器的資料,A服務器(備份源)
需求2:A服務器同步B服務器的資料,B服務器(備份源)

三、配置rsync源
目的:將本服務器做成rsync的“源服務器”
3.1 基本思路
1、調整rsync.conf組態檔引數
2、創建獨立賬號檔案用于登錄對端的服務器
3、啟用rsync的–daemon模式
四、配置部署
4.1 下行同步
用戶zhangsan,允許下行同步
操作目錄為/var/www/html
systemctl stop firewalld
setenforce 0

五、配置rsync源服務器(master)
rpm -q rsync #一般系統已默認安裝rsync
yum -y install rsync httpd


5.1 建立/etc/rsyncd.conf組態檔(master)
1、需手動建立,語法類似于Samba配置
2、修改組態檔:認證配置auth users、secrets file,不加則為匿名
vim /etc/rsyncd.conf #添加以下配置項
uid = nobody #root
gid = nobody #root
use chroot = yes #禁錮在源目錄
address = 192.168.238.20 #監聽地址(源服務器IP)
port 873 #監聽埠tcp/udp 873,可通過cat /etc/services | grep rsync查看
log file = /var/log/rsyncd.log #日志檔案位置
pid file = /var/run/rsyncd.pid #存放行程ID的檔案位置
hosts allow = 192.168.238.0/24 #允許訪問的客戶機地址
[xyw] #共享模塊名稱
path = /var/www/html #源目錄的實際路徑
comment = Document Root of www.xyw.com
read only = no #是否為只讀
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步時不再壓縮的檔案型別
auth users = zhangsan #授權賬戶,多個賬號以空格分隔
secrets file = /etc/rsyncd_users.db #存放賬戶資訊的資料檔案
#如采用匿名的方式,只要將其中的"auth users"和"secrets file"配置項去掉即可,

uid和gid要為root,否則會報錯


5.2 為備份賬戶創建資料檔案(master)
rsync賬號檔案
采用"用戶名:密碼”的記錄格式,每行一個用戶記錄
獨立的賬號資料,不依賴于系統賬號
vim /etc/rsyncd_users.db #原檔案不存在
zhangsan:abc123 #無須建立同名系統用戶
chmod 600 /etc/rsyncd_users.db
#保證所有用戶對源目錄/var/www/html都有讀取權限
#yum -y install httpd
chmod +r /var/www/html/
ls -ld /var/www/html/



5.3 啟動rsync服務程式(master)
rsync --daemon #啟動rsync服務,以獨立監聽服務的方式(守護行程)運行 通過--daemon獨自提供服務
netstat -anpt | grep rsync

5.4 關閉rsync服務(master)
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid


六、使用rsync備份工具
6.1 rsync命令
rsync [選項] 原始位置 目標位置
常用選項
-a:歸檔模式,保留檔案的權限、屬性等資訊,等同于組合選項"-rlptgoD",
-v:顯示同步程序的詳細(verbose) 資訊,
-z:在傳輸檔案時進行壓縮(compress),
-H:對于符號鏈接檔案仍然復制為符號鏈接檔案,即保留硬連接檔案,
-A:保留ACL屬性資訊,
--delete: 洗掉目標位置有而原始位置沒有的檔案,
--checksum: 根據校驗和(而不是檔案大小、修改時間)來決定是否跳過檔案,
-r:遞回模式,包含目及子錄中的所有檔案,
-p:保留檔案的權限標記,
-t: 保留檔案的時間標記,
-g:保留檔案的屬組標記(僅超級用戶使用),
-o:保留檔案的屬主標記(僅超級用戶使用),
-D: 保留設備檔案及其他特殊檔案,
6.2 配置源的兩種表示方法
#將指定的資源下載到本地/opt目錄下進行備份
格式1:用戶名@主機地址(源服務器)::共享模塊名
格式2:rsync://用戶名@主機地址/共享模塊名
6.2.1 格式一
rsync -avz zhangsan@192.168.238.20::xyw /var/www/html/
密碼abc123

6.2.2 格式二
rsync -avz rsync://zhangsan@192.168.238.20/xyw /var/www/htlm/
6.2.3 rsync同步操作示例
下行rsync源: wwwroot共享-> /myweb
[root@localhost ~]# mkdir /myweb
[root@localhost ~]# rsync -avzH --delete
backuper@192.168.4.200::wwwroot /myweb
Password:
receiving incremental file list
./
index.html
index.php
七、rsync腳本的互動處理
7.1 rsync源的免互動處理配置(客戶端)
yum -y install rsync httpd
echo "abc123" > /etc/server.pass
cat /etc/server.pass
chmod 600 /etc/server.pass
#SSH:密鑰對、賬號密碼、密鑰檔案ssh -i 密鑰檔案位置 root@192.168.238.10
#密鑰檔案的權限要是600
rsync -az --delete --password-file=/etc/server.pass zhangsan@192.168.238.20::xyw /var/www/html/
crontab -e
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass zhangsan@192.168.238.20::xyw /var/www/html/
systemctl restart crond
systemctl enable crond

八、rsync實時同步
8.1 定期同步的不足
●執行備份的時間固定,延遲明顯、實時性差
●當同步源長期不變化時,密集的定期任務是不必要的、造成資源浪費
8.2 實時同步的優點
●一旦同步源出現變化,立即啟動備份
●只要同步源無變化,則不執行備份
九、關于inotify
使用inotify通知介面,可以用來監控檔案系統的各種變化情況,如檔案存取、洗掉、移動、修改等,利用這一機制,可以非常方便地實作檔案異動告警、增量備份, 并針對目錄或檔案的變化及時作出回應,
將inotify機制與rsync工具相結合,可以實作觸發式備份(實時同步),即只要原始位置的檔案發生變化,則立即啟動增量備份操作;否則處于靜默等待狀態,
因為inotify通知機制由Linux內核提供,因此主要做本機監控,在觸發式備份中應用時更適合上行同步,
9.1 Linux內核的inotify機制
●從版本2.6.13開始提供
●可以監控檔案系統的變動情況,并做出通知回應
●輔助軟體:inotify-tools

十、rsync+inotify實時同步
10.1 修改rsync源服務器組態檔(master)
vim /etc/rsyncd.conf
read only = no #關閉只讀,上行同步需要可以寫
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
rsync --daemon
netstat -anpt | grep rsync
chmod 777 /var/www/html/


10.2 調整inotify內核引數(客戶端)
max_queue_events: 監控事件佇列大小,默認值為16384
max_user_instances: 最多監控實體數,默認值為128
max_user_watches: 每個實體最多監控檔案數,默認值為8192
當要監控的目錄、檔案數量較多或者變化較頻繁時,建議加大這三個引數的值,

cat /proc/sys/fs/inotify/max_queued_events
cat /proc/sys/fs/inotify/max_user_instances
cat /proc/sys/fs/inotify/max_user_watches
vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
#監控數應大于監控目標的總檔案數
sysctl -p


10.3 安裝inotify-tools輔助工具(客戶端)
用inotify機制還需要安裝inotify tools,以便提供inotifywait、inotifywatch 輔助工具程式,
inotifywait:用于持續監控,實時輸出結果
inotifywatch:用于短期監控,任務完成后再出結果
notifywait:可監控modify (修改)、create (創建)、move (移動)、delete (洗掉)、attrib (屬性更改)等各種事件,一有變動立即輸出結果,
inotifywatch:可用來收集檔案系統變動情況, 并在運行結束后輸出匯總的變化情況,
tar zxvf inotify-tools-3.14.tar.gz -C /opt/
cd /opt/inotify-tools-3.14
yum -y install gcc gcc-c++
./configure
make && make install
#執行"inotifywait" 命令,然后在另一個終端向/var/www/html綠下添加檔案、移動檔案,跟蹤螢屏輸出結果,
inotifywait -mrq -e modify,create,move,delete /var/www/html
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
/var/www/html/ CREATE index.php
/var/www/htmI/ MODIFY index.php
/var/www/html/ MOVED_FROM index.php
/var/www/html/ MOVED_TO test.php
#修改、創建、移動、洗掉
#選項"-e":用來指定要監控哪些事件
#選項"-m":表示持續進行監控
#選項"-r":表示遞回整個目錄,遞回監控所有子物件
#選項"-q":簡化輸出資訊



10.4 通過inotifywait觸發rsync同步操作(客戶端)
使用while、read持續獲取監控結果
根據結果可以作進一步判斷,決定執行何種操作
#在另外一個終端撰寫觸發式同步腳本
#持續監控源端捕捉修改資訊
vim /opt/inotify_rsync.sh
#!/bin/bash
#等號前后不能有空格
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -apzH --delete --password-file=/etc/server.pass /var/www/html/ zhangsan@192.168.238.20::xyw/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE #讀取輸出的監控記錄
#while判斷是否接收到監控記錄
#while read 遍歷
do
if [ $(pgrep rsync | wc -l) -le 0 ]; then #如果rsync未執行,則立即啟動
$RSYNC_CMD
fi
done
chmod +x /opt/inotify_rsync.sh
#yum -y install httpd
chmod 777 /var/www/html/
chmod +x /etc/rc.d/rc.local
echo '/opt/inotify_rsync.sh' >> /etc/rc.d/rc.local #加入開機自動執行
sh /opt/inotify_rsync.sh &


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/265522.html
標籤:其他
