Rsync架構(gòu)(轉(zhuǎn)載)

第一章 Rsync 基本概述

rsync 是一款開源的備份工具括儒,可以在不同主機(jī)之間進(jìn)行同步,可實(shí)現(xiàn)全量備份與增量備份,因此非常適合用于架構(gòu)集中式備份或異地備份等應(yīng)用哑子。
rsync 官方地址: 傳送門 http://rsync.samba.org
rsync 監(jiān)聽端口: 873
rsync 運(yùn)行模式: C/S

第二章 Rsync應(yīng)用場景

2.1 備份方式:

既然需要備份弥奸,那么我們應(yīng)該了解備份的方式
完全備份
增量備份
假設(shè)客戶端上有 file1 file2 file3 文件,服務(wù)端上有 file1 文件掉奄,現(xiàn)要將客戶端上的數(shù)據(jù)備份至服務(wù)端
完全備份方式:

image

增量備份方式:

image

2.2 備份架構(gòu):

image
image
image
image

第三章 Rsync三種模式

3.1 本地模式

[root@backup ~]# echo 123 > test.txt
[root@backup ~]# cat test.txt 
123
[root@backup ~]# rsync test.txt /tmp/
[root@backup ~]# cat /tmp/test.txt 
123

3.2 遠(yuǎn)程模式

下載方式:

rsync -avz root@10.0.1.31:/root/test.txt /tmp

上傳方式:

rsync -avz oldzhang.txt root@10.0.1.31:/tmp

拉取目錄

rsync -avz root@172.16.1.31:/etc/hostname ./  #拉取遠(yuǎn)程文件
rsync -avz root@172.16.1.31:/root/ /backup/   #拉取遠(yuǎn)程目錄下的所有文件
rsync -avz root@172.16.1.31:/root /backup/    #拉取遠(yuǎn)程目錄以及目錄下的所有文件

3.3 后臺服務(wù)模式

Rsync 借助 SSH 協(xié)議同步數(shù)據(jù)存在的缺陷
1.使用系統(tǒng)用戶(不安全)
2.使用普通用戶(會導(dǎo)致權(quán)限不足情況)
3.守護(hù)進(jìn)程傳輸方式: rsync 自身非常重要的功能(不使用系統(tǒng)用戶,更加安全)

3.4 命令參數(shù)解釋

rsync #命令
[OPTION...] #選項(xiàng)
SRC... #遠(yuǎn)程主機(jī)模塊(不是目錄)
[USER@] #遠(yuǎn)程主機(jī)用戶(虛擬用戶)
HOST:: #遠(yuǎn)程主機(jī)地址
[DEST] #將遠(yuǎn)程主機(jī)模塊備份至本地什么位置
-a #歸檔模式傳輸, 等于-tropgDl
-v #詳細(xì)模式輸出, 打印速率, 文件數(shù)量等
-z #傳輸時進(jìn)行壓縮以提高效率
-r #遞歸傳輸目錄及子目錄蝠嘉,即目錄下得所有目錄都同樣傳輸最疆。
-t #保持文件時間信息
-o #保持文件屬主信息
-p #保持文件權(quán)限
-g #保持文件屬組信息
-l #保留軟連接
-P #顯示同步的過程及傳輸時的進(jìn)度等信息
-D #保持設(shè)備文件信息
-L #保留軟連接指向的目標(biāo)文件
-e #使用的信道協(xié)議,指定替代 rsh 的 shell 程序
--exclude=PATTERN #指定排除不需要傳輸?shù)奈募J?--exclude-from=file #文件名所在的目錄文件
--bwlimit=100 #限速傳輸
--delete #讓目標(biāo)目錄和源目錄數(shù)據(jù)保持一致

第四章 后臺服務(wù)模式-服務(wù)端配置

4.1 安裝rsync

yum -y install rsync -y

4.2 修改配置文件

[root@backup /server/scripts]# cat /etc/rsyncd.conf 
uid = www 
gid = www 
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup

[data]
path = /data

4.3 配置文件解釋

注意!以下配置只是為了理解rsync配置參數(shù)是晨,配置文件中不要帶有#或者中文肚菠,不然啟動會報錯

uid = www # 運(yùn)行進(jìn)程的用戶
gid = www # 運(yùn)行進(jìn)程的用戶組
port = 873 # 監(jiān)聽端口
fake super = yes # 無需讓 rsync 以 root 身份運(yùn)行,允許接收文件的完整屬性
use chroot = no # 禁錮推送的數(shù)據(jù)至某個目錄, 不允許跳出該目錄
max connections = 200 # 最大連接數(shù)
timeout = 600 # 超時時間
ignore errors # 忽略錯誤信息
read only = false # 對備份數(shù)據(jù)可讀寫
list = false # 不允許查看模塊信息
auth users = rsync_backup # 定義虛擬用戶罩缴,作為連接認(rèn)證用戶
secrets file = /etc/rsync.passwd # 定義 rsync 服務(wù)用戶連接認(rèn)證密碼文件路徑
[backup] # 定義模塊信息
comment = commit # 模塊注釋信息
path = /backup # 定義接收備份數(shù)據(jù)目錄

4.4 創(chuàng)建用戶以及數(shù)據(jù)目錄

useradd -M -s /sbin/nologin www -u 666
mkdir /backup
chown -R www.www /backup/

4.5 創(chuàng)建虛擬用戶密碼文件并授權(quán)

echo "rsync_backup:oldboy" >/etc/rsync.passwd
chmod 600 /etc/rsync.passwd

4.4 加入開機(jī)啟動

systemctl start rsyncd
systemctl enable rsyncd

4.5 檢查端口是否存在

netstat -lntup|grep 873

第五章 后臺服務(wù)模式-客戶端配置

5.1 安裝

yum -y install rsync -y

5.2 配置密碼文件及授權(quán)

兩種方式:
1.使用密碼文件

yum install rsync -y
echo "oldboy" > /etc/rsync.pass
chmod 600 /etc/rsync.pass

2.使用rsync變量-腳本中使用-推薦這種

export RSYNC_PASSWORD=oldboy

第六章 實(shí)戰(zhàn)內(nèi)容

6.1 客戶端推送 backup 目錄下所有內(nèi)容至 Rsync 服務(wù)端

export RSYNC_PASSWORD=oldboy
rsync -avz /backup/ rsync_backup@172.16.1.41::backup

6.2 客戶端拉取 Rsync 服務(wù)端 backup 模塊數(shù)據(jù)至本地客戶端的 /backup 目錄

export RSYNC_PASSWORD=oldboy
rsync -avz rsync_backup@172.16.1.41::backup /backup/

6.3 Rsync 實(shí)現(xiàn)數(shù)據(jù)無差異同步

#拉取遠(yuǎn)端數(shù)據(jù):遠(yuǎn)端與本地保持一致,遠(yuǎn)端沒有本地有會被刪除, 造成客戶端數(shù)據(jù)丟失
export RSYNC_PASSWORD=oldboy
rsync -avz --delete rsync_backup@172.16.1.41::backup /data/
#推送數(shù)據(jù)至遠(yuǎn)端:本地與遠(yuǎn)端保持一致, 本地沒有遠(yuǎn)端會被刪除, 造成服務(wù)器端數(shù)據(jù)丟失
export RSYNC_PASSWORD=oldboy
rsync -avz --delete /data/ rsync_backup@172.16.1.41::backup

6.4 Rsync 的 Limit 限速

#企業(yè)案例: 某 DBA 使用 rsync 拉取備份數(shù)據(jù)時蚊逢,由于文件過大導(dǎo)致內(nèi)部交換機(jī)帶寬被沾滿,導(dǎo)致用戶的請求無法響應(yīng)
export RSYNC_PASSWORD=oldboy
rsync -avz --bwlimit=1 rsync_backup@172.16.1.41::backup /data/

第七章 全網(wǎng)備份案例

7.1 客戶端需求:

客戶端需求:
1.客戶端 每天凌晨1點(diǎn)在服務(wù)器本地打包備份(系統(tǒng)配置文件\日志文件\其他目錄\應(yīng)用配置等文件)
2.客戶端備份的數(shù)據(jù)必須存放至以主機(jī)名ip地址當(dāng)前時間命名的目錄中
3.客戶端最后通過rsync推送本地已經(jīng)打包好的備份文件至backup服務(wù)器
4.客戶端服務(wù)器本地保留最近7天的數(shù)據(jù)箫章,避免浪費(fèi)磁盤空間

7.2任務(wù) 拆解

1.客戶端 每天凌晨1點(diǎn)在服務(wù)器本地打包備份(系統(tǒng)配置文件\日志文件\其他目錄\應(yīng)用配置等文件)
系統(tǒng)配置文件:

/etc/fstab
/etc/passwd

日志文件:

/var/log/messages
/var/log/secure

打包壓縮:

cd / && tar zcvf /backup/sys.tar.gz etc/fstab etc/passwd
cd / && tar zcvf /backup/log.tar.gz var/log/messages var/log/secure

2.客戶端備份的數(shù)據(jù)必須存放至以主機(jī)名ip地址當(dāng)前時間命名的目錄中
命名要求:

nfs_172.16.1.31_2019-07-17

主機(jī)名:

hostname

ip地址:

ifconfig eth1|awk 'NR==2{print $2}'

時間:

date +%F

拼接在一起:

[root@nfs ~]# echo "$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date
+%F)"
nfs_172.16.1.31_2019-07-17

3.客戶端最后通過rsync推送本地已經(jīng)打包好的備份文件至backup服務(wù)器的/backup

rsync -avzP /backup/ oldzhang@172.16.1.41::backup

4.創(chuàng)建測試數(shù)據(jù)

[root@nfs /backup]# cat date.sh
#!/bin/bash
for i in {1..30}
do
Backup="/backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date
+%F)"
date -s 2019/07/${i}
mkdir -p ${Backup}
cd / && tar zcvf ${Backup}/sys.tar.gz etc/fstab etc/passwd
cd / && tar zcvf ${Backup}/log.tar.gz var/log/messages var/log/secure
done

5.客戶端服務(wù)器本地保留最近7天的數(shù)據(jù)烙荷,避免浪費(fèi)磁盤空間

find /backup/ -mtime +7 |xargs rm -rf

6.調(diào)試腳本參數(shù)

bash -x xxx.sh

7.最終腳本

[root@nfs /server/scripts]# cat push_rsync.sh
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
BACKUP=/backup
HOST=$(hostname)
TIME=$(date +%F)
IP=$(ifconfig eth1|awk 'NR==2{print $2}')
DEST=${HOST}_${IP}_${TIME}
#1.創(chuàng)建目錄
mkdir ${BACKUP}/${DEST} -p
#2.打包數(shù)據(jù)
cd / && tar zcvf ${BACKUP}/${DEST}/sys.tar.gz etc/fstab etc/passwd
cd / && tar zcvf ${BACKUP}/${DEST}/log.tar.gz var/log/messages
var/log/secure
#3.推送
export RSYNC_PASSWORD=oldboy
rsync -avzP ${BACKUP}/ oldzhang@172.16.1.41::backup
#4.刪除7天前文件
find ${BACKUP}/ -mtime +7 |xargs rm -rf

8.注意踩坑
我們的備份腳本最終會以定時任務(wù)的形式實(shí)現(xiàn),而定時任務(wù)能識別的PATH變量有限檬寂,所以最好在腳本里添加PATH變量终抽,或者腳本里命令寫絕對路徑。

7.4 服務(wù)端需求:

1.服務(wù)端部署 rsync桶至,用于接收客戶端推送過來的備份數(shù)據(jù)
2.服務(wù)端需要每天校驗(yàn)客戶端推送過來的數(shù)據(jù)是否完整
3.服務(wù)端需要每天校驗(yàn)的結(jié)果通知給管理員
4.服務(wù)端僅保留 6 個月的備份數(shù)據(jù),其余的全部刪除
注意:所有服務(wù)器的備份目錄必須都為/backup

7.5 服務(wù)端步驟:

服務(wù)端需要每天校驗(yàn)客戶端推送過來的數(shù)據(jù)是否完整

1.要在客戶端做
2.做一個標(biāo)記,貼一個防撕貼

#第一種
cd nfs_172.16.1.31_2019-07-23/ && md5sum log.tar.gz > md5.txt
#第二種
md5sum log.tar.gz sys.tar.gz >md5.txt
#第三種
md5sum *.tar.gz >md5.txt

實(shí)現(xiàn)命令:
1.客戶端增加md5校驗(yàn)的步驟:

md5sum ${BACKUP}/${DEST}/*.tar.gz > ${BACKUP}/${DEST}/md5.txt

2.服務(wù)端校驗(yàn)命令:

find /backup/*_$(date +%F) -name "md5.txt"|xargs md5sum -c

服務(wù)端需要每天郵件校驗(yàn)的結(jié)果通知給管理員

1.安裝配置mailx:

yum install mailx -y

2.郵件配置文件

[root@backup /server/scripts]# cat /etc/mail.rc 
set from=526195417@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=526195417@qq.com
set smtp-auth-password=xxxxxxxx
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

3.服務(wù)端生成校驗(yàn)結(jié)果文件:

find /backup/*_$(date +%F) -name "md5.txt"|xargs md5sum -c >
/backup/check.txt

4.校驗(yàn)發(fā)送命令:

mail -s "check-rsync-$(date +%F)" 526195417@qq.com < /backup/check.txt

第八章 配置文件匯總

8.1 客戶端腳本:

[root@nfs01 /server/scripts]# cat push_rsync.sh 
#!/bin/bash

#1.定義變量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Host=$(hostname)
Addr=$(ifconfig eth1|awk 'NR==2{print $2}')
Date=$(date +%F)
Dest=${Host}_${Addr}_${Date}
Path=/backup
#2.創(chuàng)建備份目錄
[ -d $Path/$Dest ] || mkdir -p $Path/$Dest
#3.備份對應(yīng)的文件
cd / && \
    [ -f $Path/$Dest/system.tar.gz ] || tar czf $Path/$Dest/system.tar.gz etc/fstab etc/rsyncd.conf && \
    [ -f $Path/$Dest/log.tar.gz ] || tar czf $Path/$Dest/log.tar.gz var/log/messages var/log/secure && \
#4.攜帶 md5 驗(yàn)證信息
[ -f $Path/$Dest/flag ] || md5sum $Path/$Dest/*.tar.gz >$Path/$Dest/flag_$Date
#5.推送本地?cái)?shù)據(jù)至備份服務(wù)器
export RSYNC_PASSWORD=oldboy
rsync -avz $Path/ rsync_backup@172.16.1.41::backup
#6.本地保留最近 7 天的數(shù)據(jù)
find $Path/ -type d -mtime +7|xargs rm -rf

8.2 服務(wù)端腳本:

[root@backup /server/scripts]# cat check_backup.sh 
#!/bin/bash

#1.定義全局的變量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#2.定義局部變量
Path=/backup
Date=$(date +%F)
#3.查看 flag 文件,并對該文件進(jìn)行校驗(yàn), 然后將校驗(yàn)的結(jié)果保存至 result_時間
find $Path/ -type f -name "flag_$Date"|xargs md5sum -c >$Path/result_${Date}
#4.將校驗(yàn)的結(jié)果發(fā)送郵件給管理員
mail -s "Rsync Backup $Date" 526195417@qq.com <$Path/result_${Date}
#5.刪除超過 7 天的校驗(yàn)結(jié)果文件, 刪除超過 180 天的備份數(shù)據(jù)文件
find $Path/ -type f -name "result*" -mtime +7|xargs rm -f
find $Path/ -type d -mtime +180|xargs rm -rf

8.3 服務(wù)端rsync配置文件

[root@backup /server/scripts]# cat /etc/rsyncd.conf 
uid = www 
gid = www 
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup

[data]
path = /data

第九章: 報錯

報錯1:驗(yàn)證失敗
1.檢查密碼文件權(quán)限是否為600
2.檢查配置文件用戶屬主是否為root,不需要改成普通用戶
3.密碼文件是否寫錯

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昼伴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子镣屹,更是在濱河造成了極大的恐慌圃郊,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件女蜈,死亡現(xiàn)場離奇詭異持舆,居然都是意外死亡色瘩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門逸寓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來居兆,“玉大人,你說我怎么就攤上這事竹伸∧嗥埽” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵勋篓,是天一觀的道長聊倔。 經(jīng)常有香客問我,道長生巡,這世上最難降的妖魔是什么耙蔑? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮孤荣,結(jié)果婚禮上甸陌,老公的妹妹穿的比我還像新娘。我一直安慰自己盐股,他們只是感情好钱豁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疯汁,像睡著了一般牲尺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幌蚊,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天谤碳,我揣著相機(jī)與錄音,去河邊找鬼溢豆。 笑死蜒简,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的漩仙。 我是一名探鬼主播搓茬,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼队他!你這毒婦竟也來了卷仑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤麸折,失蹤者是張志新(化名)和其女友劉穎锡凝,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體磕谅,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡私爷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了膊夹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衬浑。...
    茶點(diǎn)故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖放刨,靈堂內(nèi)的尸體忽然破棺而出工秩,到底是詐尸還是另有隱情,我是刑警寧澤进统,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布助币,位于F島的核電站,受9級特大地震影響螟碎,放射性物質(zhì)發(fā)生泄漏眉菱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一掉分、第九天 我趴在偏房一處隱蔽的房頂上張望俭缓。 院中可真熱鬧,春花似錦酥郭、人聲如沸华坦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惜姐。三九已至,卻和暖如春椿息,著一層夾襖步出監(jiān)牢的瞬間歹袁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工寝优, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宇攻,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓倡勇,卻偏偏與公主長得像逞刷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子妻熊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容