linux多服務器之間的目錄文件同步

1、rsync是什麼

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

rsync(remote synchronize)是Liunx/Unix下的一個遠程數據同步工具。它可經過LAN/WAN快速同步多臺主機間的文件和目錄,並適當利用rsync算法(差分編碼)以減小數據的傳輸。html

rsync算法並非每一次都整份傳輸,而是隻傳輸兩個文件的不一樣部分,所以其傳輸速度至關快。java

除此以外,rsync可拷貝、顯示目錄屬性,以及拷貝文件,並可選擇性的壓縮以及遞歸拷貝。python

2、rsync的工做原理

一、客戶端構造FileList,FileList包含了須要與服務器同步的全部文件信息對name->id(id用來惟一表示文件例如MD5)。mysql

二、客戶端將FileList發送到服務器。linux

三、服務器上rsync處理客戶端發過來的FileList,構建新的NewFileList。其中根據MD5值比較,刪除服務器上已經存在的文件信息對,只保留服務器上不存在或變化的文件。web

四、客戶端獲得服務器發送過來的NewFileList,而後把NewFileList中的文件從新傳輸到服務器。算法

3、rsync優勢

rsync有如下幾個優勢:sql

1)能夠鏡像保存整個目錄樹和文件系統。shell

2)能夠很容易作到保持原來文件的權限、時間、軟硬鏈接等。

3)無需特殊權限便可安裝。

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

5)可使用shell(rsh、ssh)方式來傳輸文件。

6)支持匿名運行。

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

咱們在局域網中常常用rsync和scp傳輸大量mysql數據庫文件,發現rsync傳輸文件速度至少要比scp快20倍以上。

因此若是須要在Liunx/Unix服務器之間互傳海量數據時,建議選擇rsync進行傳輸。

4、rsync認證方式

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

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

5、開始實踐

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

一、首先要求Linux內核在2.6以上,才支持inotify

[root@web1 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

二、檢查是否安裝rsync軟件

[root@web1 html]# rpm -qa |grep rsync
rsync-2.6.8-3.1
若是沒有的話,經過yum –y install rsync安裝

三、新建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用戶才能查看這個文件

四、啓動服務

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

其餘的WEB服務器配置和上面是同樣的。若是須要開機啓動,加入到/etc/rc.local

發佈端的配置

一、發佈端主要利用開源軟件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

二、修改配置文件

#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

三、啓動服務

#./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全套視頻資料

相關文章
相關標籤/搜索