linux系統rsync服務器的管理與配置

一、rsync遠程同步服務器

     簡介:

          Rsync(remote synchronize)是一個遠程數據同步工具,可通過LAN/WAN快速同步多臺主機間的文件,也可以使用Rsync同步本地硬盤中的不同目錄。

          Rsync是用於取代rcp的一個工具,Rsync使用所謂的“Rsync算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。

          Rsync支持大多數的類Unix系統,無論是Linux、Solaris還是BSD上都經過了良好的測試。此外,它在Windows平臺下也有相應的版本,比較知名的有cwRsync和Sync2NAS

     特點:

          1)能更新整個目錄樹和文件系統

          2)有選擇性的保持符號連接、硬鏈接、文件屬性、權限、設備以及時間等;

          3)對於安裝來說,無任何特殊權限要求

          4)對於多個文件來說,內部流水線減少文件等待的延時

          5)能用rsh、ssh或直接端口做爲傳輸入端口

          6)支持匿名rsync同步文件,是理想的鏡像工具

     rsync命令的用法:

          基本格式:rsync [選項] 原始位置  目標位置

          常用選項:

               -a:歸檔模式,遞歸保留對象屬性,等同於-rlptgoD

               -v:顯示同步過程的詳細信息(ver)

               -z:在傳輸文件時進行壓縮

               -H:保留硬鏈接文件

               -A:保留ACL屬性信息

               --delete:刪除目標位置有而原始位置沒有的文件

               -r:遞歸模式,包含目錄及子目錄中所有文件

               -l:對於符號連接文件仍然複製爲符號連接文件

               -p:保留文件的權限標記

               -t:保留文件的時間標記

               -g:保留文件的屬組標記(僅超級用戶使用)

               -o:保留文件的屬主標記(僅超級用戶使用)

               -D:保留設備文件及其他特殊文件

     服務器端:同步源

     客戶端:發起端

     同步源的搭建方式:ssh或rsync

     訪問控制列表:

          setfacl:設置特殊權限

                   -m   添加權限

                   -x   刪除一條特殊權限

                   -b   刪除所有特殊權限

                   -R   遞歸

                   default   設置默認權限(對未來創建的文件也生效)

二、利用SSH搭建同步源

      1、服務器端:

          1)創建同步目錄,如:mkdir /var/ssh

          2)創建測試文件,如:touch /var/ssh/ssh.txt

          3)設置權限,如:

               useradd a1  #用來上傳

               useradd a2  #用來下載

               chown a1:a1 /var/ssh

     2、客戶端:

          1)創建同步目錄,如:mkdir /ssh

          2)同步服務器數據,如:rsync -avz [email protected]:/var/ssh/* /ssh

三、利用rsync搭建同步源

     1、服務器端:

          1)創建同步目錄,如:mkdir /var/rsync

          2)創建測試文件,如:touch /var/rsync/rsync.txt

          3)創建主配置文件,如:

               vim /etc/rsyncd.conf

                    use chroot = yes

                    address = 服務器IP地址    #監聽地址

                    port 873                 #監聽端口

                    log file = /var/log/rsyncd.log  #日誌文件

                    pid file = /var/run/rsyncd.pid  #pid文件

                    [share]                         #共享目錄名

                         comment = rsync share directory    #描述信息

                         path = /var/rsync          #真實目錄

                         read only = yes            #只讀

                         dont compress = *.gz *.bz2  #這兩種格式的文件傳輸過程中不壓縮

                         auth users = aa             #允許登錄用戶

                         secrets file = /etc/rsyncd_users.db    #用戶密碼文件

          4)創建賬戶文件:

               vim /etc/rsyncd_users.db

                    aa:123456

          5)開啓服務:rsync --daemon

          6)關閉服務:kill $(cat "/var/run/rsyncd.pid")

     2、客戶端

          1)創建同步目錄,如:mkdir /rsync

          2)同步服務器數據,如:

               rsync -avz [email protected]::share /rsync

               rsync -avz rsync://[email protected]/share /rsync

     

四、同步腳本

     1、基於SSH的遠程同步服務器:

          客戶端:ssh-keygen -t rsa         #生成公鑰和私鑰文件

                 ssh-copy-id [email protected]  #將公鑰文件上傳到服務器端

                 ssh [email protected]         #測試密鑰對是否成功

                 rsync -avz [email protected]:/var/ssh/* /ssh   #測試同步是否成功

     2、基於rsync的遠程同步服務器:

          客戶端: export RSYNC_PASSWORD=123456  #聲明全局變量,保存連接用戶的密碼

                  rsync -avz [email protected]::share /rsync  #測試同步是否成功

五、自動備份

     inotify

     兩個組件:inotifywait:持續監控,一有變化,立即輸出結果

              inotifywatch:收集文件系統變化情況,並在運行結果後輸出彙總的變化情況

     修改內核參數:

               max_queued_events    監控隊列

               max_user_instances   最多監控實例數

               max_user_watches     每個實例最多監控文件數

     1、單向同步

          1)rsync同步源:指備份操作的遠程服務器,也稱爲備份源。主要包括兩種:rsync源、ssh源

          2)編輯內核

               vim /etc/sysctl.conf  添加如下內容

                fs.inotify.max_queued_events = 16384

                fs.inotify.max_user_instances = 1024

                fs.inotify.max_user_watches - 1048576

               sysctl -p    #檢查sysctl.conf配置文件是否正確

          3)inotifywait -mrq -e modify,create,move,delete /var/www/html

               -m  持續監控

               -r  監控所有子對象

               -q  簡化輸出

               -e  指定監控的事件類型

          4)編寫腳本,當監控到數據變化時自動同步

               vim rsync.sh

                    #!/bin/bash

                    INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html" 

                    RSYNC_CMD="rsync -avz --delete /var/www/html [email protected]:/var/www/html" 

                    do

                         if [ $(pgrep rsync | wc -l) -le 0 ] 

                              then 

                                   $RSYNC_CMD

                         fi

                    done

     2、雙向同步   

          1)保證兩臺服務器之間可以通過ssh無密碼訪問,操作如下(這裏以root用戶爲例):

         分別在server1(192.168.1.1)和server2(192.168.1.2)下,創建密鑰

               server1:

                    ssh-keygen -t rsa

                    ssh-copy-id 192.168.1.2

               server2:

                    ssh-keygen -t rsa

                    ssh-copy-id 192.168.1.1 

          分別在兩臺機器上執行如下測試:

               ssh 192.168.1.1

               ssh 192.168.1.2

          2)安裝unison

               首先安裝ocaml,版本至少爲3.07或更高

               下載地址:http://caml.inria.fr/pub/distrib/ocaml-3.10/

               tar -zxf ocaml-3.10.2.tar.gz

               cd ocaml-3.10.2

               ./configure

               make world opt

               make install

               

               安裝unison

               下載地址:http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.13.16/

               tar -zxf unison-2.13.16.tar.gz

               cd unison-2.13.16

               make UISTYLE=text THREADS=true STATIC=true

               cp unison /usr/local/bin

          

               安裝inotify

               下載地址:http://inotify-tools.sourceforge.net

               tar xvf inotify-tools-3.14.tar.gz
               cd inotify-tools-3.14
               ./configure
               make
               make install

               ln -sv /usr/local/lib/libinotify* /usr/lib/

               unison -batch /home/server1/ ssh:192.168.10.2//home/server2

               #測試兩臺服務器之間是否可以同步文件

     

          3)編寫自動同步腳本 

               server1上創建腳本unison.sh

               vim /root/unison.sh

                    #!/bin/bash

                    ip2="192.168.1.2"

                    src2="/server1/" 

                    drt2="/server2/"

                    /usr/local/bin/inotifywait -mrq -e create,delete,modify,move $src2 | while read line

                    do 

                         /usr/local/bin/unison -batch $src2 ssh://$ip2/$drt2

                         echo -n "$line" >> /var/log/inotify.log

                         echo $(date | cut -d " " -f1-4 )   >> /var/log/inotify.log

                    done

               chmod a+x /root/unison.sh

               server2上創建腳本unison.sh

               vim /root/unison.sh

                    #!/bin/bash

                    ip1="192.168.1.1"

                    src1="/server2/" 

                    drt1="/server1/"

                    /usr/local/bin/inotifywait -mrq -e create,delete,modify,move $src1 | while read line

                    do 

                         /usr/local/bin/unison -batch $src1 ssh://$ip1/$drt1

                         echo -n "$line" >> /var/log/inotify.log

                         echo $(date | cut -d " " -f1-4 )   >> /var/log/inotify.log

                    done

               chmod a+x /root/unison.sh

               


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章