目錄
1. 遠端檔案同步的應用場景 2. rsync+crontab 3. rsync+inotify
1. 遠端檔案同步的應用場景
在負載均衡叢集的應用場景中,往往在多臺web server的前端有一個提供負載均衡的Load Balance Server
1. 客戶端的通過訪問一個統一的域名到這個Load Balance上,例如:www.test.com,Load Balance Server會根據負載排程演算法將請求合理地分配到叢集的子節點中 2. 客戶端上傳的檔案同樣也會被Load Balance Server"隨機"的分配到叢集中的一臺節點伺服器中
這就造成了一個問題,如何來保證叢集各個子節點伺服器的狀態、資料一致性,即我們保證客戶端能夠像對待單點那樣去上傳、並下載檔案,這就需要在叢集的各個子節點之間進行雙向的資料同步
2. rsync+crontab
rsync(remote sync)是類unix系統下的資料映象備份工具。一款快速增量備份工具 Remote Sync,遠端同步 支援本地複製,或者與其他SSH、rsync主機同步
0x1: rsync特點
1. 可以映象儲存整個目錄樹和檔案系統 2. 可以很容易做到保持原來檔案的許可權、時間、軟硬連結 3. 無須特殊許可權即可安裝 4. 快速 1) 第一次同步時 rsync 會複製全部內容,但在下一次只傳輸修改過的檔案,即增量備份 2) rsync 在傳輸資料的過程中可以實行壓縮及解壓縮操作,因此可以使用更少的頻寬 5. 安全 1) 可以使用scp、ssh等方式來傳輸檔案 2) 可以通過直接的socket連線 6. 支援匿名傳輸,以方便進行網站鏡象
瞭解了rsync的基本概念之後,我們來學習一下如何配置rsync服務,從本質上來說,rsync是C/S架構的服務體系,我們只能實現client從server端拉取資料,所以我們如果要在多臺伺服器之間進行雙向備份,則每一臺伺服器即是server,又是clinet
0x2: rsync服務安裝配置
1. 部署rsync服務端
1. 安裝超級守護程式 yum –y install xinetd 2. 為rsync服務提供配置檔案 vim /etc/rsyncd.conf #Global Settings uid = nobody gid = nobody use chroot = no max connections = 5 timeout = 600 pid file = /var/run/rsyncd.pid lockfile = /var/run/rsyncd.lock log file = /var/log/rsyncd.log #module [zhenghan] path = /opt/backup/ ignore errors = yes read only = no write only = no hosts allow = * hosts deny = * list = yes uid = root gid = root auth users = zhenghan secrets file = /etc/zhenghan.passwd 3. 配置rsync認證檔案(如果不需要密碼則不需要配置) vim /etc/zhenghan.passwd echo "zhenghan:zhenghan" > /etc/zhenghan.passwd cat /etc/zhenghan.passwd zhenghan:zhenghan 4. 修改/etc/chandao.passwd的許可權為600 chmod 600 /etc/zhenghan.passwd 5. 配置服務啟動 chkconfig rsync on service xinetd start 6. 檢查873埠是否成功監聽 ss -antlp | grep 873 7. 檢查rsync執行狀態 chkconfig --list
2. 部署rsync客戶端
1. 設定rsync客戶端的密碼檔案 1) 密碼檔案 echo zhenghan > /etc/zhenghan.passwd 2) 資料庫的密碼檔案 echo zhenghan > /etc/db_zhenghan.passwd 2. 修改密碼檔案的的許可權為600 chmod 600 /etc/zhenghan.passwd chmod 600 /etc/db_zhenghan.passwd 3. 測試rsync客戶端是否可以從rsync伺服器拉成功 rsync -vzrtopg --password-file=/etc/zhenghan.passwd zhenghan@192.168.200.16::zhenghan/* /tmp 4. rsync同步指令碼 #!/bin/bash #func:rsync for zhenghan #Version:v1.0 ntpdate 192.168.200.16 > /dev/null 2>&1 date=`date +%Y-%m-%d` dest_chandao=/opt/backup/zhenghan/test dest_db=/opt/backup/zhenghan/db_zhenghan remote_zhenghan=192.168.200.16 remote_db=192.168.200.18 module_zhenghan=zhenghan module_db=db_zhenghan user1=zhenghan@139.com main() { rsync -vzrtopg --password-file=/etc/zhenghan.passwd zhenghan@$remote_zhenghan::$module_zhenghan/*$date* $dest_zhenghan if [ $? -eq 0 ];then echo "zhenghan-*$date* was rsynced" >> /opt/log/zhenghan_rsync.log 2>&1; else echo "zhenghan-*$date* was not rsynced" >> /opt/log/zhenghan_rsync.log 2>&1; echo "zhenghan rsync was faild " | mail -s "zhenghan backup" $user2; fi rsync -vzrtopg --password-file=/etc/db_zhenghan.passwd zhenghan@$remote_db::$module_db/*$date* $dest_db if [ $? -eq 0 ];then echo "db_zhenghan_*$date* was rsynced" >> /opt/log/zhenghan_rsync.log 2>&1; else echo "db_zhenghan_*$date* was not rsynced" >> /opt/log/zhenghan_rsync.log 2>&1; echo "db_zhenghan rsync was faild " | mail -s "zhenghan backup" $user2; fi } main
3. 定時任務
rsync是一個C/S的架構,服務端和客戶端配置好之後,通常的做法是使用crontab定時任務在client上從server上"拉取"資料
crontab -e ##rsync for zhenghan 20 09 * * * /bin/sh /opt/scripts/rs_zhenghan.sh
0x3: 示例
使用2臺linux機器進行雙擊互備份的實驗
1. CentOS 5 192.168.207.151 //從192.168.207.145增量(加/減)備份"/opt/apache/htdocs/vulfiles"這個目錄,到本地[vulfiles]節點(由配置檔案決定具體本機目錄) * * * * * rsync -vzrtopg --progress 192.168.207.145::vulfiles /opt/apache/htdocs/vulfiles 2. Red Hat Enterprice Linux 5 192.168.207.145 //從192.168.207.151增量(加/減)備份"/opt/apache/htdocs/vulfiles"這個目錄,到本地[vulfiles]節點(由配置檔案決定具體本機目錄) * * * * * rsync -vzrtopg --progress 192.168.207.151::vulfiles /opt/apache/htdocs/vulfiles
Relevant Link:
http://baike.baidu.com/link?url=EDZps6hVI-m9hmOcS5bbX9ARL2PmJ1V6ugHWeCDJp7Yz_40MnTLl0wrIMmpQOobqpL6OHfVTYZMwgJF8xE_I3a http://nmshuishui.blog.51cto.com/1850554/1532927
3. rsync+inotify
0x1: rsync+inotify的優點
1. 在資料量非常大的情況下,傳統的任務計劃,rsync都會先去遍歷目標目錄,把所有資料做一次特徵碼比對,然後進行差量傳輸,這個過程會是很漫長的,對於那些要求實時性更新比較高的企業來說,無疑是一場噩夢 2. Inotify 是一種強大的、細粒度的、非同步的檔案系統事件監控機制,linux核心從2.6.13起,加入了Inotify支援,通過Inotify可以監控檔案系統中新增、***,修改、移動等各種細微事件,利用這個核心介面,第三方軟體就可以監控檔案系統下檔案的各種變化情況,而inotify-tools就是這樣的一個第三方軟體 3. 伺服器效能 1) rsync+crontab會定時去檢查是否有檔案更新,這勢必會造成伺服器效能下降 2) rsync+inotify組合是觸發式更新,只有在資料檔案有變化時,才會去更新,因此相對前者而言,是提高了伺服器效能 4. 資料實時性 1) rsync+crontab是週期性任務計劃,不能保證資料的實時性 2) rsync+inotify組合是觸發式更新,只要有資料變化,就立刻同步更新
0x2: rsync+inotify安裝配置
rsync+inotify和rsync+crontab最大的差別在於同步的觸發條件,即同步命令的發起條件不同,rsync+inotify是通過linux的inotify機制去實時地觸發雙向檔案同步
Relevant Link:
http://nmshuishui.blog.51cto.com/1850554/1387048
Copyright (c) 2014 LittleHann All rights reserved