rsync+inotify遠程同步
- 一、相關概論
- 1.1 rsync
- 1.2 inotify
- 二、定期同步的優點及不足
- 2.1 優點
- 2.2 不足
- 三、rsync+inotify實時同步
- 3.1 調整inotify內核引數
- 3.2 安裝inotify-tools輔助工具
- 3.3 通過inodifywait觸發rsync同步操作
- 四、配置rsync下行同步
- 4.1 配置rsync源服務器
- 4.2 配置發送端
- 五、rsync+inotify實時同步
- 5.1 配置rsync源服務器
- 5.2 配置發送端
一、相關概論
1.1 rsync
rsync是一個開源的快速備份工具,可以在不同主機之間鏡像同步整個目錄樹,支持增量備份,并保持鏈接和權限,且采用優化的同步演算法,傳輸前執行壓縮,因此非常適用于異地備份、鏡像服務器等應用,
1.2 inotify
- Linux內核的inotify機制,從版本2.6.13開始提供,可以監控檔案系統的變動情況,并作出通知回應
- 所需軟體:inotify-tools
二、定期同步的優點及不足
2.1 優點
- 一旦同步原出現變化,立即啟動備份
- 只要同步原無變化,則不執行備份
2.2 不足
- 執行備份的時間固定,延遲明顯、實時性差
- 當同步原長期不變化時,密集的定期任務是不必要的
三、rsync+inotify實時同步
3.1 調整inotify內核引數
/etc/sysctl.conf(內核引陣列態檔)
max_queue_events:監控事件佇列大小
max_user_instances:最多監控實體數
max_user_watches:每個實體最多監控檔案數
3.2 安裝inotify-tools輔助工具
inotifywait:用于持續監控,實時輸出結果
inotifywatch:用于短期監控,任務完成后再出結果
3.3 通過inodifywait觸發rsync同步操作
- 使用while、read持續獲取監控結果
- 根據結果可以作進一步判斷,決定執行何種操作
四、配置rsync下行同步
環境配置
| 主機 | 作業系統 | IP地址 | 軟體包/工具 |
|---|---|---|---|
| 源端 | CentOS7 | 192.168.153.10 | rsync |
| 發送端 | CentOS7 | 192.168.153.20 | rsync、inotify-tools-3.14.tar.gz |
4.1 配置rsync源服務器
關閉防火墻及安全機制
systemctl stop firewalld
setenforce 0
安裝服務
yum install -y rsync

修改組態檔
vim /etc/rsyncd.conf #添加以下配置項
uid = nobody #root
gid = nobody #root
use chroot = yes #禁錮在源目錄
address = 192.168.153.10 #監聽地址
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.153.0/24 #允許訪問的客戶機地址
[wt] #共享模塊名稱
path = /var/www/html #源目錄的實際路徑
comment = Document Root of www.wt.com
read only = yes #是否為只讀
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步時不再壓縮的檔案型別
auth users = test #授權賬戶,多個賬號以空格分隔
secrets file = /etc/rsyncd_users.db #存放賬戶資訊的資料檔案
#如采用匿名的方式,只要將其中的"auth users"和"secrets file"配置項去掉即可,

為備份賬戶創建資料檔案
vim /etc/rsyncd_users.db
test:123456

chmod 600 /etc/rsyncd_users.db #保證所有用戶對源目錄/var/www/html 都有讀取權限

mkdir -p /var/www/html
chmod +r /var/www/html/
ls -ld /var/www/html/

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


關閉 rsync 服務
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
4.2 配置發送端
基本格式:rsync [選項] 原始位置 目標位置
常用選項:
| -r | 遞回模式,包含目錄及子目錄中的所有檔案, |
|---|---|
| -l | 對于符號鏈接檔案仍然復制為符號鏈接檔案, |
| -v | 顯示同步程序的詳細(verbose)資訊, |
| -z | 在傳輸檔案時進行壓縮(compress), |
| -a | 歸檔模式,保留檔案的權限、屬性等資訊,等同于組合選項“-rlptgoD”, |
| -p | 保留檔案的權限標記, |
| -t | 保留檔案的時間標記, |
| -g | 保留檔案的屬組標記(僅超級用戶使用), |
| -o | 保留檔案的屬主標記(僅超級用戶使用), |
| -H | 保留硬連接檔案, |
| -A | 保留 ACL 屬性資訊, |
| -D | 保留設備檔案及其他特殊檔案, |
| –delete | 洗掉目標位置有而原始位置沒有的檔案, |
| –checksum | 根據校驗和(而不是檔案大小、修改時間)來決定是否跳過檔案, |
systemctl stop firewalld.service
setenforce 0
rpm -q rsync
cd /opt/
mkdir test
chmod 777 test/

將指定的資源下載到本地/opt 目錄下進行備份
rsync -az test@192.168.153.10::www /opt/test #密碼123456
格式二:
rsync -az rsync://test@192.168.153.10/www /opt/test

免互動格式配置
echo "123456" > /etc/server.pass
chmod 600 /etc/server.pass
rsync -az --delete --password-file=/etc/server.pass test@192.168.153.10::www /opt/test
五、rsync+inotify實時同步
使用inotify通知介面,可以用來監控檔案系統的各種變化情況,如檔案存取、洗掉、移動、修改等,利用這一機制,可以非常方便地實作檔案異動告警、增量備份,并針對目錄或檔案的變化及時作出回應,
將inotify機制與rsync工具相結合,可以實作觸發式備份(實時同步),即只要原始位置的檔案發生變化,則立即啟動增量備份操作;否則處于靜默等待狀態,
因為 inotify 通知機制由 Linux 內核提供,因此主要做本機監控,在觸發式備份中應用時更適合上行同步,
5.1 配置rsync源服務器
修改rsync源服務器組態檔
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/

調整 inotify 內核引數
在Linux內核中,默認的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

5.2 配置發送端
安裝 inotify-tools
用 inotify 機制還需要安裝 inotify-tools,以便提供 inotifywait、inotifywatch 輔助工具程式,
- notifywait:可監控modify(修改)、create(創建)、move(移動)、delete(洗掉)、attrib(屬性更改)等各種事件,一有變動立即輸出結果,
- inotifywatch:可用來收集檔案系統變動情況,并在運行結束后輸出匯總的變化情況,
yum install gcc gcc-c++ make -y
tar zxvf inotify-tools-3.14.tar.gz -C /opt/
cd /opt/inotify-tools-3.14
./configure
make && make install
撰寫觸發式同步腳本(while判斷是否接收到監控記錄)
vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /opt/test/"
RSYNC_CMD="rsync -az --delete --password-file=/etc/server.pass /opt/test/ test@192.168.153.10::www"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done

賦權,后臺執行腳本
cd /opt/
chmod +x inotify.sh
./inotify.sh & #&把程式放入后臺運行

測驗
發送端

源端

總結:
rsync 為下行同步,即源端同步到發送端
但rsync+inotify正好相反,是發送端同步到源端
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/266754.html
標籤:其他
上一篇:QoS和網路性能基礎
下一篇:github太慢甚至無法訪問
