linux下數據實時同步的軟件公認用rsync工具來實現,雖然目前維護的服務器還沒達到必須要配置rsync軟件去實現,但有必要整理這篇網絡轉載的文章,供大家參考和學習。
對於選擇Linux 作爲應用平臺的的中小型企業或網站來說,往往面臨如何實現數據遠程備份或者網站鏡象的問題,雖然有商業化的備份和鏡象產品可供選擇,但這些產品的價格往往過於昂貴。因此如何利用自由軟件高效實現遠程備份和網站鏡象就成爲一個值得討論的話題。
通過網絡進行遠程數據備份或者網站鏡象的最簡單的方法就是使用wget,但是這種方式每次都需要將所有數據都重新在網絡上傳輸一遍,而不考慮哪些文件是經過更新的,因此效率非常低下。尤其在需要備份的數據量很大的時候,往往需要花費數個小時來在網絡上進行數據傳輸。
因此這裏就介紹一種高效的網絡遠程備份和鏡象工具-rsync,它可以滿足絕大多數要求不是特別嚴格的備份需求。
rsync的備份:
特點: 可以鏡像保存整個目錄樹和文件系統。
可以很容易做到保持原來文件的權限、時間、軟硬鏈接等等。
無須特殊權限即可安裝。
優化的流程,文件傳輸效率高。
可以使用rcp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接。
支持匿名傳輸,以方便進行網站鏡象
需求:用rsync完成異地文件的同步
難點:如何建立異地信任關係
實現功能:當用戶在本地客戶端某目錄內建立、修改、刪除目錄或文件、修改目錄或文件的屬性,只要執行相同的shell腳本,
rsync就會自動找出有改動或刪除的數據,將其傳送到服務器上,使服務器端某目錄內的數據跟本地客戶端某目錄內的數據保持一致.
必須在服務器A和B上都安裝rsync, 其中A服務器上是以服務器模式運行rsync, 而B上則以客戶端方式運行rsync.
這樣在web服務器A上運行rsync守護進程, 在B上定時運行客戶程序來備份web服務器A上需要備份的內容.
# 實例分析
假設有兩臺服務器:A和B
A是主web服務器 www.ritto.cn (192.168.4.24)
B服務器是備份機 backup.ritto.cn (192.168.4.41)
其中A的web內容存放在以下幾個地方:
/data/web/
/home/web_user1/
/home/web_user2/
我們需要在備份機B上建立對這幾個目錄內容的備份.
# 服務器端配置 (192.168.4.41_backupserver)
# rsync安裝.
- yum install rsync
- groupadd www
- useradd -g www www
- mkdir -p /data/backup/rsync/web/
- mkdir -p /data/backup/rsync/web_user1/
- mkdir -p /data/backup/rsync/web_user2/
- chmod -R +w /data/backup/rsync/
- chown -R www:www /data/backup/rsync/
# 編輯rsync的配置文件.
vim /etc/rsyncd.conf
- uid = www
- gid = www
- max connections = 5
- use chroot = no
- log file = /var/log/rsyncd.log
- pid file = /var/run/rsyncd.pid
- lock file = /var/run/rsyncd.lock
- [web]
- path = /data/backup/rsync/web/
- comment = website web
- ignore errors
- read only = no
- list = false
- [web_user1]
- path = /data/backup/rsync/web_user1/
- ignore errors
- read only = no
- list = false
- [web_user2]
- path = /data/backup/rsync/web_user2/
- ignore errors
- read only = true
- list = false
- # hosts allow = 192.168.4.0/24
- # hosts allow=192.168.4.41 10.0.0.22
- # hosts deny = 0.0.0.0/32
- # auth users = www
- # secrets file = /etc/rsync.pass
# 更改密碼文件
# vim /etc/rsync.pass
# www:www //用戶名和密碼
# chmod 600 /etc/rsync.pass
# 啓動rsync服務器端, 在web服務器A上運行(rsync默認服務端口873):
vim /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 873 -j ACCEPT
/usr/bin/rsync –daemon
# 查看rsync是否啓動
ps -ef | grep rsync
lsof -i:873
# 如果要在啓動時把服務起來:
echo “/usr/bin/rsync –daemon” >> /etc/rc.local
# 客戶端配置 (192.168.4.24_web服務器)
- vim push.sh
- #!/bin/sh
- /usr/bin/rsync -vzrtopg –delete /data/web/ 192.168.4.41::web/ > /dev/null 2>&1
- /usr/bin/rsync -vzrtopg –delete /home/web_user1/ 192.168.4.41::web_user1/ > /dev/null 2>&1
- /usr/bin/rsync -vzrtopg –delete /home/web_user2/ 192.168.4.41::web_user2/ > /dev/null 2>&1
//前面藍色部分爲本要要推送的目錄,紅色部分爲服務端rsyncd.conf中配置的模塊名.
//-vzrtopg裏的v是verbose,z是壓縮,r是recursive,topg都是保持文件原有屬性如屬主、時間的參數.
// –progress是指顯示出詳細的進度情況,–delete是指如果服務器端刪除了這一文件,那麼客戶端也相應把文件刪除,保持真正的一致.
chmod +x ./push.sh
./push.sh //如果更改的文件較大,可以在後面加一個&;