Linux系統下 Rsync 環境安裝搭建


一、Rsync簡介
1、認識
Rsync(remote synchronize)是一個遠程數據同步工具,可通過LAN/WAN快速同步多台主機間的文件。Rsync使用所謂的“Rsync算法”來使本地和遠 程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快
Rsync支持大多數的類Unix系統,無論是Linux、Solaris還是BSD上都經過了良好的測試
此外,它在windows平台下也有相應的版本,如cwRsync和Sync2NAS等工具
2、原理
Rsync本來是用於替代rcp的一個工具,目前由rsync.samba.org維護,所以rsync.conf文件的格式類似於samba的主配 置文件;Rsync可以通過rsh或ssh使用,也能以daemon模式去運行
在以daemon方式運行時Rsync server會打開一個873 端口,等待客戶端去連接。連接時,Rsync server會檢查口令是否相符,若通過口令查核,則可以開始進行文件傳輸。第一次連通完成時,會把整份文件傳輸一次,以后則就只需進行增量備份
3、特點
1、可以鏡像保存整個目錄樹和文件系統;
2、可以很容易做到保持原來文件的權限、時間、軟硬鏈接等;
3、無須特殊權限即可安裝;
4、優化的流程,文件傳輸效率高;
5、可以使用rsh、ssh等方式來傳輸文件,當然也可以通過直接的socket連接;
6、支持匿名傳輸
 
二、Rsync安裝(手動下載安裝)

 2.1:rsync下載  https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz

   cd /home/software
   wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz
   tar -zxvf rsync-3.1.2.tar.gz

  2.2:安裝rsync

  cd rsync-3.1.2
  ./configure --prefix=/usr/local/rsync
  make
  make install

2.3:配置rsync-server

  2.3.1:配置rsyncd.conf    (手動創建    touch /usr/local/rsync/rsyncd.conf )

    vim /usr/local/rsyncd.conf

    ### 全局參數 ###

    port=873
    motd file=/usr/local/rsync/rsyncd.motd
    log file=/usr/log/rsyncd.log
    pid file=/var/run/rsyncd.pid

    ### 模塊參數 ###

    [hometest]
    path=/home/test
    use chroot=true
    uid=0
    gid=0
    read only=false
    exclude=/readme.txt /runtime
    auth users=markdeng
    secrets file = /usr/local/rsync/rsyncd.secrets

  2.3.2:配置rsyncd.secrets(手動創建    touch /usr/local/rsync/rsyncd.secrets ) //此文件權限必須設置:600

    vim /usr/local/rsync/rsyncd.secrets

    markdeng:123
    dxh:321

        chmod 600 /usr/local/rsync/rsyncd.secrets

  2.3.3:配置rsyncd.motd  (手動創建  touch /usr/local/rsync/rsyncd.motd )

    vim /usr/local/rsync/rsyncd.motd

    welcome use rsync service

    2.3.4:啟動rsyncd

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

    2.3.5:查看rsyncd進程

      ps aux | grep rsyncd

   

三、Rsync安裝(yum安裝)

  3.1安裝運行:

1  yum -y install rsync 
2    #啟動rsync服務
3  systemctl start rsyncd.service
4  systemctl enable rsyncd.service
5 
6    #檢查是否已經成功啟動
7  netstat -lnp|grep 873

  好了,好了。安裝成功。

  3.2配置:
  首先,配置文件在:
  /etc/rsyncd.conf

1 vim /etc/rsyncd.conf

  看到:

  好了,先修改成:

 1 uid = root 
 2 # //設置運行rsync 進程的用戶
 3 gid = root
 4 use chroot = no
 5 max connections = 4
 6 # pid file = /var/run/rsyncd.pid 
 7 #//CentOS7中yum安裝不需指定pid file 否則報錯
 8 lock file=/var/run/rsyncd.lock
 9 log file = /var/log/rsyncd.log 
10 # //此文件定義完成后系統會自動創建
11 exclude = lost+found/
12 transfer logging = yes
13 timeout = 900
14 ignore nonreadable = yes 
15 # //同步時跳過沒有權限的目錄
16 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 
17 # //傳輸時不壓縮的文件

 

 

  3.3重啟:

1 systemctl restart rsyncd.service

   

  3.4查看rsyncd進程

      ps aux | grep rsyncd

 

四、Rsync使用-ssh模式
1、本地間同步
環境: 172.16.22.12
# mkdir src
# touch src/{1,2,3,4}
# mkdir dest
# rsync -av src/ dest/ --將 src 目錄里的所有的文件同步至 dest 目錄(不包含src本身)
# rsync -av src dest/ --將 src 目錄包括自己整個同步至 dest 目錄
# rsync -avR src/ dest/ --即使 src 后面接有 / ,效果同上
2、局域網間同步
環境: 172.16.22.11
# mkdir src
# touch src/{a,b,c,d}
# mkdir dest
# rsync -av 172.16.22.12:/data/test/src/ dest/ --遠程同步至本地,需輸入root密碼
# rsync -av src/ 172.16.22.12:/data/test/dest/ --本地文件同步至遠程
# rsync -av src 172.16.22.12:/data/test/dest/ --整個目錄同步過去
# rm -rf src/d --刪除一個文件 d
# rsync -av --delete src/ 172.16.22.12:/data/test/dest/ --delete,從目標目錄里面刪除無關的文件
3、局域網指定用戶同步
--172.16.22.12
# useradd george
# passwd george
# mkdir /home/george/test
# touch /home/george/test/g{1,2,3,4}
--172.16.22.11
# rsync -av src '-e ssh -l george' 172.16.22.12:/home/george --本地同步至遠程
# rsync -av 172.16.22.12:/home/george/test/g* '-e ssh -l george -p 22' dest/
 
五、Rsync使用-daemon模式
環境:192.168.22.11
1、服務啟動方式
1.1、對於負荷較重的 rsync 服務器應該使用獨立運行方式
# yum install rsync xinetd --服務安裝
# /usr/bin/rsync --daemon
1.2、對於負荷較輕的 rsync 服務器可以使用 xinetd 運行方式
# yum install rsync xinetd --服務安裝
# vim /etc/xinetd.d/rsync --配置托管服務,將下項改為 no
disable = no
# /etc/init.d/xinetd start --啟動托管服務 xinetd
# chkconfig rsync on
# netstat -ntpl | grep 873 --查看服務是否啟動
 
2、配置詳解
兩種 rsync 服務運行方式都需要配置 rsyncd.conf,其格式類似於 samba 的主配置文件
全局參數
在全局參數部分也可以定義模塊參數,這時該參數的值就是所有模塊的默認值
address --在獨立運行時,用於指定的服務器運行的 IP 地址;由 xinetd 運行時將忽略此參數,使用命令行上的 –address 選項替代。默認本地所有IP
port --指定 rsync 守護進程監聽的端口號。 由 xinetd 運行時將忽略此參數,使用命令行上的 –port 選項替代。默認 873
motd file --指定一個消息文件,當客戶連接服務器時該文件的內容顯示給客戶
pid file --rsync 的守護進程將其 PID 寫入指定的文件
log file --指定 rsync 守護進程的日志文件,而不將日志發送給 syslog
syslog facility --指定 rsync 發送日志消息給 syslog 時的消息級別
socket options --指定自定義 TCP 選項
lockfile --指定rsync的鎖文件存放路徑
timeout = 600 --超時時間
模塊參數
模塊參數主要用於定義 rsync 服務器哪個目錄要被同步。模塊聲明的格式必須為 [module] 形式,這個名字就是在 rsync 客戶端看到的名字,類似於 Samba 服務器提供的共享名。而服務器真正同步的數據是通過 path 來指定的
基本模塊參數
path --指定當前模塊在 rsync 服務器上的同步路徑,該參數是必須指定的
comment --給模塊指定一個描述,該描述連同模塊名在客戶連接得到模塊列表時顯示給客戶
模塊控制參數
use chroot = --默認為 true,在傳輸文件之前首先 chroot 到 path 參數所指定的目錄下;優點,安全;缺點,需要 root 權限,不能備份指向 path 外部的符號連接所指向的目錄文件
uid = --指定該模塊以指定的 UID 傳輸文件;默認nobody
gid = --指定該模塊以指定的 GID 傳輸文件;默認nobody
max connections --最大並發連接數,0為不限制
lock file --指定支持 max connections 參數的鎖文件。默認 /var/run/rsyncd.lock
list --指定當客戶請求列出可以使用的模塊列表時,該模塊是否應該被列出。默認為 true,顯示
read only = --只讀選擇,也就是說,不讓客戶端上傳文件到服務器上。默認true
write only = --只寫選擇,也就是說,不讓客戶端從服務器上下載文件。默認false
ignore errors --忽略IO錯誤。默認true
ignore nonreadable --指定 rysnc 服務器完全忽略那些用戶沒有訪問權限的文件。這對於在需要備份的目錄中有些不應該被備份者獲得的文件時是有意義的。 false
timeout = --該選項可以覆蓋客戶指定的 IP 超時時間。從而確保 rsync 服務器不會永遠等待一個崩潰的客戶端。對於匿名 rsync 服務器來說,理想的數字是 600(單位為秒)。 0 (未限制)
dont compress --用來指定那些在傳輸之前不進行壓縮處理的文件。該選項可以定義一些不允許客戶對該模塊使用的命令選項列表。必須使用選項全名,而不能是簡稱。當發生拒絕某個選項的情況時,服務器將報告錯誤信息然后退出。例如,要防止使用壓縮,應該是:”dont compress = *”。 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
模塊文件篩選參數
exclude --指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到 exclude 列表中。這等同於在客戶端命令中使用 –exclude 來指定模式
exclude from --指定一個包含 exclude 規則定義的文件名,服務器從該文件中讀取 exclude 列表定義
include --指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到 include 列表中。這等同於在客戶端命令中使用 –include 來指定模式
include from --指定一個包含 include 規則定義的文件名,服務器從該文件中讀取 include 列表定義
模塊用戶認證參數
auth users --指定由空格或逗號分隔的用戶名列表,只有這些用戶才允許連接該模塊(和系統用戶沒有任何關系)。用戶名和口令以明文方式存放在 secrets file 參數指定的文件中。默認為匿名方式
secrets file --指定一個 rsync 認證口令文件。只有在 auth users 被定義時,該文件才起作用。文件權限必須是 600
strict modes --指定是否監測口令文件的權限。為 true 則口令文件只能被 rsync 服務器運行身份的用戶訪問,其他任何用戶不可以訪問該文件。默認為true
模塊訪問控制參數
hosts allow --用一個主機列表指定哪些主機客戶允許連接該模塊。不匹配主機列表的主機將被拒絕。默認值為 *
hosts deny --用一個主機列表指定哪些主機客戶不允許連接該模塊
模塊日志參數
transfer logging --使 rsync 服務器將傳輸操作記錄到傳輸日志文件。默認值為false
log format --指定傳輸日志文件的字段。默認為:”%o %h [%a] %m (%u) %f %l”
設置了”log file”參數時,在日志每行的開始會添加”%t [%p]“;
可以使用的日志格式定義符如下所示:
%o --操作類型:”send” 或 “recv”
%h --遠程主機名
%a --遠程IP地址
%m --模塊名
%u --證的用戶名(匿名時是 null)
%f --文件名
%l --文件長度字符數
%p --該次 rsync 會話的 PID
%P --模塊路徑
%t --當前時間
%b --實際傳輸的字節數
%c --當發送文件時,記錄該文件的校驗碼
3、服務端配置
# vim /etc/rsyncd.conf --為 rsyncd 服務編輯配置文件,默認沒有,需自己編輯
uid = root --rsync運行權限為root
gid = root --rsync運行權限為root
use chroot = no --是否讓進程離開工作目錄
max connections = 5 --最大並發連接數,0為不限制
timeout = 600 --超時時間
pid file = /var/run/rsyncd.pid --指定rsync的pid存放路徑
lockfile = /var/run/rsyncd.lock --指定rsync的鎖文件存放路徑
log file = /var/log/rsyncd.log --指定rsync的日志存放路徑
[web1] --模塊名稱
path = /data/test/src --該模塊存放文件的基礎路徑
ignore errors = yes --忽略一些無關的I/O錯誤
read only = no --客戶端可以上傳
write only = no --客戶端可以下載
hosts allow = 192.168.22.12 --允許連接的客戶端主機ip
hosts deny = * --黑名單,*表示任何主機
list = yes
auth users = web --認證此模塊的用戶名
secrets file = /etc/web.passwd --指定存放“用戶名:密碼”格式的文件
# mkdir /data/test/src --創建基礎目錄
# mkdir /data/test/src/george --再創建一個目錄
# touch /data/test/src/{1,2,3}
# echo "web:123" > /etc/web.passwd --創建密碼文件
# chmod 600 /etc/web.passwd
# service xinetd restart
 
六、測試
1、客戶端
環境:192.168.22.12
# yum -y install rsync
# mkdir /data/test
2、小試參數
# rsync -avzP web@192.168.22.11::web1 /data/test/ --輸入密碼 123;將服務器 web1 模塊里的文件同步至 /data/test,參數說明:
-a --參數,相當於-rlptgoD,
-r --是遞歸
-l --是鏈接文件,意思是拷貝鏈接文件
-i --列出 rsync 服務器中的文件
-p --表示保持文件原有權限
-t --保持文件原有時間
-g --保持文件原有用戶組
-o --保持文件原有屬主
-D --相當於塊設備文件
-z --傳輸時壓縮
-P --傳輸進度
-v --傳輸時的進度等信息,和-P有點關系
# rsync -avzP --delete web@192.168.22.11::web1 /data/test/ --讓客戶端與服務器保持完全一致, --delete
# rsync -avzP --delete /data/test/ web@192.168.22.11::web1 --上傳客戶端文件至服務端
# rsync -avzP --delete /data/test/ web@192.168.22.11::web1/george --上傳客戶端文件至服務端的 george 目錄
# rsync -ir --password-file=/tmp/rsync.password web@192.168.22.11::web1 --遞歸列出服務端 web1 模塊的文件
# rsync -avzP --exclude="*3*" --password-file=/tmp/rsync.password web@192.168.22.11::web1 /data/test/ --同步除了路徑以及文件名中包含 “3” *的所有文件
3、通過密碼文件同步
# echo "123"> /tmp/rsync.password
# chmod 600 /tmp/rsync.password
# rsync -avzP --delete --password-file=/tmp/rsync.password web@192.168.22.11::web1 /data/test/ --調用密碼文件
4、客戶端自動同步
# crontab -e
10 0 * * * rsync -avzP --delete --password-file=/tmp/rsync.password web@192.168.22.11::web1 /data/test/
# crontab -l
 
七、數據實時同步
環境:Rsync + Inotify-tools
1、inotify-tools
是為linux下 inotify文件監控工具提供的一套c的開發接口庫函數,同時還提供了一系列的命令行工具,這些工具可以用來監控文件系統的事件
inotify-tools是用c編寫的,除了要求內核支持 inotify 外,不依賴於其他
inotify-tools提供兩種工具:一是inotifywait,它是用來監控文件或目錄的變化,二是inotifywatch,它是用來統計文件系統訪問的次數
2、安裝inotify-tools
下載地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
# yum install –y gcc --安裝依賴
# mkdir /usr/local/inotify
# tar -xf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure --prefix=/usr/local/inotify/
# make && make install
3、設置環境變量
# vim /root/.bash_profile
export PATH=/usr/local/inotify/bin/:$PATH
# source /root/.bash_profile
# echo '/usr/local/inotify/lib' >> /etc/ld.so.conf --加載庫文件
# ldconfig
# ln -s /usr/local/inotify/include /usr/include/inotify
4、常用參數
-m --始終保持監聽狀態,默認觸發事件即退出 -r --遞歸查詢目錄 -q --打印出監控事件 -e --定義監控的事件,可用參數: access --訪問文件 modify --修改文件 attrib --屬性變更 open --打開文件 delete --刪除文件 create --新建文件 move --文件移動 --fromfile --從文件讀取需要監視的文件或者排除的文件,一個文件一行,排除的文件以@開頭 --timefmt --時間格式 --format --輸出格式 --exclude --正則匹配需要排除的文件,大小寫敏感 --excludei --正則匹配需要排除的文件,忽略大小寫 %y%m%d %H%M --年月日時鍾 %T%w%f%e --時間路徑文件名狀態
5、測試一
檢測源目錄中是否有如下動作:modify,create,move,delete,attrib;一旦發生則發布至目標機器;方式為 ssh
src: 192.168.22.11(Rsync + Inotify-tools) dest: 192.168.22.12
兩台機器需要做好 ssh 免密登錄
# mdkir /data/test/dest/ --dest機器
# mdkir /data/test/src/ --src機器
# rsync -av --delete /data/test/src/ 192.168.22.12:/data/test/dest --測試下命令
# vim /data/test/test.sh
#!/bin/bash
/usr/local/inotify/bin/inotifywait -mrq -e modify,create,move,delete,attrib /data/test/src | while read events
do
rsync -a --delete /data/test/src/ 192.168.22.12:/data/test/dest
echo "`date +'%F %T'` 出現事件:$events" >> /tmp/rsync.log 2>&1
done
# chmod 755 /data/test/test.sh
# /data/test/test.sh &
# echo '/data/test/test.sh &' >> /etc/rc.local --設置開機自啟
*******我們可以在目標機上也寫一個這樣的腳本: rsync -a --delete /data/test/dest/ 192.168.22.11:/data/test/src ;這樣可以實現雙向同步
 
八、兩個服務器間傳輸文件 實例
   假設有兩台服務器,開發服務器dev及線上測試環境test,現在需要從dev將可運行代碼更新到test上面去。
注意:每一次傳輸文件客戶端將告訴服務端需要調用哪個傳輸規則進行傳輸,而傳輸規則如下:
 1 [simba]          //此名字即客戶端使用rsync來同步的路徑
 2 path=/usr/local/simba    //實際需要同步的路徑
 3 comment=simba    //和中括號里名字一樣就行
 4 ignore errors
 5 read only=no   //表示可以pull 
 6 write only=no      //表示可以push
 7 list=no
 8 auth users=rsyncuser    //客戶端獲取文件的身份此用戶並不是本機中確實存在的用戶
 9 secrets file=/etc/rsyncd.passwd     //用來認證客戶端的秘鑰文件 格式 USERNAME:PASSWD 此文件權       
10                                                         //限一定需要改為600,且屬主必須與運行rsync的用戶一致。
11 hosts allow=*    //允許所有主機訪問

好了,我們自己做一個規則,假定test上面接收的目錄是: /data/www/helloRsync

1 #創建目錄
2 mkdir  /data/www/helloRsync

而dev上面也是。。。 
請自行創建。 
那么在test上面的/etc/rsyncd.conf添加規則:

 1 #規則名稱,作為測試用規則,直接用這個算了。
 2 [helloRsync]          
 3 #同步的路徑
 4 path=/data/www/helloRsync    
 5 #規則描述
 6 comment=測試規則
 7 ignore errors
 8 #是否可以pull
 9 read only=no    
10 #是否可以push
11 write only=no      
12 list=no
13 #下面配置同步時候的身份,注意該身份是在rsync里面定義的,並非是本機實際用戶。等下說說如何在rsync里面定義身份。
14 #客戶端獲取文件的身份此用戶並不是本機中確實存在的用戶
15 auth users=rsyncuser    
16 #//用來認證客戶端的秘鑰文件 格式 USERNAME:PASSWD 此文件權     
17 #//限一定需要改為600,且屬主必須與運行rsync的用戶一致。  
18 secrets file=/etc/rsyncd.passwd                                                             
19 #允許所有主機訪問
20 hosts allow=* 
21 --------------------- 
22 作者:碼農下的天橋 
23 來源:CSDN 
24 原文:https://blog.csdn.net/cdnight/article/details/78861543 
25 版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

 

給rsync定義身份,如下:

1 echo 'rsyncuser:123456'>/etc/rsyncd.passwd   //文件用戶名和路徑為上面定義,別寫錯,密碼自己定
2 chmod 600 /etc/rsyncd.passwd        //修改權限

重啟服務。

1 systemctl restart rsyncd.service

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM