主要記錄:
1. 綜合架構(gòu)部署流程 2. 全量備份與增量備份
3. 備份服務(wù)傳輸原理 4. 備份服務(wù)工作方式
5. 守護(hù)進(jìn)程模式部署 6. 守護(hù)模式常見錯誤
7. 備份服務(wù)命令參數(shù)
第一部分rsync知識體系內(nèi)容
備份服務(wù)概念的介紹
#備份服務(wù)重要性: 企業(yè)中所有要進(jìn)行操作的數(shù)據(jù)文件虱颗,一定操作前備份份帐。
企業(yè)備份數(shù)據(jù)方法:重要數(shù)據(jù)需要保存在專門備份服務(wù)器上,或者是在第三方網(wǎng)盤上存儲,或自己搭建備份服務(wù)器资溃。
如何部署搭建備份服務(wù)器:rsync
rsync介紹
rsync - a fast, versatile, remote (and local) file-copying tool
快速 多功能 遠(yuǎn)程(scp)和本地(cp)文件拷貝工具
centos6(3.0.9)centos7(3.1.2) 默認(rèn)就有rsync軟件
特點:可以實現(xiàn)全量和增量備份
增量備份:備份時理肺,先跟自己的數(shù)據(jù)內(nèi)容進(jìn)行比對洽糟,將不一樣的地方進(jìn)行傳輸備份。(推薦)
全量備份:就是將之前已經(jīng)備好的數(shù)據(jù)加上新產(chǎn)生的數(shù)據(jù)重新進(jìn)行一次備份(一般企業(yè)不常用)伐债。
實現(xiàn)的方式:
方式一: 對源數(shù)據(jù)和目標(biāo)目錄中的數(shù)據(jù)進(jìn)行比對屬性信息
/oldboy/oldboy.txt --- 遠(yuǎn)程主機 /oldboy/oldboy.txt
屬性信息:大小 修改時間
方式二: 利用文件指紋進(jìn)行判斷文件是否相同
指紋方式多種多樣 利用md5運算生成數(shù)值信息(指紋信息)
[root@localhost ~]# md5sum /etc/hosts
9b227ad1017a60a8f62435f4c77edeb8 /etc/hosts 生成指紋信息
[root@localhost ~]# md5sum /etc/hosts
37fcc2a587e1c876ea48400b4b499863 /etc/hosts
#和本地的文件或目錄進(jìn)行比對驻民,如有變化,增量備份
rsync的使用方法--1v4命令
cp命令:cp /etc/hosts /tmp/hosts_cp
備份文件 備份目錄
rsync /etc/hosts /tmp/hosts_bak02
#主要是學(xué)習(xí)遠(yuǎn)程的備份
scp命令:
傳輸文件
scp /etc/hosts root@172.16.1.41:/tmp/hosts_oldboy
#需要知道密碼 (不加用戶的時候就以系統(tǒng)當(dāng)前用戶)
#指定是什么用戶最后傳輸文件的內(nèi)容的屬者悼嫉、屬組就是此用戶
rsync /etc/hosts 172.16.1.41:/tmp/hosts_root_rsync
傳輸目錄:
scp -rp /oldboy 172.16.1.41:/tmp
rsync -rp /oldboy 172.16.1.41:/tmp
利用rsync傳輸目錄數(shù)據(jù)
目錄數(shù)據(jù)后面有/ /oldboy/ 將目錄下面的數(shù)據(jù)內(nèi)容進(jìn)行傳輸
目錄數(shù)據(jù)后面沒/ /oldboy 將目錄本身和目錄下面的數(shù)據(jù)內(nèi)
容進(jìn)行傳輸
ls 命令
[root@oldboyedu62 ~]# rsync /etc/hosts
-rw-rw-rw- 10 2019/07/12 15:42:49 hosts
[root@oldboyedu62 ~]# rsync /oldboy
drwxr-xr-x 6 2019/07/12 15:58:39 oldboy
rm命令
首先創(chuàng)建一個空目錄 mkdir /null
rsync -avz --delete /null/ /oldboy
sending incremental file list
deleting oldboy03/
deleting oldboy01/
./
sent 42 bytes received 45 bytes 174.00 bytes/sec
total size is 0 speedup is 0.00
--delete 無差異同步參數(shù) 將兩個目錄中的數(shù)據(jù)保持高度一致
我有的東西 /null 你也有
我沒有的東西 /null 你也不能有
ls命令
[root@oldboyedu62 ~]# rsync /etc/hosts
-rw-rw-rw- 10 2019/07/12 15:42:49 hosts
[root@oldboyedu62 ~]# rsync /oldboy
drwxr-xr-x 6 2019/07/12 15:58:39 oldboy
rsync命令詳細(xì)用法說明
第一種:Local: rsync [OPTION...] SRC... [DEST]
本地復(fù)制備份文件 == cp
SRC 要備份的數(shù)據(jù)
Dest 要備份到什么路徑中
第二種:Access via remote shell:
遠(yuǎn)程復(fù)制備份文件
Pull(拉): rsync [OPTION...] [USER@]HOST:SRC... [DEST] 遠(yuǎn)端數(shù)據(jù) 拉取 本地
[USER@]: 指定以什么用戶身份登錄到遠(yuǎn)程主機(默認(rèn)是當(dāng)前系統(tǒng)用戶)
HOST: 遠(yuǎn)程主機IP地址或者主機名稱
SRC: 遠(yuǎn)程要拉取的數(shù)據(jù)信息
DEST: 保存到本地路徑信息
Push(t推): rsync [OPTION...] SRC... [USER@]HOST:DEST 本地數(shù)據(jù) 推送 遠(yuǎn)端
[USER@]: 指定以什么用戶身份登錄到遠(yuǎn)程主機(默認(rèn)是當(dāng)前系統(tǒng)用戶)
HOST: 遠(yuǎn)程主機IP地址或者主機名稱
SRC: 本地要推送的數(shù)據(jù)信息
DEST: 保存到遠(yuǎn)程路徑信息
#了解知道即可
推和拉的示意圖
(掌握)第三種:Access via rsync daemon:
利用守護(hù)進(jìn)程方式(一直運行的程序)
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
src: 本地要推送的數(shù)據(jù)信息
[USER@] 認(rèn)證用戶名稱信息
HOST: 備份服務(wù)器IP地址或者主機名稱 host后面需要有兩個冒號
DEST: 指定模塊信息 backup
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
01. 控制備份傳輸數(shù)據(jù)連接數(shù)
02. 可以實現(xiàn)免交互傳輸數(shù)據(jù)
03. 可以實現(xiàn)認(rèn)證訪問功能
04. 可以實現(xiàn)安全訪問控制 限制一些ip無法訪問
守護(hù)進(jìn)程推和拉的用法(注:一定是在客戶端操作艇潭。)
推:客戶端(操作) 將本地數(shù)據(jù)推送遠(yuǎn)程服務(wù)端進(jìn)行備份
拉:客戶端(操作) 在客戶端上操作(backup)拉取到本地備份服務(wù)器
服務(wù)部署流程
以后部署服務(wù)的時候 都要有服務(wù)端部署 還要有客戶端部署
先部署服務(wù)端 再部署客戶端
服務(wù)以后部署的時候再記記
第一個歷程:安裝服務(wù)軟件
yum install -y rsync(已經(jīng)安裝完畢)
rpm -qa rsync
rsync-3.1.2-4.el7.x86_64 (版本過低升級一下)
第二個歷程:編輯配置文件(通過配置文件進(jìn)行下一步)
vi /etc/rsyncd.conf
#rsync_config
#created by HQ at 2017
##rsyncd.conf start##
uid = rsync --- 虛擬用戶rsync,管理備份目錄 原理(為什么要用這個用戶去管理)
gid = rsync --- 虛擬用戶組rsync戏蔑,管理備份目錄
port = 873 --- 服務(wù)默認(rèn)端口號873
fake super = yes --- 偽裝管理員功能開啟 便于可以執(zhí)行chgrp命令
use chroot = no --- 安全配置 (不用去研究蹋凝,沒意義!)
max connections = 200 --- 最大連接數(shù) 同時支持200個客戶端連接
timeout = 300 --- 連接超時時間 秒
pid file = /var/run/rsyncd.pid --- 進(jìn)程信息文件 記錄進(jìn)程號
作用:便于獲取進(jìn)程號停止進(jìn)程
kill -9837 `/var/run/rsyncd.pid
centos6中有體現(xiàn), centos 6 直接是 / 啟動某個服務(wù) 啟動之后會有這個文件总棵。
如果在啟動會提示已有這個文件鳍寂。便于判斷服務(wù)是否啟動 避免反復(fù)啟動。
lock file = /var/run/rsync.lock --- 鎖文件達(dá)到最大連接數(shù)彻舰,就將鎖起來伐割,避免訪問。(開發(fā)考慮)
log file = /var/log/rsyncd.log --- 服務(wù)運行時日志文件
ignore errors --- 忽略傳輸過程一些小錯誤
read only = false --- 指定備份目錄的權(quán)限為可讀可寫
list = false --- 刃唤?隔心??
hosts allow = 172.16.1.0/24 --- 安全策略配置 設(shè)置一個白名單(黑名單相反) 只允許172.16.1.0/24這個網(wǎng)段訪問
hosts deny = 0.0.0.0/32 --- 安全策略配置 設(shè)置一個黑名單
auth users = rsync_backup --- 定義認(rèn)證用戶
secrets file = /etc/rsync.password --- 密碼文件 用戶密碼信息
(銘文) rsync_backup:oldboy123
[backup] --- 模塊 名稱
comment = "backup dir by oldboy"
path = /backup --- 定義一個備份目錄
方便搭建服務(wù)的時候復(fù)制
#rsync_config
#created by HQ at 2017
##rsyncd.conf start##
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = 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
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by oldboy"
path = /backup
第三個歷程:創(chuàng)建一個虛擬用戶 rsync
useradd rsync -M -s /sbin/nologin
第四個歷程:創(chuàng)建密碼文件并修改權(quán)限為600
echo "rsync_backup:oldboy123" >/etc/rsync.password
chmod 600 /etc/rsync.password
第五個歷程:創(chuàng)建備份目錄/修改目錄屬主和屬組信息
mkdir /backup
chown rsync.rsync /backup
第六個歷程:啟動服務(wù)程序/重啟服務(wù)程序
systemctl start rsyncd
systemctl restart rsyncd (只要配置程序有修改尚胞,都要重啟服務(wù)硬霍。)
systemctl enable rsyncd
第七個歷程:客戶端備份存儲測試(能否備份成功)
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
客戶端部署流程
第一個歷程:創(chuàng)建密碼文件 并修改權(quán)限
echo oldboy123 >/etc/rsync.password
chmod 600 /etc/rsync.password
第二個歷程:免交互傳輸數(shù)據(jù)測試
[root@oldboyedu62 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password(增量傳輸)
sending incremental file list
hosts
sent 102 bytes received 43 bytes 290.00 bytes/sec
total size is 10 speedup is 0.07
rsync守護(hù)進(jìn)程數(shù)據(jù)備份傳輸原理示意圖
備份服務(wù)原理過程
1)客戶端 發(fā)送要傳輸數(shù)據(jù)的請求
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
2)服務(wù)端 接收到傳輸數(shù)據(jù)請求 進(jìn)行用戶認(rèn)證操作
服務(wù)端確認(rèn)用戶信息是否正確 確認(rèn)客戶端輸入的用戶 == 服務(wù)端配置文件用戶
服務(wù)端確認(rèn)用戶密碼是否正確 確認(rèn)客戶端輸入的密碼 == 服務(wù)端相應(yīng)用戶的密碼信息 oldboy:oldboy123
在進(jìn)行用戶認(rèn)證時,需要判斷兩個文件的權(quán)限是否是600
3)客戶端 將數(shù)據(jù)傳輸?shù)椒?wù)端 會轉(zhuǎn)換傳輸者的身份(rsync) 將數(shù)據(jù)信息權(quán)限改動 rsync
#如果客戶端是普通用戶進(jìn)行傳輸時笼裳,加上avz的參數(shù)唯卖,服務(wù)端配置文件中的用戶和組變?yōu)閞oot,同樣模塊的屬主和屬組也變?yōu)閞oot后,當(dāng)客戶端普通用戶備份的數(shù)據(jù)屬主和屬組都為普通用戶躬柬。
4)服務(wù)端 如果想讓數(shù)據(jù)正確保存 修改備份目錄
rsync守護(hù)進(jìn)程數(shù)據(jù)備份傳輸原理及出現(xiàn)報錯的原因
- 1.由圖所示:當(dāng)部署好了一臺rsync備份服務(wù)器拜轨,由客戶端向服務(wù)端備份傳輸數(shù)據(jù)時,根據(jù)輸入的命令rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup,客戶端會以當(dāng)前用戶root和認(rèn)證用戶rsync_backup向備份服務(wù)器的備份目錄(/backup)中傳輸數(shù)據(jù)允青。
- 2.當(dāng)?shù)竭_(dá)備份服務(wù)器時橄碾,首先做一個認(rèn)證,驗證認(rèn)證用戶及輸入的密碼是否正確。
- 3.當(dāng)認(rèn)證用戶和密碼驗證正確時法牲,會將客戶端傳輸數(shù)據(jù)的用戶變?yōu)榉?wù)端配置文件中的rsync普通用戶的身份去向backup目錄去備份數(shù)據(jù)史汗。
- 4.但是因為備份目錄backup是root管理的目錄,所以普通用戶rsync無法在root管理的目錄去備份數(shù)據(jù)拒垃,所以這時候需要更改backup的所有者停撞、所屬組。
- 5.改完后發(fā)現(xiàn)似乎可以傳輸了悼瓮,但還是會報chgrp權(quán)限拒絕的錯誤戈毒。
- 原因:因為客戶端以root用戶的屬主、屬組權(quán)限向服務(wù)端發(fā)送備份數(shù)據(jù)谤牡,到達(dá)服務(wù)端時副硅,因為身份變?yōu)榱似胀ㄓ脩魊sync姥宝,所以無法修改備份文件的屬組信息翅萤,這時需要將服務(wù)端配置文件的偽裝root用戶功能開啟,這樣可以正常修改屬組信息,不會出現(xiàn)報錯腊满。
rsync常見操作問題
1. rsync服務(wù)端開啟的iptables防火墻
【客戶端的錯誤】
No route to host
【錯誤演示過程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
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]
【異常問題解決】
關(guān)閉rsync服務(wù)端的防火墻服務(wù)(iptables)
[root@backup mnt]# /etc/init.d/iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@backup mnt]# /etc/init.d/iptables status
iptables: Firewall is not running.
2. rsync客戶端執(zhí)行rsync命令錯誤
【客戶端的錯誤】
The remote path must start with a module name not a /
【錯誤演示過程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::/backup
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命令語法理解錯誤套么,::/backup是錯誤的語法,應(yīng)該為::backup(rsync模塊)
3. rsync服務(wù)認(rèn)證用戶失敗
【客戶端的錯誤】
auth failed on module oldboy
【錯誤演示過程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
【異常問題解決】
1. 密碼真的輸入錯誤碳蛋,用戶名真的錯誤
2. secrets file = /etc/rsync.password指定的密碼文件和實際密碼文件名稱不一致 信息復(fù)制粘貼
3. /etc/rsync.password文件權(quán)限不是600
4. rsync_backup:123456 密碼配置文件后面注意不要有空格
如何看出文件結(jié)尾空格信息:
方法一:在vim編輯中查看
底行模式---:set list
方法二:在cat命令中查看
[root@backup ~]# cat -A /etc/rsync.password
rsync_backup:oldboy123 $
5. rsync客戶端密碼文件中只輸入密碼信息即可胚泌,不要輸入虛擬認(rèn)證用戶名稱
4. rsync服務(wù)位置模塊錯誤
【客戶端的錯誤】
Unknown module 'backup'
【錯誤演示過程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
@ERROR: Unknown module 'backup'
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
【異常問題解決】
1. /etc/rsyncd.conf配置文件模塊名稱書寫錯誤
5. rsync服務(wù)權(quán)限阻止問題
【客戶端的錯誤】
Permission denied
【錯誤演示過程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
rsync: mkstemp ".hosts.5z3AOA" (in backup) failed: Permission denied (13)
sent 196 bytes received 27 bytes 63.71 bytes/sec
total size is 349 speedup is 1.57
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
【異常問題解決】
1. 備份目錄的屬主和屬組不正確,不是rsync
2. 備份目錄的權(quán)限不正確肃弟,不是755
6. rsync服務(wù)備份目錄異常
【客戶端的錯誤】
chdir failed
【錯誤演示過程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
【異常問題解決】
1. 備份存儲目錄沒有建立
2. 建立的備份存儲目錄和配置文件定義不一致
說明:如果沒有備份存儲目錄
7. rsync服務(wù)無效用戶信息
【客戶端的錯誤】
invalid uid rsync
【錯誤演示過程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: invalid uid rsync
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
【異常問題解決】
rsync服務(wù)對應(yīng)rsync虛擬用戶不存在了
8. 客戶端已經(jīng)配置了密碼文件玷室,但免秘鑰登錄方式,依舊需要輸入密碼
【客戶端的錯誤】
password file must not be other-accessible
【錯誤演示過程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
password file must not be other-accessible
continuing without password file
Password:
sending incremental file list
sent 26 bytes received 8 bytes 5.23 bytes/sec
total size is 349 speedup is 10.26
【異常問題解決】
rsync客戶端的秘鑰文件也必須是600權(quán)限
9. rsync客戶端連接慢問題
【錯誤日志信息】 名稱或者域名 --- IP dns解析
錯誤日志輸出 IP --- 名稱或者域名 反向dns解析
2017/03/08 20:14:43 [3422] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
2017/03/08 20:14:43 [3422] name lookup failed for 172.16.1.31: Name or service not known
2017/03/08 20:14:43 [3422] connect from UNKNOWN (172.16.1.31)
2017/03/08 20:14:43 [3422] rsync to backup/ from rsync_backup@unknown (172.16.1.31)
2017/03/08 20:14:43 [3422] receiving file list
2017/03/08 20:14:43 [3422] sent 76 bytes received 83 bytes total size 349
正確日志輸出
2017/03/08 20:16:45 [3443] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
2017/03/08 20:16:45 [3443] connect from nfs01 (172.16.1.31)
2017/03/08 20:16:45 [3443] rsync to backup/ from rsync_backup@nfs02 (172.16.1.31)
2017/03/08 20:16:45 [3443] receiving file list
2017/03/08 20:16:45 [3443] sent 76 bytes received 83 bytes total size 349
【異常問題解決】
查看日志進(jìn)行分析笤受,編寫rsync服務(wù)端hosts解析文件
10 rsync服務(wù)沒有正確啟動
【錯誤日志信息】
Connection refused (111)
【錯誤演示過程】
[root@oldboy-muban ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
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]
【異常問題解決】
[root@oldboy-muban ~]# rsync --daemon
[root@oldboy-muban ~]# ss -lntup |grep rsync
tcp LISTEN 0 5 :::873 :::* users:(("rsync",1434,5))
tcp LISTEN 0 5 *:873 *:* users:(("rsync",1434,4))
[root@oldboy-muban ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
sent 196 bytes received 27 bytes 49.56 bytes/sec
total size is 349 speedup is 1.57
rsync命令參數(shù)說明
顯示數(shù)據(jù)傳輸過程信息
-z compress file data during the transfer
將傳輸?shù)臄?shù)據(jù)進(jìn)行壓縮處理
-a archive mode
歸檔參數(shù):等價于輸入了 -rlptgoD
-r 遞歸傳輸數(shù)據(jù)信息(傳輸目錄)
-l copy symlinks as symlinks 最沒有意義參數(shù)
保持鏈接文件屬性
-rptgoD -L 保存鏈接文件的源文件
-L 將鏈接文件指向的源文件進(jìn)行備份傳輸
-p 保持文件權(quán)限不變
-t 保持文件時間信息不變 (修改時間不變)
-g 保持文件屬組信息不變
-o 保持文件屬主信息不變
-D 保持設(shè)備文件屬性信息不變
--delete 實現(xiàn)無差異同步參數(shù)
遠(yuǎn)程模式 實現(xiàn)
讓服務(wù)器目錄中數(shù)據(jù)信息 和 備份目錄中的數(shù)據(jù)信息 保持高度一致
#不要和/作比較
--exclude=PATTERN exclude files matching PATTERN tar
--exclude-from=FILE read exclude patterns from FILE
排除指定數(shù)據(jù)信息不做備份傳輸