1. 程式人生 > >linux多伺服器之間的目錄檔案同步

linux多伺服器之間的目錄檔案同步

一、rsync是什麼

在開始正式學習rsync之前,我們先來回答這個問題:rsync是什麼。

rsync(remote synchronize)是Liunx/Unix下的一個遠端資料同步工具。它可通過LAN/WAN快速同步多臺主機間的檔案和目錄,並適當利用rsync演算法(差分編碼)以減少資料的傳輸。

rsync演算法並不是每一次都整份傳輸,而是隻傳輸兩個檔案的不同部分,因此其傳輸速度相當快。

除此之外,rsync可拷貝、顯示目錄屬性,以及拷貝檔案,並可選擇性的壓縮以及遞迴拷貝。

二、rsync的工作原理

1、客戶端構造FileList,FileList包含了需要與伺服器同步的所有檔案資訊對name->id(id用來唯一表示檔案例如MD5)。

2、客戶端將FileList傳送到伺服器。

3、伺服器上rsync處理客戶端發過來的FileList,構建新的NewFileList。其中根據MD5值比較,刪除伺服器上已經存在的檔案資訊對,只保留伺服器上不存在或變化的檔案。

4、客戶端得到伺服器傳送過來的NewFileList,然後把NewFileList中的檔案重新傳輸到伺服器。

三、rsync優點

rsync有以下幾個優點:

1)可以映象儲存整個目錄樹和檔案系統。

2)可以很容易做到保持原來檔案的許可權、時間、軟硬連線等。

3)無需特殊許可權即可安裝。

4)擁有優化的流程和比較高的檔案傳輸效率。

5)可以使用shell(rsh、ssh)方式來傳輸檔案。

6)支援匿名執行。

7)與scp相比,rsync傳輸速度絕對遠遠超過scp的傳輸速度。

我們在區域網中經常用rsync和scp傳輸大量mysql資料庫檔案,發現rsync傳輸檔案速度至少要比scp快20倍以上。

所以如果需要在Liunx/Unix伺服器之間互傳海量資料時,建議選擇rsync進行傳輸。

四、rsync認證方式

rsync有兩種常用的認證方式,一種是rsync-daemon方式,另外一種是ssh方式。在平時使用過程,我們使用最多的是rsync-daemon方式。

注意:在使用rsync時,伺服器和客戶端都必須安裝rsync程式。

五、開始實踐

web1:10.80.11.243
web2:10.80.11.244
code:10.80.11.245
更新code伺服器的程式碼後,自動同步到web1和web2,刪除code伺服器檔案,web1和web2也刪除
伺服器端的安裝(N臺WEB都這樣配置)

1、首先要求Linux核心在2.6以上,才支援inotify

[[email protected] html]# uname -a
Linux web1 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:35 EDT 2010 i686 i686 i386 GNU/Linux

2、檢查是否安裝rsync軟體

[[email protected] html]# rpm -qa |grep rsync
rsync-2.6.8-3.1
如果沒有的話,通過yum –y install rsync安裝

3、新建rsync配置檔案,該軟體安裝預設沒有配置檔案

#vim /etc/rsyncd.conf
motd file = /etc/rsyncd.motd
uid=root
gid=root
max connections=36000
use chroot=no
log file=/var/log/rsyncd.log
log format =  %t %a %m %f %b
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
timeout = 300


[tongbu]
path=/var/www/html
list=yes
comment = this is comment
ignore errors = yes
read only = no
hosts allow = 10.80.11.245
hosts deny = *
auth users backup
secrets file = /etc/rsyncd.secrets

注:tongbu為釋出模組,相當於路徑的別名

hosts allow是隻允許連線的IP
secrets file = /etc/rsyncd.secrets
這是密碼檔案,同步的使用者為backup,下面建立同步使用者
#useradd backup
#passwd backup
#vim /etc/rsyncd.secrets
backup:123456
格式為
使用者名稱:密碼
#chmod 600 /etc/rsyncd.secrets
設定只有root使用者才能檢視這個檔案

4、啟動服務

/usr/bin/rsync --daemon --config=/etc/rsyncd.conf

其他的WEB伺服器配置和上面是一樣的。如果需要開機啟動,加入到/etc/rc.local

釋出端的配置

1、釋出端主要利用開源軟體sersync,

網站為:

http://code.google.com/p/sersync/

#cd /usr/local/
#wget http://sersync.googlecode.com/files/sersync2.5RC1_32bit_binary.tar.gz
#tar –zxvf sersync2.5RC1_32bit_binary.tar.gz
#cd GNU-Linux-x86

2、修改配置檔案

#vim confxml.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
    <host hostip="localhost" port="8008"></host>
    <filter start="false">
         <exclude expression="(.*).gz"></exclude>
         <exclude expression="^info/*"></exclude>
    </filter>
    <inotify>
         <delete start="true"/>
         <create start="true"/>
    </inotify>
    <debug start="false"/>
    <sersync>
         <localpath watch="/var/www/html">
             <remote ip="10.80.11.243" name="tongbu"/>
             <remote ip="10.80.11.244" name="tongbu"/>
         </localpath>
         <rsync>
             <auth start="true" users="backup" passwordfile="/etc/rsync.pas"/>
             <userDefinedPort start="false" port="874"/><!-- port=874 -->
             <timeout start="false" time="100"/><!-- timeout=100 -->
             <ssh start="false"/>
         </rsync>
         <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60min execute once-->
         <crontab start="false" schedule="600"><!--600mins-->
             <crontabfilter start="false">
                   <exclude expression="*.php"></exclude>
                   <exclude expression="info/*"></exclude>
             </crontabfilter>
         </crontab>
         <plugin start="false" name="command"/>
    </sersync>

    <plugin name="command">
         <param prefix="/bin/sh" suffix="" ignoreError="true"/>        <!--prefix /opt/tongbu/mmm.sh suffix-->
         <filter start="false">
             <include expression="(.*).php"/>
             <include expression="(.*).sh"/>
         </filter>
    </plugin>

    <plugin name="socket">
         <localpath watch="/opt/tongbu">
             <deshost ip="192.168.138.20" port="8009"/>
         </localpath>
    </plugin>
    <plugin name="refreshCDN">
         <localpath watch="/data0/htdocs/cms.xoyo.com/site/">
             <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
             <sendurl base="http://pic.xoyo.com/cms"/>
             <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
         </localpath>
    </plugin>

</head>

/var/www/html為釋出伺服器的原始碼釋出目錄
主要修改紅色標記部分,密碼檔案為/etc/rsync.pas

#vim /etc/rsync.pas
123456#
解釋:123456代表的是Rsync server端的密碼,並且要以"#"做結尾。如果有多個密碼,增加多行就行。
#chmod 600 /etc/rsync.pas

3、啟動服務

#./sersync2 -d –r

這種方式常駐程序,如果需要開機啟動,加入到/etc/rc.local
這樣只要修改釋出伺服器/var/www/html的檔案,web伺服器就會自動同步。

附錄二:rsyncd.conf檔案註釋

全域性引數

uid = root//執行RSYNC守護程序的使用者

gid = root//執行RSYNC守護程序的組

use chroot = no //不使用chroot

max connections = 4 // 最大連線數為4

strict modes =yes//是否檢查口令檔案的許可權

port = 873//預設埠873

模組引數

[backup] //這裡是認證的模組名,在client端需要指定

path = /home/backup///需要做映象的目錄,不可缺少!

comment = This is a test //這個模組的註釋資訊

ignore errors//可以忽略一些無關的IO錯誤

read only = yes// 只讀

list = no //不允許列檔案

auth users = hening //認證的使用者名稱,如果沒有這行則表明是匿名,此使用者與系統無關

secrets file = /etc/rsync.pas //密碼和使用者名稱對比表,密碼檔案自己生成

hosts allow = 192.168.1.1, 10.10.10 .10//允許主機

hosts deny = 0.0.0 .0/0 //禁止主機

#transfer logging = yes

註釋:下面這些綠色檔案是安裝完RSYNC服務後自動生成的檔案

pid file = /var/run/rsyncd.pid//pid檔案的存放位置

lock file = /var/run/rsync.lock //鎖檔案的存放位置

log file = /var/log/rsyncd.log//日誌記錄檔案的存放位置 

 

原文連結:

https://blog.csdn.net/fclwd/article/details/61191519

 


linux多伺服器之間的目錄檔案同步

識別圖中二維碼,領取python全套視訊資料