1、Rsync服務介紹
Rsync屬於一款實現全量及增量同步數據的軟件工具,適用於unix/linux/windows等多種操做系統平臺。
Rsync軟件能實現本地複製,遠程複製,或者遠程守護進程方式複製。它以其delta-transfer算法聞名,減小經過網絡數據發送數量,利用只發送源文件和目標文件之間的差別信息,從而實現數據的增量同步複製。linux
2、Rsync工做方式
- 本地數據備份方式
- 遠程傳輸數據方式
- 守護進程傳輸數據方式
以rsync守護進程方式實現爲主,經過man rsync幫助,查看用法。算法
#拉取數據的命令參數用法
Pull:rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
參數解釋:
[USER@]HOST:: --- 指定遠程鏈接的認證用戶
SRC --- 指定相應的模塊信息
[DEST] --- 將遠程數據保存到本地的路徑信息
#推送數據的命令參數用法
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
參數解釋:
[USER@]HOST:: --- 指定遠程鏈接的認證用戶
SRC --- 指定本地要進行推送的數據信息
[DEST] --- 遠程進行保存數據的模塊信息
3、守護進程部署流程
3.1 服務端部署
1)主機環境檢查vim
[root@backup ~]# cat /etc/redhat-release
CentOS release 6.8 (Final)
[root@backup ~]# uname -r
2.6.32-642.el6.x86_64
[root@backup ~]# uname -m
x86_64
2)檢查軟件是否安裝windows
[root@backup ~]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
3)編輯配置文件
配置文件默認不存在,須要在/etc目錄下建立rsyncd.conf。
參數用法:man rsyncd.conf。網絡
#created by user at 2018
###rsyncd.conf start###
uid = www #管理備份目錄的用戶(須要在linux系統下建立虛擬用戶)
gid = www #管理備份目錄的用戶組
use chroot = no #保護模式,通常內網使用,能夠選擇禁用no
max connections = 200 #能夠同時處理的併發鏈接數
timeout = 300 #鏈接超時,在指定時間內沒有數據傳輸,自動釋放鏈接
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors #備份傳輸過程當中,忽略一些I/O產生的傳輸錯誤
read only = false #對備份目錄開啓讀寫權限,默認爲true,只讀模式
list = false #禁止經過客戶端查詢服務端配置的模塊信息
hosts allow = 172.16.1.0/24 #容許指定網段或主機來訪問備份目錄
auth users = rsync_backup #認證用戶(虛擬認證用戶),不是真實存在的,非linux系統管理的虛擬用戶
secrets file = /etc/rsync.pass #設置免交互方式用戶認證文件
[data] #指定備份目錄的模塊名稱
comment = "sersync dir by myself"
path = /data #以絕對路徑方式,設置備份目錄路徑信息
4)建立備份目錄管理用戶併發
[root@backup ~]# useradd www -M -s /sbin/nologin
5)建立備份目錄socket
[root@backup ~]# mkdir /data
[root@backup ~]# chown -R www.www /data
6)建立用戶認證文件tcp
[root@backup ~]# echo 'rsync_backup:123456' >>/etc/rsync.pass
[root@backup ~]# chmod 600 /etc/rsync.pass
追加內容"認證用戶:密碼"到認證文件中,在追加前先切換爲英文輸入法,行尾不添加空格或tab等內容,防止認證出錯。
能夠經過vim編輯器尾行模式,輸入:set list檢查,或者使用命令cat -A /etc/rsync.pass檢查。編輯器
7)啓動Rsync服務工具
[root@backup ~]# rsync --daemon
[root@backup ~]# netstat -lntp|grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 12805/rsync
tcp 0 0 :::873 :::* LISTEN 12805/rsync
[root@backup ~]# echo '/usr/bin/rsync --daemon' >>/etc/rc.local
若是rsync服務默認端口873被其餘服務佔用,使用rsync --daemon --port=PORT命令啓動測試,更多幫助查看rsync --daemon --help。
3.2 客戶端部署
1)主機環境檢查
[root@nfs ~]# cat /etc/redhat-release
CentOS release 6.8 (Final)
[root@nfs ~]# uname -r
2.6.32-642.el6.x86_64
[root@nfs ~]# uname -m
x86_64
2)檢查軟件是否安裝
[root@nfs ~]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
3)建立認證文件
[root@nfs ~]# echo '123456' >>/etc/rsync.pass
[root@nfs ~]# chmod 600 /etc/rsync.pass
客戶端認證文件只須要添加密碼便可,認證用戶在客戶端經過rsync命令進行設置。
4)進行數據備份測試
#客戶端備份數據
[root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
sending incremental file list
hosts
sent 180 bytes received 27 bytes 414.00 bytes/sec
total size is 294 speedup is 1.42
#服務端檢查備份數據
[root@backup ~]# ll /data/hosts
-rw-r--r-- 1 www www 294 Nov 6 2018 /data/hosts
4、Rsync備份過程當中常見的錯誤問題總結
1. 客戶端執行rsync命令發生錯誤問題
- 錯誤提示
ERROR: The remote path must start with a module name not a /
- 演示過程
[root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::/data --password-file=/etc/rsync.pass
ERROR: The remote path must start with a module name not a /
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
- 問題解決
rsync命令語法錯誤,::/data錯誤的語法,data爲模塊,而不是目錄,正確寫法::data。
2. 配置了免交互方式備份數據,客戶端依舊須要輸入密碼問題
- 錯誤提示
password file must not be other-accessible
演示過程
[root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
password file must not be other-accessible
continuing without password file
Password:
sending incremental file list
sent 26 bytes received 8 bytes 9.71 bytes/sec
total size is 294 speedup is 8.65
問題解決
Rsync客戶端的認證文件不是600權限。
3. Rsync服務端防火牆問題
- 錯誤提示
No route to host
- 演示過程
[root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
rsync: failed to connect to 172.16.1.41: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
- 問題解決
Rsync服務端開啓了防火牆功能,關閉便可。
4. Rsync用戶認證失敗問題
- 錯誤提示
ERROR: auth failed on module data
- 演示過程
[root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
@ERROR: auth failed on module data
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
- 問題解決
1.客戶端rsync命令認證用戶沒寫對,或者認證文件密碼所在行的結尾有多餘的空格或tab(cat -A /etc/rsync.pass檢查)
2.客戶端認證文件/etc/rsync.pass配置錯誤,不須要rsync_backup認證用戶,只須要設置認證密碼便可。
3.服務端認證文件中rsync_backup:123456後有空行或tab,須要注意。
4.服務端認證文件/etc/rsync.pass權限不是600。
5.服務端rsyncd.conf配置文件中,secrets file參數設置的認證文件名稱與系統中建立的認證文件名稱不一致。
6.服務端rsyncd.conf配置文件中,uid和gid設置的管理用戶與備份目錄管理用戶不一致。
5. Rsync服務權限阻止問題
- 錯誤提示
Permission denied
演示過程
[root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
sending incremental file list
hosts
rsync: mkstemp ".hosts.dGfSQ1" (in data) failed: Permission denied (13)
sent 180 bytes received 27 bytes 414.00 bytes/sec
total size is 294 speedup is 1.42
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
問題解決
1.服務端/etc/rsyncd.conf文件中,uid和gid設置的管理用戶與備份目錄的屬主和屬組不一致。
2.備份目錄的文件權限不是755。
6. Rsync服務備份目錄異常問題
- 錯誤提示
ERROR: chdir failed
- 演示過程
[root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
- 問題解決
服務端/etc/rsyncd.conf文件中,備份目錄模塊path路徑設置存在問題,檢查目錄是否存在,或者path路徑是否填寫正確。
7. Rsync服務備份模塊異常問題
- 錯誤提示
ERROR: Unknown module 'data'
- 演示過程
[root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
@ERROR: Unknown module 'data'
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
- 問題解決
1.客戶端rsync命令執行時,指定的模塊名稱不正確。
2.服務端/etc/rsyncd.conf文件中,指定的備份目錄的模塊名稱不正確。
8.Rsync無效的用戶問題
- 錯誤提示
ERROR: invalid uid mine
- 演示過程
[root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
@ERROR: invalid uid mine
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
- 問題解決
服務端管理備份目錄的虛擬用戶不存在,經過「useradd 用戶 -M -s /sbin/nologin」進行建立便可。
9. Rsync服務未開啓問題
- 錯誤提示
Connection refused
- 演示過程
[root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
rsync: failed to connect to 172.16.1.41: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
- 問題解決
1.檢查服務:ps -ef|grep [r]sync
2.開啓服務:rsync --daemon
10. Rsync服務鏈接超時問題
- 錯誤提示
Connection timed out
- 演示過程
[root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.51::data --password-file=/etc/rsync.pass
rsync: failed to connect to 172.16.1.51: Connection timed out (110)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
- 問題解決
檢查目標主機IP地址,ping目標主機檢查鏈路是否正常。
[root@nfs ~]# ping 172.16.1.41
PING 172.16.1.41 (172.16.1.41) 56(84) bytes of data.
64 bytes from 172.16.1.41: icmp_seq=1 ttl=64 time=0.438 ms
64 bytes from 172.16.1.41: icmp_seq=2 ttl=64 time=0.543 ms
11. Rsync服務鏈接慢的問題
- 日誌分析
[root@backup ~]# tailf /var/log/rsyncd.log
2019/06/27 12:49:35 [22251] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
--- 未對rsync客戶端主機在服務端進行host解析,致使反向解析域名,使得鏈接緩慢。
2019/06/27 12:49:55 [22251] name lookup failed for 172.16.1.31: Temporary failure in name resolution
2019/06/27 12:49:55 [22251] connect from UNKNOWN (172.16.1.31)
2019/06/27 12:49:55 [22251] rsync to data/ from rsync_backup@unknown (172.16.1.31)
2019/06/27 12:49:55 [22251] receiving file list
2019/06/27 12:49:56 [22251] sent 76 bytes received 81 bytes total size 294
- 問題解決
[root@backup ~]# echo -e '172.16.1.31\tnfs' >>/etc/hosts
[root@backup ~]# tailf /var/log/rsyncd.log
2019/06/27 12:55:06 [22268] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
--- 能夠查看到服務端對nfs主機進行了正確的反向解析過程。 2019/06/27 12:55:06 [22268] connect from nfs (172.16.1.31) 2019/06/27 12:55:06 [22268] rsync to data/ from rsync_backup@nfs (172.16.1.31) 2019/06/27 12:55:06 [22268] receiving file list 2019/06/27 12:55:06 [22268] sent 76 bytes received 81 bytes total size 294