1. 程式人生 > >001.Rsync簡介及使用

001.Rsync簡介及使用

一 基礎知識

1.1 簡介

Rsync是Linux系統中的資料映象備份工具,通過rsync可以將本地系統資料通過網路備份到任何遠端主機上。rysnc不僅僅能對不同位置的檔案和目錄進行同步,還可以差異計算,壓縮傳輸檔案來最小化資料傳輸,和cp命令相比,rysnc的優勢在於高效的差異演算法。並且,rysnc還支援網路資料傳輸,在複製檔案的同時,會把源端與目的端的檔案進行比較,只有當檔案不一樣的時候在進行復制。具有以下特性:
    • 可以映象儲存整個目錄樹和檔案系統;
    • 可以同步增量資料,檔案傳輸效率高,同步時間短;
    • 可以保留原有檔案的許可權、時間等屬性;
    • 加密傳輸資料,保證了資料的安全性。

1.2 相關目錄

/etc/rsyncd(資料夾) | - rsyncd.conf(rsync 伺服器的配置檔案) | - rsyncd.secrets(使用者密碼檔案,客戶端使用其中的賬號密碼訪問,需要 600 許可權) | - rsyncd.motd(自定義使用者登入後顯示的伺服器資訊,即 messageoftoday)

1.3 其他

  • rsync伺服器以deamon方式執行rsync服務,需要開啟rsync deamon和啟動xinetd服務,預設埠873。
  • rsync客戶端是發起rsync連線的伺服器,安裝rsync即可。
  • rsync客戶端發起連線後,rsync伺服器會檢查rsync客戶端提交rsync伺服器內建的戶名和密碼是否正確,如果通過認證檢測,則開始檔案傳輸,傳輸的過程是按要求先比對檔案的大小、屬性、許可權、MD5值等資訊,如果兩端檔案資訊不一致,則按要求同步檔案的區別塊。

二 部署例項

2.1 拓撲

01

2.2 安裝rsync

  1 [[email protected] ~]# cd /tmp/
  2 [[email protected] tmp]# tar -zxvf rsync-3.1.2.tar.gz
  3 [[email protected]
tmp]# cd rsync-3.1.2/ 4 [[email protected] rsync-3.1.2]# ./configure 5 [[email protected] rsync-3.1.2]# make && make install
注意:Host A和Host B都需要安裝。

2.3 配置host a rsync

  1 [[email protected] ~]# vi /etc/rsyncd.conf
  2 # /etc/rsyncd: configuration file for rsync daemon mode
  3 # See rsyncd.conf man page for more options.
  4 
  5 # configuration example:
  6 uid = nobody
  7 gid = nobody
  8 use chroot = no
  9 list = no
 10 max connections = 10
 11 pid file = /var/run/rsyncd.pid
 12 log file = /var/log/rsync.log
 13 log format = %t %a %m %f %b
 14 motd file = /etc/rsyncd/rsyncd.motd
 15 # address = 192.161.1.1
 16 # exclude = lost+found/
 17 # transfer logging = yes
 18 # timeout = 900
 19 # ignore nonreadable = yes
 20 # dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
 21 
 22 [data]
 23 path= /tmp
 24 comment = This is my back file
 25 transfer logging = yes
 26 ignore errors
 27 read only = no
 28 list = no
 29 hosts allow = 172.24.8.0/24
 30 uid =root
 31 gid =root
 32 auth users = backuser
 33 secrets file = /etc/rsync.password
 34 
 35 #[ftp]
 36 #path = /home/ftp
 37 #comment = ftp export area
 38 
 39 [[email protected] ~]# echo "backuser:x120952576" >/etc/rsync.password
 40 [[email protected] ~]# chmod 600 /etc/rsync.password
 41 [[email protected] ~]# service iptables stop				#建議放通或關閉防火牆
配置解釋: uid:指定當該模組傳輸檔案時守護程序應該具有的使用者ID,預設為nobody; gid:指定當該模組傳輸檔案時守護程序應該具有的使用者組ID,預設為nobody; use chroot:為true時,則rsync在傳輸檔案前會先chroot到path引數所指定的目錄下,可實現額外的安全防護,但是需要以roots許可權,並且不能備份指向外部的符號連線所指向的目錄檔案。預設情況下chroot值為true; list:該選項設定當客戶請求可以使用的模組列表時,該模組是否應該被列出。如果設定該選項為false,可以建立隱藏的模組。預設值是true; port:埠,預設為873; max connections:指定該模組的最大併發連線數量以保護伺服器,超過限制的連線請求將被告知隨後再試。預設值是0,也就是沒有限制; pid file:此選項指定rsync守護程序對應的pid檔案路徑; log file:此選項指定rsync的日誌輸出檔案路徑; log format:日誌格式; [data]:表示一個模組的開始,data為模組的名稱; exclude:指定排除在外的多個由空格隔開的檔案或目錄(相對路徑); transfer logging:是否記錄傳輸檔案的日誌; timeout:指定的IP超時時間,以確保rsync伺服器不會等待一個崩潰的客戶端,單位為秒鐘,預設為0,表示沒有超時定義; address:伺服器監聽的IP地址,可省略; ignore nonreadable:指定rysnc伺服器完全忽略那些使用者沒有訪問許可權的檔案。這對於在需要備份的目錄中有些檔案是不應該被備份者得到的情況是有意義的; dont compress:指定不進行壓縮處理再傳輸的檔案,預設值是*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz; path:指定該模組的供備份的目錄樹路徑,該引數是必須指定的; comment:給模組指定一個描述,該描述連同模組名在客戶連線得到模組列表時顯示給客戶,預設沒有描述定義; ignore errors:指定rsyncd在判斷是否執行傳輸時的刪除操作時忽略server上的IO錯誤,一般來說rsync在出現IO錯誤時將將跳過--delete操作,以防止因為暫時的資源不足或其它IO錯誤導致的嚴重問題; read only:是否只讀,該選項設定是否允許客戶上載檔案,如果為true那麼任何上載請求都會失敗,如果為false並且伺服器目錄讀寫許可權允許那麼上載是允許的,預設值為true。 hosts allow:該選項指定哪些IP的客戶允許連線該模組; auth users:該選項指定由空格或逗號分隔的使用者名稱列表,只有這些使用者才允許連線該模組; secrets file:該選項指定一個包含定義使用者名稱:密碼對的檔案,只有在"auth users"被定義時,該檔案才有作用。 注意:該檔案的許可權一定要是600,否則客戶端將不能連線伺服器。

2.4 host a啟動

  1 [[email protected] ~]# /usr/local/bin/rsync --daemon
  2 [[email protected] ~]# echo "/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf">>/etc/rc.d/rc.local		#開機啟動
  3 [[email protected] ~]# ps -ef | grep rsync				#驗證是否啟動

2.5 配置host b rsync

  1 [[email protected] ~]# mkdir /backfile		#建立備份目錄
  2 [[email protected] ~]# echo "x120952576" >/etc/rsync.password
  3 #建立和Host a匹配的密碼,路徑可自定義,若以命令形式執行,則客戶端不需要帶使用者名稱。
  4 [[email protected] ~]# chmod 666 /etc/rsync.password
  5 [[email protected] ~]# service iptables stop		#建議放通或關閉防火牆

2.6 執行備份

  1 [[email protected] ~]# /usr/local/bin/rsync -vzrtopg --delete --progress [email protected]::data /backfile --password-file=/etc/rsync.password --port=873
引數解釋: -vzrtopg:-v表示“--verbose”,即詳細模式輸出;-z表示“--compress”,即對備份的檔案在傳輸時進行壓縮處理;-r表示“--recursive”,即對子目錄以遞迴模式處理;-t表示“--times”,即保持檔案時間資訊;-o表示“--owner”,即保持檔案屬主資訊;-p表示“--perms”,即保持檔案許可權;-g表示“--group”,即保持檔案屬組資訊; --delete:指定以服務端為基準進行資料映象同步,即保持rsync服務端目錄與客戶端目錄的完全一致性; --progress:顯示資料映象同步的過程; [email protected]::data:使用backuser使用者對172.24.8.10服務端的data模組進行同步; /backfile:指定備份檔案在客戶端機器上存放的路徑; --password-file:指定客戶端存放的密碼檔案位置; --port:指定埠,若為預設的873則可省略。

三 擴充套件知識

3.1 相關命令

  1 [[email protected] ~]# /usr/local/bin/rsync -vzrtopg --delete --progress /var/log/access.log [email protected]::data --password-file=/etc/rsync.password --port=873    #從客戶端上傳檔案至服務端

3.2 開機啟動chkconfig新增

  1 [[email protected] ~]# vi /etc/init.d/rsync
  2 #!/bin/bash
  3 
  4 # chkconfig:   - 85 15
  5 # description: rsync
  6 
  7 status1=$(ps -ef | egrep "rsync --daemon.*rsyncd.conf" | grep -v 'grep')
  8 pidfile="/var/run/rsyncd.pid"
  9 start_rsync="rsync --daemon --config=/etc/rsyncd/rsyncd.conf"
 10 
 11 function rsyncstart() {
 12     if [ "${status1}X" == "X" ]; then
 13         rm -f $pidfile
 14         ${start_rsync}
 15         status2=$(ps -ef | egrep "rsync --daemon.*rsyncd.conf" | grep -v 'grep')
 16         if [  "${status2}X" != "X"  ]; then
 17             echo "rsync service start.......OK"
 18         fi
 19     else
 20         echo "rsync service is running !"
 21     fi
 22 }
 23 
 24 function rsyncstop() {
 25     if [ "${status1}X" != "X" ]; then
 26         kill -9 $(cat $pidfile)
 27         status2=$(ps -ef | egrep "rsync --daemon.*rsyncd.conf" | grep -v 'grep')
 28         if [ "${statusw2}X" == "X" ]; then
 29             echo "rsync service stop.......OK"
 30         fi
 31     else
 32         echo "rsync service is not running !"
 33     fi
 34 }
 35 
 36 function rsyncstatus() {
 37     if [ "${status1}X" != "X" ]; then
 38         echo "rsync service is running !"
 39 
 40     else
 41          echo "rsync service is not running !"
 42     fi
 43 }
 44 
 45 function rsyncrestart() {
 46     if [ "${status1}X" == "X" ]; then
 47                echo "rsync service is not running..."
 48                rsyncstart
 49         else
 50                rsyncstop
 51                rsyncstart
 52         fi
 53 }
 54 
 55 case $1 in
 56         "start")
 57                rsyncstart
 58                 ;;
 59         "stop")
 60                rsyncstop
 61                 ;;
 62         "status")
 63                rsyncstatus
 64                ;;
 65         "restart")
 66                rsyncrestart
 67                ;;
 68         *)
 69           echo
 70                 echo  "Usage: $0 start|stop|restart|status"
 71           echo
 72 esac
更多知識連結:https://www.cnblogs.com/f-ck-need-u/p/7220009.html