Server Data Synchronization Via Linux rsync、rsync+inotify Between Load Balance Server

Andrew.Hann發表於2014-12-28

目錄

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

 

相關文章