文章目錄
-
- 一、rsync介紹
-
- 1.1、rsync 服務的模式
- 1.2、rsync服務原理
- 1.3、配置rsync源思路
- 二、搭建rsync服務
-
- 2.1、建立rsync配置檔案
- 2.2、為備份賬戶建立資料檔案
- 2.3、啟用rsync服務
- 2.4、建立檔案做測試
- 三、使用rsync備份工具
-
- 1、本地複制(類似于cp指令)
- 2、與其他SSH同步
- 3、與rsync源主機同步
- 4、rsync源的免互動處理
- 5、設定定期同步
- 四、rsync實時同步配置
-
- 4.1、實時同步介紹
- 4.2、部署過程
-
- 1、調整inotify核心參數
- 2、安裝inotifi-tools
- 3、編寫觸發式同步腳本
- 4、驗證
一、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同步操作的伺服器稱為同步源。
在同步過程中,同步源負責提供文檔的原始位置,發起端應對該位置有讀取權限。
如下圖:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNfVmepNHL4FFVOhXW61ENJpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1gTNzITOzkTMzIzMwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- rsync是一款快速增量備份工具,支援:
(1)本地複制;
(2)與其他SSH同步;
(3)與rsync主機同步。
稍後從這三個方面來示範怎麼使用rsync備份工具。
1.3、配置rsync源思路
配置rsync源伺服器大緻分為三步:
(1)建立rsync配置檔案;
(2)為備份賬戶建立資料檔案;
(3)啟動rsync服務。
二、搭建rsync服務
準備兩台虛拟機,一台作為同步源,一台用于客戶機發起同步。
2.1、建立rsync配置檔案
同步源伺服器:
[[email protected] ~]# yum -y install httpd
//如果虛拟機是最小化安裝,還需要rsync包安裝。
[[email protected] ~]# yum -y install rsync
[[email protected] ~]# 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賬号檔案
采用“使用者名:密碼”的記錄格式,每行一個使用者記錄,獨立的賬号資料,不依賴于系統賬号
[[email protected] ~]# vi /etc/rsyncd_users.db
backuper:pwd123
//由于賬号資訊采用明文存放,是以需要調整檔案權限,避免賬号資訊洩露
[[email protected] ~]# chmod 600 /etc/rsyncd_users.db
//備份使用者應對源目錄具有讀取權限。
[[email protected] ~]# ls -ld /var/www/html
drwxr-xr-x. 2 root root 6 8月 8 2019 /var/www/html
2.3、啟用rsync服務
通過–daemon子產品獨自提供服務
//此處如果想要停止這個服務 ,有兩個方式:
方式一:
[[email protected] ~]# kill $(cat /var/run/rsyncd.pid) #使用這個停止服務必須删除存放rsync服務程序的檔案
[[email protected] ~]# rm -rf /var/run/rsyncd.pid
方式二:直接使用“netstat -anpt | grep rsync”指令查出程序号,使用“kill 程序号”。
2.4、建立檔案做測試
在源目錄/var/www/html中,建立檔案
[[email protected] opt]# cd /var/www/html/
[[email protected] html]# vi 123.html ####裡面的内容随意加
[[email protected] html]# vi 456.html ####裡面的内容随意加
三、使用rsync備份工具
配置好rsync同步源伺服器之後,用戶端就可以使用rsync工具來執行遠端同步了。
1、本地複制(類似于cp指令)
rsync [選項] 原始位置 目标位置
###常用選項###
-a:歸檔模式,遞歸并保留對象屬性,等同于 -rlptgoD
-v:顯示同步過程的詳細(verbose)資訊
-z:在傳輸檔案時進行壓縮(compress)
-H:保留硬連接配接檔案
-A:保留ACL屬性資訊
--delete:删除目标位置有而原始位置沒有的檔案
--checksum:根據對象的校驗和來決定是否跳過檔案
2、與其他SSH同步
[[email protected] ~]# rsync -av [email protected]32:/root/123.txt .
[email protected]'s password:
3、與rsync源主機同步
格式1:rsync -avz 使用者名@主機位址::共享子產品名 目标目錄
格式2: rsync -avz rsync://使用者名@主機位址/共享子產品名 目标目錄
[[email protected] ~]# rsync -avz [email protected]::wwwroot /opt
或者
[[email protected] ~]# rsync -avz rsync://[email protected]/wwwroot /opt
rsync -avzH --delete [email protected]::wwwroot /opt
--delete:删除目标位置有而原始位置沒有的檔案
在這裡把opt目錄下除了源主機的wwwroot子產品裡的檔案,其他全删除。
4、rsync源的免互動處理
客戶機:
[[email protected] wwwroot]# vi /etc/server.pass
pwd123
[[email protected] wwwroot]# cat /etc/server.pass
pwd123
[[email protected] wwwroot]# chmod 600 /etc/server.pass
再次修改rsync 伺服器内容,用于辨識同步效果
//客戶機同步資訊,指明密碼存放
rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt
免互動同步新的内容abc.html
5、設定定期同步
[[email protected] wwwroot]# crontab -e ####每天晚上10點半對伺服器網站目錄更新一次
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/myweb/
[[email protected] wwwroot]# systemctl restart crond
[[email protected] wwwroot]# systemctl enable crond
四、rsync實時同步配置
4.1、實時同步介紹
1、定期同步存在一些不足之處,比如:
- 執行備份的時間固定,延遲明顯、實時性差
- 當同步源長期不變化時,密集的定期任務是不必要的
2、實時同步的優點
- 一旦同步源出現變化,立即啟動備份
- 隻要同步源無變化,則不執行備份
3、inotify介紹
- Linux核心從2.6.13開始,引入了inotify機制。
- 它是一種檔案系統的變化通知機制,可以監控檔案,也可以監控目錄。當監控目錄時,它可以同時監控目錄及目錄中的各子目錄及檔案的。
- 可以協助rsync,監控到資料的改變,觸發 rsync 進行資料的同步。
rsync遠端同步(rsync源伺服器+inotify實時同步)
4.2、部署過程
客戶機:
1、調整inotify核心參數
當要監控的目錄、檔案數量較多或者變化較頻繁時,建議加大這三個參數的值。
可以直接修改/etc/sysctl.conf的配置檔案,将管理隊列、執行個體數、監控數進行設定。
[[email protected] ~]# vi /etc/sysctl.conf #用戶端
//直接在行尾添加
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[[email protected] ~]# sysctl -p #使之生效
2、安裝inotifi-tools
使用inotify機制還需要安裝inotifi-tools,以便提供 inotifywait 和 inotifywatch 輔助工具程式,用來監控和彙總改動情況。
- inotifywait:用于持續監控,實時輸出結果
- inotifywatch:用于短期監控,任務完成後再出結果
//上傳inotify-tools-3.14.tar.gz到/opt目錄下
[[email protected] myweb]# cd /opt
[[email protected] opt]# tar xzvf inotify-tools-3.14.tar.gz
[[email protected] opt]# cd inotify-tools-3.14/
[[email protected] inotify-tools-3.14]# ./configure
[[email protected] 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、驗證
源伺服器:
[[email protected] html]# vi /etc/rsyncd.conf #源伺服器
read only = no ###這個地方原來的yes 改成 no 這個地方的子產品可以讀寫了
[[email protected] ~]# kill $(cat /var/run/rsyncd.pid) ###關閉rsyncd服務
[[email protected] ~]# rsync --daemon ###啟動rsyncd服務
[[email protected] ~]# netstat -anpt |grep rsync
tcp 0 0 192.168.100.131:873 0.0.0.0:* LISTEN 64194/rsync
[[email protected] ~]# chmod 777 /var/www/html/
客戶機:
[[email protected] ~]# /opt/inotify.sh
[[email protected] ~]# chmod 777 /opt/myweb/ ###需要在開一個終端
[[email protected] ~]# vi /opt/myweb/110.html ###裡面插入任意資料
源伺服器檢視:
[[email protected] ~]# ll /var/www/html/ ## 會發現這個地方會多個110.html檔案
-rwx------. 1 nobody nobody 116 3月 23 21:28 110.html