rsync+inotfy/sersync實現數據實時同步

Linux下rsync+inotfy/sersync實現數據實時同步

導讀:
本文主要講解了如何利用 rsync+inotfy/sersync 實現數據實時同步的操作過程 和部分原理、參數。

本次實驗採用:
虛擬機:VMware-workstation-full-12.5.7-5813279;NAT模式
鏡像:centos7.4:CentOS-7-x86_64-DVD-1708.iso
內核:3.10.0-693.el7.x86_64

一,新建虛擬機及準備xy1,xy2

0.規劃:主機名:IP

xy1:192.168.91.131
xy2:192.168.91.132

僅列出xy1的準備配置,xy2同xy1

1.hostname:xy1

在這裏插入圖片描述

2.掛載鏡像/dev/sr0

在這裏插入圖片描述

3.配置yum源

在這裏插入圖片描述

4.設置靜態ip:192.168.91.131

在這裏插入圖片描述

5.下載vim

在這裏插入圖片描述

二,安裝rsync

(一).安裝xinetd及rsync

[root@xy1 ~]# yum install xinetd rsync -y

[root@xy2 ~]# yum install xinetd rsync -y
[root@xy2 ~]# rsync --daemon
[root@xy2 ~]# netstat -an | grep 873
在這裏插入圖片描述

(二).使用rsync備份數據

對xy1網站根目錄的/var/www/html目錄備份到xy2的/web_bak 。
服務器:xy1:192.168.91.131
客戶端:xy2:192.168.91.132

1.建立測試用戶(兩臺主機都需要操作)

[root@xy1 ~]# useradd rget1 && echo “123456” | passwd --stdin rget1
在這裏插入圖片描述
[root@xy2 ~]# useradd rget1 && echo “123456” | passwd --stdin rget1
在這裏插入圖片描述

2.對目錄賦予ACL權限:

[root@xy1 ~]# mkdir -p /var/www/html/
[root@xy1 ~]# setfacl -R -m user:rget1:rwx /var/www/html/
[root@xy1 ~]# setfacl -R -m default:rget1:rwx /var/www/html/
[root@xy1 ~]# getfacl /var/www/html
在這裏插入圖片描述

3.創建測試數據:

[root@xy1 ~]# cp -r /boot/* /var/www/html/
#複製/boot/目錄下所有內容到 /var/www/html/目錄下
在這裏插入圖片描述

4.服務端上操作:

[root@xy2 ~]# mkdir /web_bak
[root@xy2 ~]# chown rget1:rget1 -R /web_bak/

[root@xy1 ~]# rsync -avz /var/www/html/ [email protected]:/web_bak/
在這裏插入圖片描述
查看xy2上/web_bak/目錄是否同步數據
在這裏插入圖片描述

(三),使用非系統用戶備份數據

使用非系統用戶進入備份數據,依靠系統中的rsync配置文件/etc/rsyncd.conf進行備份數據,並創建備份賬戶,最終把rsync以deamon方式運行。

1.rsyncd.conf配置文件:

配置文件分爲兩部分:全局參數、模塊參數。
全局參數:對rsync服務器生效,如果模塊參數和全局參數衝突,衝突的地方模塊參數最終生效。
模塊參數:定義需要通過rsync輸出的目錄定義的參數。

2.用配置文件定義目錄輸出

服務器:xy2
客戶端:xy1

[root@xy2 ~]# vim /etc/rsyncd.conf #文件不存在,需要手動創建。
注意: #會出現因註釋不兼容的問題而導致推數據時出現報錯,配置文件需取消註釋或者註釋進行換行處理。

uid = root
gid = root
address = 192.168.91.132
poroat = 873
hosts allows = 192.168.91.0/24
use chroot = yes
max connections = 5
pid file =/var/run/rsync.pid
lock file  =/var/run/rsync.lock
log file =/var/log/rsyncd.log
motd file =/etc/rsyncd.motd

[wwwroot]
path =/web_bak/
comment = used for web-data root
read only = false
list = yes
auth users = rsyncuser
secrets file =/etc/rsync.passwd

3.創建提示文件和用戶密碼。

[root@xy2 ~]# echo “Welcome to Backup Server” > /etc/rsyncd.motd #編輯歡迎信息文件

[root@xy2 ~]# vim /etc/rsync.passwd #創建並編寫密碼文件。
rsyncuser:123456 #格式爲 用戶名:密碼。

[root@xy2 ~]# chmod 600 /etc/rsync.passwd
#密碼文件權限必須是700或者600,否則的話身份驗證會失效。

4.啓動服務(啓動rsync與xinetd服務)。

[root@xy2 ~]# systemctl start xinetd #啓動xinetd服務。
[root@xy2 ~]# systemctl enable xinetd #將xinetd服務加入開機項。
[root@xy2 ~]# rsync --daemon --config=/etc/rsyncd.conf
#加載配置文件rsyncd.conf啓動rsync服務
[root@xy2 ~]# netstat -antup | grep 873 #查看端口
在這裏插入圖片描述
***記得關防火牆或者更改規則
[root@xy2 ~]# iptables -F
[root@xy2 ~]# systemctl stop filewalld

5.測試

rsync語法: rsync 選項 目標目錄 用戶名@備份源服務器IP::共享模塊名
[root@xy1 ~]# rsync -avz /var/www/html/ [email protected]::wwwroot
在這裏插入圖片描述

6.密碼處理

新建一個文件保存好密碼,然後在rsync命令中使用–password-file指定此文件即可
[root@xy1 ~]# vim /etc/rsync.passwd #創建密碼文件,其中只需要指定密碼即可
123456

[root@xy1 ~]# chmod 600 /etc/rsync.passwd #賦予密碼文件600權限
[root@xy1~]# rsync -avz /var/www/html/ [email protected]::wwwroot --password-file=/etc/rsync.passwd
在這裏插入圖片描述

(四),腳本實現定時自動備份

[root@xy1 ~]# vim autobackup.sh #編寫腳本。

#!/bin/bash
rsync -avz /var/www/html/ [email protected]::wwwroot --password-file=/etc/rsync.passwd

[root@xy1 ~]# chmod +x autobackup.sh #賦予腳本執行權限。
[root@xy2 ~]# rm -rf /web-back/*
在這裏插入圖片描述
[root@xy1 ~]# ./autobackup.sh #測試腳本。Ojbk!
在這裏插入圖片描述
定義計劃任務實現定時備份:
方法一:
[root@xy1 ~]# echo “01 3 * * * sh /root/autobackup.sh &” >> /var/spool/cron/root
方法二:
[root@xy1 ~]# crontab -e
01 3 * * * sh /root/autobackup.sh &

三,rsync+inotify實現數據實時同步

1.修改參數

[root@xy1 ~]# ll /proc/sys/fs/inotify/
[root@xy1 ~]# cat /proc/sys/fs/inotify/max*
在這裏插入圖片描述
[root@xy1 ~]# vim /etc/sysctl.conf

fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 90000000

[root@xy1 ~]# sysctl -p
[root@xy1 ~]# cat /proc/sys/fs/inotify/max*
在這裏插入圖片描述

2.下載:inotify-tools-3.13.tar.gz

官網
百度雲鏈接:https://pan.baidu.com/s/1VKjmPPZTRXtAVZOVQAFWeQ
提取碼:2ieo

[root@xy1 ~]# wget https://sourceforge.net/projects/inotify-tools/files/inotify-tools/3.13/inotify-tools-3.13.tar.gz
在這裏插入圖片描述

3.編譯安裝

[root@xy1~]# tar -zxvf inotify-tools-3.13.tar.gz
[root@xy1 ~]# cd inotify-tools-3.13
[root@xy1 inotify-tools-3.13]# ./configure
在這裏插入圖片描述
預編譯報錯的原因是沒有安裝gcc

[root@xy1 inotify-tools-3.13]# yum install gcc* -y
[root@xy1 inotify-tools-3.13]# ./configure
[root@xy1 inotify-tools-3.13]# make && make install
[root@xy1 inotify-tools-3.13]# inotifywait -h
[[email protected]]# inotifywait -mrq -e create,move,delete,modify /var/www/html/
再打開一個xy1的僞終端,對xy1的/var/www/html/目錄進行操作
在這裏插入圖片描述
查看監聽xy1的第一個僞終端pts1,發現報告CREATE,ISDIR dir1,證明inotify起作用了!
在這裏插入圖片描述

4.實現實時同步數據

但是發現xy2的/web_bak/目錄並沒有實時同步xy1下/var/www/html/的數據,這是因爲我們沒有執行同步操作!
因此我們執行下面的操作:
[root@xy1 ~]# ssh-keygen
[root@xy1~]#ssh-copy-id [email protected]
[root@xy1 ~]# ssh 192.168.91.132
在這裏插入圖片描述

編寫腳本

[root@xy1 ~]# vim b.sh

#!/bin/bash
inotifywait -mrq -e create,move,delete,modify /var/www/html/ | while read a b c
do
    rsync -azP --delete /var/www/html/ [email protected]:/web_bak
done

[root@xy1 ~]# chmod +x b.sh
[root@xy1 ~]# ./b.sh
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
可以看到xy2的/web_bak/目錄與xy1下/var/www/html/目錄已經實現同步數據了!

優化腳本

[root@xy1 ~]# vim b.sh

#!/bin/bash
SRC=/var/www/html/
[email protected]:/web_bak

inotifywait -mrq -e create,move,delete,modify $SRC | while read a b c
    do
    	rsync -azP --delete $SRC $DST
    done

當然我們也可以用它來實現:

rsync -avP /var/www/html/ [email protected]::wwwroot --password-file=/etc/rsync.passwd

加入開機啓動項

[root@xy1 ~]# cp b.sh /opt/inotify_rsync.sh
[root@xy1 ~]# echo ‘/opt/inotify_rsync.sh &’ >> /etc/rc.local

四,rsync+sersync實現數據實時同步

(一)介紹及規劃

一臺裝sersync、一臺裝rsync服務
sersync服務器(數據源,源機器):192.168.91.131
rsync客戶端(備份端,目標機器):192.168.91.132

1.爲什麼要用rsync+sersync架構?
(1)sersync是基於inotify開發的,類似於inotify-tools的工具。
(2)sersync可以記錄下被監聽目錄中發生變化的(包括增加、刪除、修改)具體某一個文件或者某一個目錄的名字,然後使用rsync同步的時候,只同步發生變化的文件或者目錄。

2.rsync+inotify-tools與rsync+sersync架構的區別?
(1)rsync+inotify-tools
1)inotify只能記錄下被監聽的目錄發生了變化(增,刪,改)並沒有把具體是哪個文件或者哪個目錄發生了變化記錄下來。
2)rsync在同步的時候,並不知道具體是哪個文件或目錄發生了變化,每次都是對整個目錄進行同步,當數據量很大時,整個目錄同步非常耗時(rsync要對整個目錄遍歷查找對比文件),因此效率很低。

(2)rsync+sersync
1)sersync可以記錄被監聽目錄中發生變化的(增,刪,改)具體某個文件或目錄的名字。
2)rsync在同步時,只同步發生變化的文件或目錄(每次發生變化的數據相對整個同步目錄數據來說很小,rsync在遍歷查找對比文件時,速度很快),因此效率很高。

3.同步過程:
(1)在同步服務器上開啓sersync服務,sersync負責監控配置路徑中的文件系統事件變化。
(2)調用rsync命令把更新的文件同步到目標服務器。
(3)需要在主服務器配置sersync,在同步目標服務器配置rsync server(注意:是rsync服務)。

4.同步過程和原理:
(1)用戶實時的往sersync服務器上寫入更新文件數據。
(2)此時需要在同步主服務器上配置sersync服務。
(3)在另一臺服務器開啓rsync守護進程服務,以同步拉取來自sersync服務器上的數據。
(4)在另一臺服務器開啓rsync守護進程服務,使sersync push文件過來。

通過rsync的守護進程服務後可以發現,實際上sersync就是監控本地的數據寫入或更新事件,然後,在調用rsync客戶端的命令,將寫入或更新事件對應的文件通過rsync推送到目標服務器,如圖所示:
在這裏插入圖片描述

同步過程示意圖

(二)下載並配置sersync

1.下載

在google code下載sersync的可執行文件版本,裏面有配置文件與可執行文件
https://sersync.googlecode.com/files/sersync2.5.4_64bit_binary_stable_final.tar.gz(應該要翻牆,有時下載失敗,所以要本地留存一份)
鏈接:https://pan.baidu.com/s/1FJtxwlX_L3OhnqVU8RaaVw
提取碼:rg9y

2.上傳到服務器 /opt目錄下。

[root@xy1 ~]# cd /opt/ #切換工作目錄到/opt目錄下。
[root@xy1 opt]# tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz #解壓。
[root@xy1 opt]# mv GNU-Linux-x86 sersync #解壓後的文件重命名爲sersync

3.配置sersync

[root@xy1 opt]# cd sersync #切換工作目錄至sersync目錄下。
[root@xy1 sersync]# cp confxml.xml confxml.xml.bak #備份配置文件,便於二次修改
在這裏插入圖片描述
(1)更改優化sersync配置文件:
[root@xy1 sersync]# vim confxml.xml #修改配置文件中的24–28行,如下所示。

<sersync>
    <localpath watch="/var/www/html">    	#本地同步數據目錄。
        <remote ip="192.168.91.132" name="wwwroot"/>   #rsync模塊名稱

(2)修改31–34行,認證部分(rsync密碼認證)。

<rsync>
        <commonParams params="-artuz"/>
        <auth start="true" users="rsyncuser" passwordfile="/etc/rsync.passwd"/>
        <userDefinedPort start="false" port="874"/><!-- port=874 -->
        <timeout start="false" time="100"/><!-- timeout=100 -->
        <ssh start="false"/>

(3)開啓sersync守護進程同步數據
[root@xy1 sersync]# /opt/sersync/sersync2 -d -r -o /opt/sersync/confxml.xml
在這裏插入圖片描述

4.測試

(1)在xy1 /var/www/html/ 目錄 增加、刪除、或改目錄文件。
(2)看xy2 /web-back 目錄的變化
[root@xy2 web-back]# watch ls -l

可以發現xy2的/web_bak/目錄與xy1下/var/www/html/目錄的數據是實時同步的!大功告成!!!

五,總結

(一),RSYNC概述

Rsync是Linux系統下的數據鏡像備份工具,使用快速增量備份工具Remote Sync可以遠程同步,可以在不同主機之間進行同步,可實現全量備份與增量備份,保持鏈接和權限,且採用優化的同步算法,傳輸前執行壓縮,因此非常適合用於架構集中式備份或異地備份等應用。同時Rsync支持本地複製,或者與其他SSH、rsync主機同步。
官方網站:https://rsync.samba.org/

(二)RSYNC數據備份

cp,scp,ftp等命令在拷貝文件時,會先統計文件信息,如大小等,然後再進行拷貝。這樣的話在數據量較大時,統計信息可能佔用較長時間,類似Windows的複製。
而rsync是邊複製,邊統計,邊比較。

(三)Rysnc特性和優點

(1)可以鏡像保存整個目錄樹和文件系統。
(2)可以很容易做到保持原來文件的權限、時間、軟硬鏈接等等。
(3)無須特殊權限即可安裝。
(4)快速:第一次同步時 rsync 複製全部內容,但在下一次只傳輸修改過的文件。
(5)壓縮傳輸:rsync 在傳輸數據的過程中可以實行壓縮及解壓縮操作,因此可以使用更少的帶寬。
(6)安全:可以使用scp、ssh等方式來傳輸文件。
(7)支持匿名傳輸,以方便進行網站鏡象。
(8)選擇性保持:符號連接,硬鏈接,文件屬性,權限,時間等。

快速性:
第一次同步時 rsync 會將指定目錄下全部內容複製同步,但在下一次只傳輸修改過的內容。

安全性:
可以使用scp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接。
選擇性保持:符號連接,硬鏈接,文件屬性,權限,時間等。

壓縮傳輸:
rsync 在傳輸數據的過程中可以實行壓縮及解壓縮操作,因此可以使用更少的帶寬。

(四)常見備份分類

(1) 完整備份:每次備份都是從備份源將所有的文件或目錄備份到目的地。
(2) 差量備份:備份上次完全備份以後有變化的數據(他針對的上次的完全備份,他備份過程中不清除存檔屬性)。
(3) 增量備份:備份上次備份以後有變化的數據(他纔不管是那種類型的備份,有變化的數據就備份,他會清除存檔屬性)

(五)RSYNC原理

1.運行模式和端口:

(1)採用C/S模式(客戶端/服務器模式)[ 實際上是一個點到點的傳輸,直接使用rsync命令即可完成 ]
(2)rsync監聽的端口:873

2.四個名詞的解釋:

發起端:負責發起rsync同步操作的客戶機叫做發起端,通知服務器我要備份你的數據。
備份源:負責響應來自客戶機rsync同步操作的服務器叫做備份源,需要備份的服務器。
服務端:運行rsyncd服務,一般來說,需要備份的服務器。
客戶端:存放備份數據。

3.數據同步方式:

推push:一臺主機負責把數據傳送給其他主機,服務器開銷很大,比較適合後端服務器少的情況。
拉pull:所有主機定時去找一臺主機拉數據,可能就會導致數據緩慢。
推:目的主機配置爲rsync服務器,源主機週期性的使用rsync命令把要同步的目錄推過去(需要備份的機器是客戶端,存儲備份的機器是服務端)。
拉:源主機配置爲rsync服務器,目的主機週期性的使用rsync命令把要同步的目錄拉過來(需要備份的機器是服務端,存儲備份的機器是客戶端)。
兩種方案,rsync都有對應的命令來實現。

rsync命令示例說明push和pull,如圖 所示:
在這裏插入圖片描述
push和pull示意圖

4.xinetd管理Rsync工作原理,如圖 所示:

在這裏插入圖片描述
使用rsync來同步是先通過xinetd監聽873號端口,如果rsync進來的是873號端口,那麼xinetd就會通知它所管轄的rsync服務來做迴應,接下來就是rsync倆服務於之間的通訊。

5.rsync原理

rsync是怎樣知道文件是否需要備份,或者說是怎樣知道目錄或者文件被修改過的呢?
利用md5sum,來檢驗文件的完整性
在這裏插入圖片描述
此外,還會對比存檔屬性,時間戳等等信息。從而得知目錄/文件是否被修改,需要同步!

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