天天看點

rsync遠端同步(rsync源伺服器+inotify實時同步)

文章目錄

    • 一、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同步操作的伺服器稱為同步源。

在同步過程中,同步源負責提供文檔的原始位置,發起端應對該位置有讀取權限。

如下圖:

rsync遠端同步(rsync源伺服器+inotify實時同步)
  • 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"配置注釋掉即可

rsync遠端同步(rsync源伺服器+inotify實時同步)

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子產品獨自提供服務

rsync遠端同步(rsync源伺服器+inotify實時同步)
//此處如果想要停止這個服務 ,有兩個方式:
方式一:
[[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源伺服器+inotify實時同步)

三、使用rsync備份工具

配置好rsync同步源伺服器之後,用戶端就可以使用rsync工具來執行遠端同步了。

rsync遠端同步(rsync源伺服器+inotify實時同步)

1、本地複制(類似于cp指令)

rsync遠端同步(rsync源伺服器+inotify實時同步)
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遠端同步(rsync源伺服器+inotify實時同步)
rsync遠端同步(rsync源伺服器+inotify實時同步)
rsync -avzH --delete [email protected]::wwwroot  /opt
--delete:删除目标位置有而原始位置沒有的檔案
           

在這裡把opt目錄下除了源主機的wwwroot子產品裡的檔案,其他全删除。

rsync遠端同步(rsync源伺服器+inotify實時同步)

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遠端同步(rsync源伺服器+inotify實時同步)
//客戶機同步資訊,指明密碼存放
rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt
           

免互動同步新的内容abc.html

rsync遠端同步(rsync源伺服器+inotify實時同步)

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
           

繼續閱讀