1. 程式人生 > >Linux系統——Rsync資料同步工具

Linux系統——Rsync資料同步工具

Rsync的優點及缺點

優點:類似cp命令、scp命令,但rsync為增量複製工具

缺點:針對大檔案,效率非常高(打包再比對),針對小檔案,效率非常低。

 

Rsync作用

(1)可使本地和遠端兩臺主機之間的資料快速複製同步映象,遠端備份的功能,可以增量拷貝。

(2)可以在本地主機的不同分割槽或目錄之間全量及增量的複製資料

(3)可以實現刪除檔案和目錄的功能,相當於rm命令

(4)支援拷貝特殊檔案如連結檔案,裝置等

(5)可以有排除(tarfind?)指定檔案或目錄同步的功能,相當於打包命令tar的排除功能

(6)可以做到保持原檔案或目錄的許可權,時間,軟硬連結,屬主,組等屬性均不改變

-p

(7)可以實現增量同步,既只同步發生變化的資料,因此資料傳輸效率很高(tar-N

(8)可以使用rcprshssh等方式來配合傳輸檔案(rsync本身不對資料加密)

(9)可以通過socket(程序方式)傳輸檔案和資料(服務端和客戶端)

(10)支援匿名的或認證(無需系統使用者)的程序模式傳輸,可實現方便安全的進行資料備份及映象

 

 

Rsync的企業工作場景說明

(1)兩臺伺服器之間資料同步(定時任務+備份資料)即crond+rsync

生產場景叢集架構伺服器備份方案專案

藉助crond+rsync把所有客戶伺服器資料同步到備份伺服器

簡歷專案經驗:


全網伺服器資料備份解決方案提出及負責實施200x.03 - 200x.09

1)針對公司重要資料備份混亂狀況和領導提出備份全網資料的解決方案
2)通過本地打包備份,然後rsync結合inotify應用把全網資料統一備份到一個固定儲存伺服器,然後在儲存伺服器上通過指令碼檢查並報警管理員備份結果
3)定期將IDC機房的資料備份到公司的內部伺服器,防止機房地震及火災問題導致資料丟失。

 

2)實時同步(解決儲存伺服器等的單點問題)

利用rsync結合inotify的功能做實時的資料同步,根據儲存伺服器上目錄的變化,把變化的資料通過inotifysersync結合rsync命令實時同步到備份伺服器,還可以通過

drbd方案以及雙寫的方案實現雙機資料同步。

 

 

Rsync需要yum安裝

Rsync的模式(應用方式)

(1)本地建類似cp命令的複製方式(本地建資料同步)

(2)網路間兩臺不同IP伺服器間資料傳輸(網路間資料同步)

(3)socket程序監聽的方式啟動rsync server端(server端和客戶端的形式)

 

本地建類似cp命令的複製方式(本地建資料同步)

源目錄聽過rsync將資料同步到備份目錄backup/

兩臺伺服器之間進行資料同步

伺服器Adata目錄的資料通過ssh隧道遠端同步到伺服器Bbackup目錄裡

 

多組伺服器之間以socket程序的方式啟動Rsync程序進行監聽

Rsync啟動監聽程序專門監聽某一個“備份伺服器”的埠,在“備份伺服器”周圍可能存在很多別的伺服器。IDC機房用來存放伺服器,通常在某一個時間點啟動定時任務,把需要做備份的資料推送到“備份伺服器”,但是通常在備份是不需要指定目標路徑,其他工作由“備份伺服器”來分配。

 

本地資料傳輸模式(local-only  mode

格式:

# rsync 引數 源資料 目標路徑

-v--verbose 詳細模式輸出,傳輸時的進度等資訊

-z--compress 傳輸時進行壓縮以提高傳輸效率,--compress-level=NUM可按級別壓縮。

-a--archive 歸檔模式,表示以遞迴方式傳輸檔案,並保持所有檔案屬性,等於-rtopgD1(字母1

-r,--recursive對子目錄以遞迴模式,即目錄下的所有目錄都同樣傳輸,注意是小寫r

-t--times保持檔案時間資訊

-o--owner保持檔案屬主資訊

-p--perms保持檔案許可權

-g--group保持檔案屬組資訊

-P--progress顯示同步的過程及傳輸時的進度等資訊

-D--devices保持裝置檔案資訊

-l--links保留軟連結

-e--rsh=COMMAND使用的通道協議(remote shell),指定替代rshshell程式。例如:ssh --exclude=PATTERN 指定排除不需要傳輸的檔案模式(和tar引數一樣)

--bwlimit=RATElimit socket I/O bandwidth

--delete讓源目錄SRC和目標目錄資料DST一致

 

 

Rsync本地間資料同步就相當於cp命令,增量同步同步(相當於cp不一樣的資料),同步速度快,不需要cp那樣講重複的資料進行覆蓋(rsync將資料進行比對,對比出不同的資料進行傳輸同步)

 

單檔案的rsync增量同步

格式:

# rsync 源路徑 目標路徑

# rsync  /etc/hosts   /tmp/

 

 

多目錄的rsync增量同步

# rsync -avz /root/www  /tmp/

 

 

多檔案的rsync增量同步

# rsync -avz /root/www/* /tmp/

 

完全同步(將目標路徑沒有的資料從源資料中同步,目標路徑有的而源資料不存在的資料刪除處理),一切以源為參照

刪除,相當於rm

此時要求原始檔與目標檔案同步,或者源目錄與目標目錄同步,不能檔案對應目錄

# rsync -avz --delete /root/www/ /tmp  

  

 

兩臺伺服器進行資料同步(確保已安裝rsyncopenssh-clients軟體包)

# rsync -avz /root/www/  [email protected]:/tmp/

# rsync -avzP -e 'ssh -p 22'/etc/ [email protected]:/tmp/

 

 -e  'ssh -p 22' 表示以ssh的方式通過22埠推送,如果不寫預設22

 

[email protected]:/tmp/ 表示遠端對方伺服器IP的目標路徑  

 

 

IP地址前不寫[email protected],預設以root賬戶登入

 

 

排錯

 

 

出現這種情況,考慮兩點:

(1)雙方是否都安裝了rsync

(2)雙方是否都安裝了scp,若沒有yum安裝openssh-clients軟體包(遠端連線支援的外掛包)

 

 

兩臺伺服器進行資料同步,差異傳輸(確保已安裝rsyncopenssh-clients軟體包)

 

現在server端的資料與客戶端的資料存在差異,進行傳輸

 

scp命令 遠端複製

# scp  /root/www  [email protected]:/tmp/

表示將/root/www目錄遠端複製到對方的root賬號/tmp/目錄下(不寫[email protected]表示預設為root賬號)

 

 

將對方資料遠端複製到本機

# scp  [email protected]:/etc/hosts /root/www

 

scprsync區別

scp是全量的複製,rsync是增亮的複製

 

遠端連線配置檔案 /etc/ssh/sshd_config

可在該配置檔案中修改監聽埠

 

檢視同步結果

# ssh  [email protected]/24  "ls -l /tmp"

 

對映檔案/etc/hosts裡面新增:IP地址 主機名 即作為對映對應。當輸入主機名時,系統自動通過hosts解析出對應IP地址。

 

 

Rsync 限定頻寬(限速)

--bwlimi=速度

# rsync --bwlimit=100 [email protected]:/backup /root/www

  

將遠端主機資料同步到當前主機

# rsync -avz [email protected]:benet1 /tmp

 

以守護程序(socket)的方式傳輸資料

主機名:daisy        rsync客戶端   B-Server

主機名:daisy全新   rsync服務端    A-Server

 

用客戶端把資料推送到服務端(備份伺服器)備份伺服器通過rsync啟動一個埠接受客戶端傳遞過來的請求

 

連線原理:客戶端將資料推送給server

客戶端要告訴server端兩點:

告訴server,要推送給配置問價的那個模組

(1)服務端對客戶端進行身份驗證(虛擬賬號及密碼)

2Socketrsync服務一直在監聽某個埠

開始部署rsync服務

1rsync伺服器端A-Server操作規程:

1.建立並配置/etc/rsyncd.conf

2.建立共享目錄及新增rsync程式使用者

3.啟動rsync --daemon

4.A-Server上的/backup資料夾更改屬主rsync

5.建立rsync虛擬賬戶名和密碼

6.將賬戶密碼檔案的許可權設定為600

7.加入開機啟動個人配置指令碼

 

建立並配置/etc/rsyncd.conf (空白檔案)

 

chroot表示把根目錄換成指定的目的的目錄

hosts deny = 0.0.0.0/32 表示全不拒絕 /32表示255.255.255.255

rsyncd.conf引數

引數說明

uid=rsync

rsync使用的使用者。

gid=rsync

rsync使用的使用者組(使用者所在的組)

use chroot=no

如果為truedaemon會在客戶端傳輸檔案前“chroot to the path”。這是一種安全配置,因為我們大多數都在內網,所以不配也沒關係

max connections=200

設定最大連線數,預設0,意思無限制,負值為關閉這個模組

timeout=400

預設為0,表示no timeout,建議300-6005-10分鐘)

pid file

rsync daemon啟動後將其程序pid寫入此檔案。如果這個檔案存在,rsync不會覆蓋該檔案,而是會終止

lock file

指定lock檔案用來支援“max connections”引數,使得總連線數不會超過限制,避免程序間發生衝突

log file

不設或者設定錯誤,rsync會使用rsyslog輸出相關日誌資訊

ignore errors

忽略I/O錯誤

read only=false

指定客戶端是否可以上傳檔案,預設對所有模組為true

list=false

是否允許客戶端可以檢視可用模組列表,預設為可以

hosts allow

指定可以聯絡的客戶端主機名或和ip地址或地址段,預設情況沒有此引數,即都可以連線

hosts deny

指定不可以聯絡的客戶端主機名或ip地址或地址段,預設情況沒有此引數,即都可以連線

auth users

指定以空格或逗號分隔的使用者可以使用哪些模組,使用者不需要在本地系統中存在。預設為所有使用者無密碼訪問

secrets file

指定使用者名稱和密碼存放的檔案,格式;使用者名稱;密碼,密碼不超過8

[backup]

這裡就是模組名稱,需用中括號擴起來,起名稱沒有特殊要求,但最好是有意義的名稱,便於以後維護

path

這個模組中,daemon使用的檔案系統或目錄,目錄的許可權要注意和配置檔案中的許可權一致,否則會遇到讀寫的問題

 

 

建立共享目錄及新增rsync程式使用者

# useradd -M -s /sbin/nologin rsync 建立rsync目錄

# mkdir /backup 建立共享目錄

 

 

啟動rsync --daemon

# rsync --daemon

# netstat -antup | grep rsync

 

 

A-Server上的/backup資料夾更改屬主rsync

# chown -R rsync /backup -R 表示改變目錄的屬組或屬主)

# ll -d /backup/

 

 

建立rsync虛擬賬戶名和密碼

# vim /etc/rsync.password

rsync_backup:123456寫入該檔案中

 

 

將賬戶密碼檔案的許可權設定為600(要求必須設定,否則操作失敗)

# chmod 600 /etc/rsync.password

# ll /etc/rsync.password

 

加入開機啟動

# echo "rsync --daemon" >> /.etc/rc.local

 

# tail -1 /etc/rc.local

 

還可以用chkconfig rsync on命令,但是必須要編寫適合chkconfig操作的指令碼。

 

重啟rsync服務
(1關閉rsync服務

# pkill rsync

(2啟動rsync服務
# rsync --daemon

 

2rsync客戶端B-Server操作規程:

在確保已安裝rsync情況下,建立密碼檔案

# vim /etc/rsync.password

123456寫入該檔案中

# echo "123456" >> /etc/rsync.password

 

 

將密碼檔案的許可權設定為600(要求必須設定,否則操作失敗)

# chmod 600 /etc/rsync.password

# ll /etc/rsync.password

 

 

Rsync同步測試

推送測試(1):將客戶端指定目錄內容推送到伺服器端rsync指定目錄

互動式:

# rsync -avz /root/benet1 [email protected]::backup

Password:

 

 

非互動式:

# rsync -avz /root/benet1 [email protected]::backup --password-file=/etc/rsync.password

 

 

在客戶端檢視同步結果

# ssh [email protected] "ls /backup"

 

 

推送測試(2: 客戶端任意目錄內容推送到伺服器端rsync指定目錄

# rsync -avzP /tmp/ [email protected]::backup --password-file=/etc/rsync.password

 

拉取測試(1):rsync伺服器端指定目錄全部內容同步到客戶端

# rsync -avzP [email protected]::backup  /root/benet1 --password-file=/etc/rsync.password

 

拉取測試(2):rsync伺服器端指定目錄下的指定內容同步到客戶端

# rsync -avzP [email protected]::backup/yunjisuan  /root/benet1 _-password-file=/etc/rsync.password

 

拉取測試(3: rsync伺服器端指定目錄下的全部內容排除某目錄或檔案後,同步到客戶端

環境準備
我們在rsync伺服器端指定目錄下建立如下檔案結構

# ls

a  b  c  www  d  e

# ls www

1  2  3  4  5

 

說明:

a,bcde為檔案,www是目錄。目錄下有12345檔案

 

方法一:通過命令列實現排除(--exlude=檔名 :排除的檔案

# rsync -avz --exclude=a --exclude=www/3 --exclude=www/4 [email protected]::backup /root/www/ --password-file=/etc/rsync.password

 

方法二:通過列表檔案實現排除

建立排除列表檔案

# cat /root/exclude.txt

1

3

5

b

e

測試命令:

rsync -avz --exclude-from=/root/exclude.txt [email protected]::backup /www/ --password-file=/etc/rsync.password

(--exclude-from=檔案的絕對路徑 :引用一個排除列表,列表裡只需要輸入排除的檔名

 

rsync同步拉取測試:讓rsync客戶端指定目錄內容始終和rsync伺服器共享目錄內容保持一致

1rsync伺服器目錄內容始終保持一致

# rsync -avz --delete [email protected]::backup  /root/benet1  --password-file=/etc/rsync.password

 

2排除某檔案後,再和伺服器進行同步(同步時不考慮檔名為c的檔案)

# rsync -avz --delete --exclude=c [email protected]::backup  /root/benet1   --password-file=/etc/rsync.password

 

rsync同步推送測試(讓Rsync伺服器端共享目錄始終和rsync客戶端指定目錄內容一致)

1)和rsync客戶端目錄內容始終保持一致

# rsync -avz --delete  /root/benet1   [email protected]::backup --password-file=/etc/rsync.password

2排除某檔案後,再和伺服器進行同步(--exclude=檔名

# rsync -avz --delete /root/benet1   --exclude=1 [email protected]::backup --password-file=/etc/rsync.password

 

Rsync守護程序服務傳輸資料排錯思路

(一) Rsync服務端排錯思路

.1)檢視rsync服務配置檔案路徑是否正確,正確的預設路徑為:/etc/rsyncd.conf

2)檢視配置檔案裡host allow,host deny,允許的IP網段是否是允許客戶端訪問的ip網段

3)檢視配置檔案中path引數裡的路徑是否存在,許可權是否正確(正常應為配置檔案中的UID引數對應的屬主和組)

4)檢視rsync服務是否啟動。檢視命令為:ps -ef|grep rsync。埠是否存在netstat -antup |grep 873

5檢視iptables防火牆和selinux是否開啟允許rsync服務通過,也可以考慮關閉

6)檢視服務端rsync配置的密碼檔案是否為600的許可權,密碼檔案格式是否正確,正確格式為:使用者名稱:密碼,檔案路徑和配置檔案裡的secrect files引數對應。

7)如果是推送資料,要檢視下,配置rsyncd.conf檔案中使用者是否對模組下目錄有可讀寫的許可權。

(二) Rsync客戶端排錯思路

1)檢視客戶端rsync配置的密碼檔案是否600的許可權,密碼檔案格式是否正確,注意:僅需要有密碼,並且和伺服器端的密碼保持一致。

2)用telnet連線rsync伺服器ip地址873埠,檢視服務是否啟動(可測試服務端防火牆是否阻擋)telnet 192.168.197.129 873

3)客戶端執行命令時:rsync -avzP [email protected]::backup /backup/ --password-file=/etc/rsync.password

4)此命令的細節要記清楚,尤其192.168.197.129::backup 處的雙冒號及其後的backup為模組名稱