文章目錄
一、rsync介紹
- Remote Sync,遠程同步,它是一個開源的快速增量備份工具,可以在不同主機之間鏡像同步整個目錄樹。
- 支持增量備份、保持連接和權限,且採用優化的同步算法,傳輸前執行壓縮,因此非常適用於異地備份、鏡像服務器等應用
- 支持本地複製,或者與其他SSH、rsync主機同步
- rsync 與scp FTP等工具備份的機制的優越性在於rsync 同步備份是先比較在拷貝變化過的數據,這樣更節省資源,如有1T的數據只有1K的數據改變,則rsync 基本上備份只要同步1k 的數據而 scp 是個傻瓜式的拷貝,全部拷貝。
1.1、rsync 服務的模式
-
1、ssh方式進行同步
-
2、C/S 方式,rsync 有服務器端daemon模塊 和rsync 客戶端
1.2、rsync服務原理
在遠程同步任務中,負責發起rsync同步操作的客戶機稱爲發起端,而負責相應來自客戶機的rsync同步操作的服務器稱爲同步源。
在同步過程中,同步源負責提供文檔的原始位置,發起端應對該位置有讀取權限。
如下圖:
- rsync是一款快速增量備份工具,支持:
(1)本地複製;
(2)與其他SSH同步;
(3)與rsync主機同步。
稍後從這三個方面來演示怎麼使用rsync備份工具。
1.3、配置rsync源思路
配置rsync源服務器大致分爲三步:
(1)建立rsync配置文件;
(2)爲備份賬戶創建數據文件;
(3)啓動rsync服務。
二、搭建rsync服務
準備兩臺虛擬機,一臺作爲同步源,一臺用於客戶機發起同步。
2.1、建立rsync配置文件
同步源服務器:
[root@localhost ~]# yum -y install httpd
//如果虛擬機是最小化安裝,還需要rsync包安裝。
[root@localhost ~]# yum -y install rsync
[root@localhost ~]# vi /etc/rsyncd.conf ####在同步源服務器上配置
uid = nobody
gid = nobody
use chroot = yes ####禁錮在源目錄
address = 192.168.100.131 ####監聽地址
port 873 ####監聽端口號
log file = /var/log/rsyncd.log ####日誌文件位置
pid file = /var/run/rsyncd.pid ####存放進程ID的文件位置
hosts allow = 192.168.100.0/24 ####允許訪問的客戶機地址
[wwwroot] ####共享模塊名稱
path = /var/www/html ####源目錄的實際路徑
comment = Document Root of www.51xit.top
read only =yes #####是否只讀
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z ####同步時不在壓縮的文件類型
auth users =backuper #####授權賬戶
secrets file = /etc/rsyncd_users.db ####存放賬戶信息的數據文件
基於安全性考慮,同步源最好僅允許以只讀方式做同步,另外,同步也可以採用匿名的方式,只要將其中的“auth users”"secrets file"配置註釋掉即可
2.2、爲備份賬戶創建數據文件
//創建rsync賬號文件
採用“用戶名:密碼”的記錄格式,每行一個用戶記錄,獨立的賬號數據,不依賴於系統賬號
[root@localhost ~]# vi /etc/rsyncd_users.db
backuper:pwd123
//由於賬號信息採用明文存放,因此需要調整文件權限,避免賬號信息泄露
[root@localhost ~]# chmod 600 /etc/rsyncd_users.db
//備份用戶應對源目錄具有讀取權限。
[root@localhost ~]# ls -ld /var/www/html
drwxr-xr-x. 2 root root 6 8月 8 2019 /var/www/html
2.3、啓用rsync服務
通過–daemon模塊獨自提供服務
//此處如果想要停止這個服務 ,有兩個方式:
方式一:
[root@localhost ~]# kill $(cat /var/run/rsyncd.pid) #使用這個停止服務必須刪除存放rsync服務進程的文件
[root@localhost ~]# rm -rf /var/run/rsyncd.pid
方式二:直接使用“netstat -anpt | grep rsync”命令查出進程號,使用“kill 進程號”。
2.4、新建文件做測試
在源目錄/var/www/html中,新建文件
[root@localhost opt]# cd /var/www/html/
[root@localhost html]# vi 123.html ####裏面的內容隨意加
[root@localhost html]# vi 456.html ####裏面的內容隨意加
三、使用rsync備份工具
配置好rsync同步源服務器之後,客戶端就可以使用rsync工具來執行遠程同步了。
1、本地複製(類似於cp命令)
rsync [選項] 原始位置 目標位置
###常用選項###
-a:歸檔模式,遞歸併保留對象屬性,等同於 -rlptgoD
-v:顯示同步過程的詳細(verbose)信息
-z:在傳輸文件時進行壓縮(compress)
-H:保留硬連接文件
-A:保留ACL屬性信息
--delete:刪除目標位置有而原始位置沒有的文件
--checksum:根據對象的校驗和來決定是否跳過文件
2、與其他SSH同步
[root@localhost ~]# rsync -av [email protected]:/root/123.txt .
[email protected]'s password:
3、與rsync源主機同步
格式1:rsync -avz 用戶名@主機地址::共享模塊名 目標目錄
格式2: rsync -avz rsync://用戶名@主機地址/共享模塊名 目標目錄
[root@localhost ~]# rsync -avz [email protected]::wwwroot /opt
或者
[root@localhost ~]# rsync -avz rsync://[email protected]/wwwroot /opt
rsync -avzH --delete [email protected]::wwwroot /opt
--delete:刪除目標位置有而原始位置沒有的文件
在這裏把opt目錄下除了源主機的wwwroot模塊裏的文件,其他全刪除。
4、rsync源的免交互處理
客戶機:
[root@localhost wwwroot]# vi /etc/server.pass
pwd123
[root@localhost wwwroot]# cat /etc/server.pass
pwd123
[root@localhost wwwroot]# chmod 600 /etc/server.pass
再次修改rsync 服務器內容,用於辨別同步效果
//客戶機同步信息,指明密碼存放
rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt
免交互同步新的內容abc.html
5、設置定期同步
[root@localhost wwwroot]# crontab -e ####每天晚上10點半對服務器網站目錄更新一次
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/myweb/
[root@localhost wwwroot]# systemctl restart crond
[root@localhost wwwroot]# systemctl enable crond
四、rsync實時同步配置
4.1、實時同步介紹
1、定期同步存在一些不足之處,比如:
- 執行備份的時間固定,延遲明顯、實時性差
- 當同步源長期不變化時,密集的定期任務是不必要的
2、實時同步的優點
- 一旦同步源出現變化,立即啓動備份
- 只要同步源無變化,則不執行備份
3、inotify介紹
- Linux內核從2.6.13開始,引入了inotify機制。
- 它是一種文件系統的變化通知機制,可以監控文件,也可以監控目錄。當監控目錄時,它可以同時監控目錄及目錄中的各子目錄及文件的。
- 可以協助rsync,監控到數據的改變,觸發 rsync 進行數據的同步。
4.2、部署過程
客戶機:
1、調整inotify內核參數
當要監控的目錄、文件數量較多或者變化較頻繁時,建議加大這三個參數的值。
可以直接修改/etc/sysctl.conf的配置文件,將管理隊列、實例數、監控數進行設置。
[root@localhost ~]# vi /etc/sysctl.conf #客戶端
//直接在行尾添加
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@localhost ~]# sysctl -p #使之生效
2、安裝inotifi-tools
使用inotify機制還需要安裝inotifi-tools,以便提供 inotifywait 和 inotifywatch 輔助工具程序,用來監控和彙總改動情況。
- inotifywait:用於持續監控,實時輸出結果
- inotifywatch:用於短期監控,任務完成後再出結果
//上傳inotify-tools-3.14.tar.gz到/opt目錄下
[root@localhost myweb]# cd /opt
[root@localhost opt]# tar xzvf inotify-tools-3.14.tar.gz
[root@localhost opt]# cd inotify-tools-3.14/
[root@localhost inotify-tools-3.14]# ./configure
[root@localhost inotify-tools-3.14]# make && make install
3、編寫觸發式同步腳本
vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/myweb/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/myweb/ [email protected]::wwwroot"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
# echo "${FILE} was rsynced" >>/opt/inotify_rsync.log
fi
done
//添加執行權限
chmod +x /opt/inotify.sh
4、驗證
源服務器:
[root@localhost html]# vi /etc/rsyncd.conf #源服務器
read only = no ###這個地方原來的yes 改成 no 這個地方的模塊可以讀寫了
[root@localhost ~]# kill $(cat /var/run/rsyncd.pid) ###關閉rsyncd服務
[root@localhost ~]# rsync --daemon ###啓動rsyncd服務
[root@localhost ~]# netstat -anpt |grep rsync
tcp 0 0 192.168.100.131:873 0.0.0.0:* LISTEN 64194/rsync
[root@localhost ~]# chmod 777 /var/www/html/
客戶機:
[root@localhost ~]# /opt/inotify.sh
[root@localhost ~]# chmod 777 /opt/myweb/ ###需要在開一個終端
[root@localhost ~]# vi /opt/myweb/110.html ###裏面插入任意數據
源服務器查看:
[root@localhost ~]# ll /var/www/html/ ## 會發現這個地方會多個110.html文件
-rwx------. 1 nobody nobody 116 3月 23 21:28 110.html