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
識別圖中二維碼,領取python全套視訊資料