rsync遠程同步(rsync源服務器+inotify實時同步)

一、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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章