關於解決多臺伺服器間的檔案實時同步問題
最近要做一個相關的解決方案,在虛擬機器測試沒有問題。給大家分享出來,有更好的解決方案,歡迎討論。
1.1 inotify相關介紹
1、rsync
與傳統的cp、tar備份方式相比,rsync具有安全性高、備份迅速、支援增量備份等優點,通過rsync可以解決對實時性要求不高的資料備份需求,例如定期的備份檔案伺服器資料到遠端伺服器,對本地磁碟定期做資料映象等。
隨著應用系統規模的不斷擴大,對資料的安全性和可靠性也提出的更好的要求,rsync在高階業務系統中也逐漸暴露出了很多不足,首先,rsync同步資料 時,需要掃描所有檔案後進行比對,進行差量傳輸。如果檔案數量達到了百萬甚至千萬量級,掃描所有檔案將是非常耗時的。而且正在發生變化的往往是其中很少的 一部分,這是非常低效的方式。其次,rsync不能實時的去監測、同步資料,雖然它可以通過linux守護程序的方式進行觸發同步,但是兩次觸發動作一定 會有時間差,這樣就導致了服務端和客戶端資料可能出現不一致,無法在應用故障時完全的恢復資料。基於以上原因,rsync+inotify組合出現了!
2、inotify
Inotify 是一種強大的、細粒度的、非同步的檔案系統事件監控機制,linux核心從2.6.13起,加入了Inotify支援,通過Inotify可以監控檔案系統 中新增、刪除,修改、移動等各種細微事件,利用這個核心介面,第三方軟體就可以監控檔案系統下檔案的各種變化情況,而inotify-tools就是這樣 的一個第三方軟體。
在上面章節中,我們講到,rsync可以實現觸發式的檔案同步,但是通過crontab守護程序方式進行觸發,同步的資料和實際資料會有差異,而inotify可以監控檔案系統的各種變化,當檔案有任何變動時,就觸發rsync同步,這樣剛好解決了同步資料的實時性問題。
1.2 rsync+inotify同步邏輯圖
1.3 環境部署
1、下載所需的安裝包:
先把兩個包放在/usr/src/下。
2、第一臺伺服器(192.168.188.90)配置(不分主次):
a、安裝rsync:
[[email protected] ~]# cd /usr/src/
[[email protected] src]# tar zxvf rsync-3.0.9.tar.gz
[[email protected] src]# cd rsync-3.0.9
[[email protected] rsync-3.0.9]# ./configure --prefix=/usr/local/rsync
[ [email protected] rsync-3.0.9]# make
[[email protected] rsync-3.0.9]# make install
b、建立密碼認證檔案:[[email protected] rsync-3.0.9]# cd /usr/local/rsync/
[[email protected] rsync]# echo "rsync-pwd" >/usr/local/rsync/rsync1.passwd
c、給密碼檔案賦予600許可權:[[email protected] rsync]# chmod 600 rsync1.passwd
d、安裝inotify:[[email protected] rsync]# cd /usr/src/
[[email protected] src]# tar zxvf inotify-tools-3.14.tar.gz
[[email protected] src]# cd inotify-tools-3.14
[[email protected] inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify
[[email protected] inotify-tools-3.14]# make
[[email protected] inotify-tools-3.14]# make install
e、建立監控指令碼:#!/bin/bash
host=192.168.188.89
src=/root/test/
des=web
user=webuser
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files
do
/usr/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync1.passwd $src [email protected]$host::$des
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done
注意:host為第二臺伺服器IP,src為要監控的路徑,web是認證模組名稱,最後把監控指令碼命名為rsync1.sh放在要監控的路徑下。此處應是/root/test/
f、給監控指令碼賦予764許可權:
[[email protected] tmp]# chmod 764 rsync1.sh
g、建立rsync配置檔案:uid = root
gid = root
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[web]
path = /root/test/
comment = web file
ignore errors
read only = no
write only = no
hosts allow = 192.168.188.89
hosts deny = *
list = false
uid = root
gid = root
auth users = webuser
secrets file = /usr/local/rsync/rsync1.passwd
該配置檔案是用來接收另一臺伺服器的檔案。其中web是server服務端(90伺服器)的認證模組名稱,需要與90伺服器裡的一致。把配置檔案命名為rsync1.conf,放到/usr/local/rsync/目錄裡
h、啟動該配置檔案[[email protected] rsync]# /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync1.conf
需要開機啟動的話:[[email protected] rsync]# echo "/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync1.conf" >> /etc/rc.local
3、第二臺伺服器(192.168.188.89)配置(不分主次):
a、安裝rsync:
[[email protected] ~]# cd /usr/src/
[[email protected] src]# tar zxvf rsync-3.0.9.tar.gz
[[email protected] src]# cd rsync-3.0.9
[[email protected] rsync-3.0.9]# ./configure --prefix=/usr/local/rsync
[[email protected] rsync-3.0.9]# make
[[email protected] rsync-3.0.9]# make install
b、建立密碼認證檔案:[[email protected] rsync-3.0.9]# cd /usr/local/rsync/
[[email protected] rsync]# echo "rsync-pwd" >/usr/local/rsync/rsync2.passwd
c、給密碼檔案賦予600許可權:[[email protected] rsync]# chmod 600 rsync2.passwd
d、安裝inotify:[[email protected] rsync]# cd /usr/src/
[[email protected] src]# tar zxvf inotify-tools-3.14.tar.gz
[[email protected] src]# cd inotify-tools-3.14
[[email protected] inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify
[[email protected] inotify-tools-3.14]# make
[[email protected] inotify-tools-3.14]# make install
e、建立監控指令碼:#!/bin/bash
host=192.168.188.90
src=/root/test/
des=web
user=webuser
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files
do
/usr/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync2.passwd $src [email protected]$host::$des
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done
注意:host為第二臺伺服器IP,src為要監控的路徑,web是認證模組名稱,最後把監控指令碼命名為rsync2.sh放在要監控的路徑下。此處應是/root/test/
f、給監控指令碼賦予764許可權:
[[email protected] tmp]# chmod 764 rsync2.sh
g、建立rsync配置檔案:uid = root
gid = root
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[web]
path = /root/test/
comment = web file
ignore errors
read only = no
write only = no
hosts allow = 192.168.188.90
hosts deny = *
list = false
uid = root
gid = root
auth users = webuser
secrets file = /usr/local/rsync/rsync2.passwd
該配置檔案是用來接收另一臺伺服器的檔案。其中web是server服務端(90伺服器)的認證模組名稱,需要與90伺服器裡的一致。把配置檔案命名為rsync2.conf,放到/usr/local/rsync/目錄裡
h、啟動該配置檔案[[email protected] rsync]# /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync2.conf
需要開機啟動的話:[[email protected] rsync]# echo "/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync2.conf" >> /etc/rc.local
4、最後啟動兩臺伺服器的監控指令碼:
a、在90伺服器:
[[email protected] tmp]# sh /root/test/rsync1.sh &
需要開機啟動的話:[[email protected] tmp]# echo "/root/test/rsync1.sh" >> /etc/rc.local
b、在89伺服器:[[email protected] tmp]# sh /root/test/rsync2.sh &
需要開機啟動的話:[[email protected] tmp]# echo "/root/test/rsync2.sh" >> /etc/rc.local
1.4測試
任意在其中一臺伺服器/root/test/路徑下,新增一個檔案,你會發現另一臺伺服器也同步了該檔案。
同步之後,兩臺伺服器下都會有rsync1.sh和rsync2.sh監控指令碼,注意勿刪!
如果需要3臺或3臺以上的伺服器之間進行同步,則需要更改shell指令碼,方法類似。
(如果有任何問題,歡迎評論。轉載請標明出處!謝謝配合。)
Author---BlackHan
相關推薦
關於解決多臺伺服器間的檔案實時同步問題
最近要做一個相關的解決方案,在虛擬機器測試沒有問題。給大家分享出來,有更好的解決方案,歡迎討論。 1.1 inotify相關介紹 1、rsync 與傳統的cp、tar備份方式相比,rsync具有安全性高、備份迅速、支援增量備份等優點,通
Linux伺服器間檔案實時同步的實現
使用場景 現有伺服器A和伺服器B,如果伺服器A的指定目錄(例如 /home/paul/rsync/ )中的內容發生變更(增刪改和屬性變更),實時將這些變更同步到伺服器B的目標目錄中(例如 /home/paul/rsync/ )。 資料映象備份工具Rsync Rsy
如何實現Linux多臺伺服器間的檔案雙向同步
Linux系統間檔案雙向同步搭建Unison版 一、Unison簡介 Unison是Windows、Linux以及其他Unix平臺下都可以使用的檔案同步工具,它能使兩個資料夾(本地或網路上的)保持內容的一致。Unison擁有與其它一些同步工具或檔案系統的相同的特性,但也有自身的特點: 1.跨平臺
Linux多臺伺服器間SSH免密碼登入配置
SSH實現各個伺服器間的檔案相互備份,如執行scp命令,可以實現免密碼登入,從而可以使用SHELL指令碼實現一些自動化的處理。 假如A機要免密碼登入B機,具體方法如下: 1、在A機執行:"ssh-keygen -t rsa" 命令,建立公鑰資訊 #ssh-keygen
centos6.5 rsync+inotify實現伺服器之間檔案實時同步
1. rsync的優點與不足 與傳統的cp、tar備份方式相比,rsync具有安全性高、備份迅速、支援增量備份等優點,通過rsync可以解決對實時性要求不高的資料備份需求,例如定期的備份檔案伺服器資料到遠端伺服器,對本地磁碟定期做資料映象等。 隨著應用系統規模的不斷擴大,對資料的安全性和可靠性也提出的更好的
rsync+inotify實現伺服器之間檔案實時同步
之前做了“ssh信任與scp自動傳輸指令碼”的技術文件,此方案是作為公司裡備份的方法,但在實際的執行中,由於主伺服器在給備份伺服器傳輸的時候,我們的主伺服器需要備份的檔案是實時、不停的產生的,造成不知道主伺服器給備份伺服器傳輸了多少檔案,磁碟空間就那麼大,做備份的原因:一個是為了保持檔案,另外一個是解決主伺
多臺伺服器間無密碼訪問
多臺伺服器相互無密碼訪問,與兩臺伺服器單向無密碼訪問的原理是一樣的,只不過由於是多臺伺服器之間相互無密碼訪問,不能象兩臺伺服器無密碼登入那樣直接上傳,步驟如下: 1、在每臺伺服器上都執行ssh-keygen -t rsa生成金鑰對: #ssh-keyge
關於解決多臺linux伺服器間的檔案實時同步問題
最近要做一個相關的解決方案,在虛擬機器測試沒有問題。給大家分享出來,有更好的解決方案,歡迎討論。 1.1 inotify相關介紹 1、rsync 與傳統的cp、ta
linux下rsync+inotify實現兩臺伺服器檔案實時同步
假設兩個伺服器: 192.168.0.1 源伺服器 有目錄 /opt/test/ 192.168.0.2 目標伺服器 有目錄 /opt/bak/test/ 實現的目的就是保持這兩個伺服器某個檔案目錄保持實時同步 實現方式: 通過rsync+inotify-too
【Windows】Windows伺服器之間實現檔案實時同步?
Windows伺服器之間實現檔案實時同步? 做公安專案,要實現內外網檔案同步,需要用到同步工具。有一個工具叫 “前置機”。 前置機的原理不是很清楚,應該是通過地址對映過去,然後跟公安內網某個內網IP伺
伺服器架構inotify+rsync檔案實時同步
釋出伺服器上下載 wget https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz 在程式碼釋出伺服器上安裝inotify,執行如下命令 tar xzvf inotify-tools-3.14.t
多臺伺服器檔案分發指令碼和命令執行指令碼
背景:基於hadoop的分散式部署 (具體請看文章),為了方便檔案的分發與命令的執行,顧編制此指令碼 伺服器配置四臺:(h101 192.168.44.101)(h102 192.168.44.102)(h103 19
多臺伺服器之間如何讓sqlserver,mysql資料庫進行資料同步?
伺服器儲存視訊,頻寬不夠用,想用多臺伺服器,如何讓所有伺服器之間視訊實時同步,可以用什麼軟體!當企業租用伺服器,但是在資料同步的時候,又有著嚴格的要求,要求資料達到一致,在科技發達的今天,這又該如何做到了?下面天下資料為大家介紹多臺伺服器之間讓資料同步的方法! 1、採用高可用sureHA軟體映象型,一臺
mysql多臺伺服器資料同步
這兩天在搞MySQL 資料同步問題,這配置很繁瑣。我這裡用了兩臺機子做測試, 都是我本地的機子.分別是 主伺服器 192.168.0.118 從伺服器 192.168.0.187 1. 首先在 主從伺服器分別建立資料庫 backup_db和backup_table
基於shell實現向多臺伺服器拷貝hosts檔案
寫這個指令碼的目的是在生產環境中向多個伺服器拷貝hosts檔案,能滿足自己的使用要求。 github: https://github.com/charnet1019/auto-scp-files.git 注意: 需要安裝expect #!/bin/bash ####
【甘道夫】拷貝檔案到多臺伺服器的Shell指令碼
在多機叢集環境中,經常面臨修改配置檔案後拷貝到多臺伺服器的情況,傳統的執行scp比較麻煩,所以寫了以下shell指令碼,可以將指定檔案拷貝到多臺機器。 使用方法請參見HELP部分程式碼。 #!/bin/bash help() { cat << HEL
shell-scp分發資料夾下所有檔案到多臺伺服器
#!/usr/bin/expect -f #chmod 777 distribute_file.sh #把所有目的ip寫入ipfile.txt檔案,ipfile.txt檔案與distribute_fil
C#使用互斥量(Mutex)實現多進程並發操作時多進程間線程同步操作(進程同步)
互斥 空字符 示例 logfile format ror var mutex類 www 本文主要是實現操作系統級別的多進程間線程同步(進程同步)的示例代碼及測試結果。代碼經過測試,可供參考,也可直接使用。 承接上一篇博客的業務場景[C#使用讀寫鎖三行代碼簡單解決多線程並發
Linux多臺主機間配置SSH免密登陸
包含 生成 目錄 apt 裏的 html .cn 密碼 查看 1.安裝ssh. sudo apt-get install ssh. 安裝完成後會在~目錄(當前用戶主目錄,即這裏的/home/xuhui)下產生一個隱藏文件夾.ssh(ls -a 可以查看隱藏文件)。如果沒有
多臺服務器文件同步實現
創建目錄 zed error host 屬組 殺死 dup comm read 一、rsync特性 可以鏡像保存整個目錄樹和文件系統。 可以很容易做到保持原來文件的權限、時間、軟硬鏈接等等。 無須特殊權限即可安裝。 快速:第一次同步時rsync會復制全部內容,但在下