配置rsync+inotify實現站點文件實時同步
阿新 • • 發佈:2018-07-29
rep ron 文件實時同步 .tar.gz exp area 調整 資源 centos 一、rsync簡介
- rsync是linux系統下的數據鏡像備份工具。可以在不同主機之間鏡像同步整個目錄樹,支持增量備份,保持鏈接和權限,且采用優化的同步算法,在傳輸前執行壓縮,因此非常適用於異地備份、鏡像服務器等應用。
- rsync的官方站點為http:rsync.samba.org/
二、使用rsync備份工具
2.1、rsync命令的基本用法
- 用法類似於cp命令,例如將文件/etc/fstab 和目錄/boot/grub同步備份到.opt目錄下,其中-r表示遞歸整個目錄,-l選項用來備份鏈接文件。
rsync /etc/fstab /opt
rsync -rl /etc/fstab /boot/grub /opt
常用命令格式及備份選項: -v, --verbose 詳細模式輸出 -q, --quiet 精簡輸出模式 -c, --checksum 打開校驗開關,強制對文件傳輸進行校驗 -a, --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rlptgoD -r, --recursive 對子目錄以遞歸模式處理 -p, --perms 保持文件權限 -o, --owner 保持文件屬主信息 -g, --group 保持文件屬組信息 -z, --compress 對備份的文件在傳輸時進行壓縮處理 -delete 刪除那些DST中SRC沒有的文件,保證兩邊文件同步對齊
- 配置源的表示方法
- 在執行遠程同步時,rsync需要指定同步源服務器中的資源位置。
rsync同步資源的表示方式為 “用戶名@主機地址::共享模塊名” 或者,“rsync://用戶名@主機地址/共享模塊名” 前者為兩個冒號分割形式,後者為URL地址形式,例如 執行以下操作將訪問rsync同步源,並下載到本地/root目錄下進行備份 [root@localhost~]# rsync -avz [email protected]::abc /root 或者 [root@localhost~]# rsync -avz rsync://[email protected]/abc /root 執行以下操作訪問源服務器中的abc共享模塊,並下載到本地的/opt目錄下: [root@localhost~]# rsync -avzH --delete [email protected]::abc /opt 實際生產環境中通常都是計劃性重復執行的,為了在周期性計劃任務中不用輸入密碼交互式執行, 需要創建一個密碼文件,保存用戶的密碼,如/etc/server.pass,在執行rsync同步時使用選項 --password-file=/etc/server.pass,指定即可。 crontab -e 30 22 * * * /usr/bin/rsync --delete --password-file=/etc/server.pass [email protected]::abc /opt //每天22:30執行腳本 servevice crond restart chkconfig crond on
三、配置rsync+inotify實時同步
-
notify是一種強大的、細粒度的、異步的文件系統事件監控機制,Linux內核從2.6.13版本起,加入了對inotify的支持。通過inotify可以監控文件系統中添加、刪除、修改、移動等各種事件,利用這個內核接口,inotify-tools便可以監控文件系統下文件的各種變化情況了。
- 查看內核版本
uname -r
1、系統環境
主機 | 操作系統 | IP地址 | 所需軟件 |
---|---|---|---|
rsync源服務器 | CentOS 7.0 x86_64 | 192.168.144.110 | rsync+inotify-tools-3.14.tar.gz |
rsync備份服務器 | CentOS 7.0 x86_64 | 192.168.144.120 | rsync+inotify-tools-3.14.tar.gz |
2、軟件安裝
rpm -q rsync //查詢rsync是否安裝,一般為系統自帶安裝
yum install rsync -y //若沒有安裝,使用yum安裝
- 安裝inotify軟件包
tar zxzvf notify-tools-3.14.tar.gz -C /opt
cd /opt/inotify-tools-3.14
./configuer
make && make install
3、調整inotify內核參數
vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384 //監控事件隊列數
fs.inotify.max_user_instances = 1024 //最多監控實例數
fs.inotify.max_user_watches = 1048576 //實例最多監控文件數
4、配置rsync源於備份服務器
vim /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
uid = nobody //rsync服務uid
gid = nobody //rsync服務gid
use chroot = yes //禁錮家目錄
pid file = /var/run/rsyncd.pid //進程文件目錄
address = 192.168.144.110 //源服務器監聽地址
port = 873 //服務端口號
log file = /var/log/rsyncd.log //指定日誌文件位置
hosts allow = * //允許任意網段服務器可與之同步
# max connections = 4 //最大鏈接數
# # exclude = lost+found/
# # transfer logging = yes
# # timeout = 900
# # ignore nonreadable = yes
# # dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
#
# # [ftp]
# # path = /home/ftp
# # comment = ftp export area
#
#
[abc] //共享模塊名稱,兩臺服務器可以不同
path = /var/www/html //共享模塊路徑,兩臺服務器可以不同
comment = www.yun.com //模塊描述,兩臺服務器可以不同
read only = no //關閉只讀權限,不寫或者註釋為默認選擇只讀
write only = no //關閉可寫權限,不寫或者註釋為默認選擇不可寫
uid = root //指定模塊uid
gid = root //指定模塊gid
hosts allow = * //允許任意網段服務器訪問此模塊
auth users=test //模塊訪問驗證用戶名稱
secrets file = /etc/rsyncd_users.db //模塊驗證密碼文件,鍵值對形式
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 //同步過程中遇到此類文件不進行壓縮
-
此處需要註意,上述配置文件中,備份服務器的配置需要和源服務器一模一樣,除了備份服務器的否則在源服務器上行文件時會報錯。尤其是密碼文件權限和獨立密碼文件權限需要為600,否則也會報錯。
- 啟動服務
rsync --daemon
- 結束服務,kill進程即可。
4.1、創建賬戶驗證文件
- 根據配置文件中,按需創建,註意文件路徑與名稱。
vim /etc/rsyncd_users.db
test:abc123 //"用戶名:密碼"的形式
chmod 600 /etc/rsyncd_users.db
- 由於這種形式在執行命令時需要交互式驗證,因此需要創建獨立密碼驗證文件。
4.2、創建獨立密碼文件
vim /etc/server.pass
abc123 //只含密碼的文件
chmod 600 /etc/server.pass
4.3、編寫觸發式同步腳本
vim /opt/ino.sh
#!/bin/bash
DESIP=192.168.144.120 //設置源服務器需要將文件上行(發送)到備份服務器IP地址
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ test@$DESIP::abc/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -gt 0 ] ; then
$RSYNC_CMD
fi
done
- 此處需要註意,在兩臺服務器需要同步的目錄之間,也需要將目錄權限放到最大,避免因目錄本身權限報錯。
chmod +x /opt/ino.sh
4.4、源服務器端測試
- 執行腳本後,當前終端會變成實時監控界面,需要重新打開終端操作。
- 在源服務器端共享模塊目錄下進行文件操作,然後去備份服務器下,可觀察到文件已經被實時同步。
配置rsync+inotify實現站點文件實時同步