Linux系統——Rsync資料同步工具
Rsync的優點及缺點
優點:類似cp命令、scp命令,但rsync為增量複製工具
缺點:針對大檔案,效率非常高(打包再比對),針對小檔案,效率非常低。
Rsync作用
(1)可使本地和遠端兩臺主機之間的資料快速複製同步映象,遠端備份的功能,可以增量拷貝。
(2)可以在本地主機的不同分割槽或目錄之間全量及增量的複製資料
(3)可以實現刪除檔案和目錄的功能,相當於rm命令
(4)支援拷貝特殊檔案如連結檔案,裝置等
(5)可以有排除(tar?find?)指定檔案或目錄同步的功能,相當於打包命令tar的排除功能
(6)可以做到保持原檔案或目錄的許可權,時間,軟硬連結,屬主,組等屬性均不改變
(7)可以實現增量同步,既只同步發生變化的資料,因此資料傳輸效率很高(tar-N)
(8)可以使用rcp,rsh,ssh等方式來配合傳輸檔案(rsync本身不對資料加密)
(9)可以通過socket(程序方式)傳輸檔案和資料(服務端和客戶端)
(10)支援匿名的或認證(無需系統使用者)的程序模式傳輸,可實現方便安全的進行資料備份及映象
Rsync的企業工作場景說明
(1)兩臺伺服器之間資料同步(定時任務+備份資料)即crond+rsync
生產場景叢集架構伺服器備份方案專案
藉助crond+rsync把所有客戶伺服器資料同步到備份伺服器
簡歷專案經驗:
全網伺服器資料備份解決方案提出及負責實施200x.03 - 200x.09
1)針對公司重要資料備份混亂狀況和領導提出備份全網資料的解決方案
2)通過本地打包備份,然後rsync結合inotify應用把全網資料統一備份到一個固定儲存伺服器,然後在儲存伺服器上通過指令碼檢查並報警管理員備份結果
3)定期將IDC機房的資料備份到公司的內部伺服器,防止機房地震及火災問題導致資料丟失。
(2)實時同步(解決儲存伺服器等的單點問題)
利用rsync結合inotify的功能做實時的資料同步,根據儲存伺服器上目錄的變化,把變化的資料通過inotify或sersync結合rsync命令實時同步到備份伺服器,還可以通過
Rsync需要yum安裝
Rsync的模式(應用方式)
(1)本地建類似cp命令的複製方式(本地建資料同步)
(2)網路間兩臺不同IP伺服器間資料傳輸(網路間資料同步)
(3)以socket程序監聽的方式啟動rsync server端(server端和客戶端的形式)
本地建類似cp命令的複製方式(本地建資料同步)
源目錄聽過rsync將資料同步到備份目錄backup/下
兩臺伺服器之間進行資料同步
伺服器A的data目錄的資料通過ssh隧道遠端同步到伺服器B的backup目錄裡
多組伺服器之間以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),指定替代rsh的shell程式。例如: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
兩臺伺服器進行資料同步(確保已安裝rsync和openssh-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軟體包(遠端連線支援的外掛包)
兩臺伺服器進行資料同步,差異傳輸(確保已安裝rsync和openssh-clients軟體包)
現在server端的資料與客戶端的資料存在差異,進行傳輸
scp命令 遠端複製
# scp /root/www [email protected]:/tmp/
表示將/root/www目錄遠端複製到對方的root賬號/tmp/目錄下(不寫[email protected]表示預設為root賬號)
將對方資料遠端複製到本機
# scp [email protected]:/etc/hosts /root/www
scp與rsync區別
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)服務端對客戶端進行身份驗證(虛擬賬號及密碼)
(2)Socket的rsync服務一直在監聽某個埠
開始部署rsync服務
(1)rsync伺服器端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 |
如果為true,daemon會在客戶端傳輸檔案前“chroot to the path”。這是一種安全配置,因為我們大多數都在內網,所以不配也沒關係 |
max connections=200 |
設定最大連線數,預設0,意思無限制,負值為關閉這個模組 |
timeout=400 |
預設為0,表示no timeout,建議300-600(5-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
(2)rsync客戶端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,b,c,d,e為檔案,www是目錄。目錄下有1,2,3,4,5檔案
方法一:通過命令列實現排除(--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伺服器共享目錄內容保持一致
(1)和rsync伺服器目錄內容始終保持一致
# 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為模組名稱