rsync+inotify實現上行實時同步
阿新 • • 發佈:2018-09-05
watch data all pre tro 使用 delet 權限 rec
rsync:一款開源備份工具;實現不同主機間鏡像同步整個目錄樹;支持增量備份、權限、壓縮等
rsync角色
- 發起端:負責發起rsync同步,操作客戶機(相當於C端)
- 備份源:負責響應rsync的請求的服務器(相當於S端)
同步的方向
- 上行同步(上傳):備份源提供文檔的目標位置(date在發起端),發起端使用用戶必須對目錄有寫入權限
- 下行同步(下載):備份源負責提供文檔原始位置(date在備份源),發起端使用用戶只需對data有讀取權限即可
搭建rsync備份源
vim /etc/rsyncd.db
hehe:123 //用戶名:密碼
vim /etc/rsyncd.conf uid = nobody //運行用戶 gid = nobody //運行組 use chroot = yes //用戶禁錮到訪問目錄 address = 192.168.1.10 //監聽IP port 873 //監聽端口 log file = /var/log/rsyncd.log //日誌文件位置 pid file = /var/run/rsyncd.pid //PID運行文件位置 hosts allow = 192.168.1.0/24 //運行同步的網段 [data] //同步名 path = /data //同步的目錄 comment = Document Root //描述 read only = no write = yes //用戶可寫 dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z //同步時不需壓縮的格式 auth users = hehe //認證用戶 secrets file = /etc/rsyncd.db //用戶帳號文件位置
chmod 600 /etc/rsync.db
mkdir /data && chmod 777 /data
rsync --daemon //獨立模式運行rsync服務;停止rsync(killall rsync && rm -rf /var/run/rsyncd.pid)
client同步(註意將write = yes增加)
下行:rsync [ 選項 ] 遠程目錄 本地目錄
上行:rsync [ 選項 ] 本地目錄 遠程同步名
選項
-a:提供歸檔和屬性信息
-v:顯示詳細信息
-z:壓縮
-H:保持硬鏈接
-u:可實現增量備份
mkdir /a
rsync -avzH --delete rsync://[email protected]/data/ /a/ //將備份源中的數據下載同步到當前位置
rsync -avzH --delete [email protected]::data /a/
- 兩條命令任選其一
rsync -avzH --delete /a/ rsync://[email protected]/data //將發起端的數據上傳同步到備份源;用戶在備份源必須有寫入權限
rsync -avzH --delete /a/ [email protected]::data
- 兩條命令任選其一
計劃任務實現定時下行同步
vim /etc/profile
export RSYNC_PASSWORD=123 //將rsync密碼加入環境變量
source /etc/profile
crontab -e * */4 * * * /usr/bin/rsync -avzHu --delete rsync://[email protected]/data /a //定時下行同步 * */4 * * * /usr/bin/rsync -avzHu --delete /a rsync://[email protected]/data //定時上行同步
rsync+inofity:註意用於上行實時同步(以下操作全在客戶端)
安裝inotify-tools
tar zxvf inotify-tools-*.tar.gz -C /usr/src/
cd /usr/src/inotify-tools-*/
./configure && make && make install
inotify的使用
vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384 ##監控事件隊列數
fs.inotify.max_user_instances = 1024 ##監控實例數
fs.inotify.max_user_watches = 1048576 ##監控的文件數量
sysctl -p
vim rsync_inotify.sh ##實時同步腳本
#!/bin/bash
RSYNC="rsync -avzHu --delete /a/ rsync://[email protected]/data"
INT_CMD="inotifywait -mrq -e modify,create,move,delete,attrib /a"
export RSYNC_PASSWORD=123 //可解決rsync同步時,無需輸入密碼
$INT_CMD | while read DIRECOTRY EVENT FILE;do
$RSYNC 1>/dev/null 2>/var/log/rsync_err.log
done
chmod +x rsync_inotify.sh //給予腳本執行權限
rsync_inotify.sh & //啟動腳本
rsync+inotify實現上行實時同步