第二課 Rsync 備份服務(wù)器

第一章 Rsync基本概述

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

安裝rsync服務(wù)命令:本地與遠(yuǎn)程均需安裝

yum -y install rsync

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

2.1 備份方式:

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


image.png

增量備份方式:


image.png

2.2 備份架構(gòu):

1推(上傳)


image.png

2拉 (下載)


image.png

3.大量服務(wù)器備份


image.png

4.異地備份


image.png

第三章 Rsync三種模式

3.1 本地模式

相當(dāng)于cp

創(chuàng)建測試目錄及文件

1.mkdir /data
  cd /data/
2.dd if=/dev/zero of=/data/500M.txt bs=10M count=50#創(chuàng)建大文件
  50+0 records in
  50+0 records out
  524288000 bytes (524 MB) copied, 18.1737 s, 28.8 MB/s
3.ll -h
  total 500M
  -rw-r--r-- 1 root root 500M Jul 16 21:58 500M.txt

測試本地模式

1.mkdir /tmp/test
2.rsync -avz /data/500M.txt /tmp/test/
  sending incremental file list
  500M.txt

  sent 509,968 bytes  received 35 bytes  27,567.73 bytes/sec
  total size is 524,288,000  speedup is 1,028.01
3.ll /tmp/test/
  total 512000
  -rw-r--r-- 1 root root 524288000 Jul 16 21:58 500M.txt

3.2 遠(yuǎn)程模式

下載

rsync -avz root@172.16.1.31:/tmp/data/ /data/  
#拉取遠(yuǎn)程服務(wù)器目錄下所有文件到本地
rsync -avz root@172.16.1.31:/tmp/data /data/    
#拉取遠(yuǎn)程服務(wù)器目錄到本地

上傳

rsync -avz 1G.txt  root@172.16.1.31:/tmp/data

3.3 后臺服務(wù)模式

Rsync 借助 SSH 協(xié)議同步數(shù)據(jù)存在的缺陷

1.使用系統(tǒng)用戶(不安全),需要知道root密碼

2.使用普通用戶(會導(dǎo)致權(quán)限不足情況)需要修改用戶屬主、屬組信息(uid gid)

3.守護進程傳輸方式: rsync 自身非常重要的功能(不使用系統(tǒng)用戶粗井,更加安全)

3.4 命令參數(shù)解釋

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

我們一般使用:

rsync -avz 本地上傳文件 目標(biāo)地址(IP):/路徑    #上傳數(shù)據(jù)
rsync -avz 目標(biāo)地址(IP):/路徑/目錄(文件) 本地路徑   #下載數(shù)據(jù)

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

4.1 安裝rsync服務(wù)

yum -y install rsync

4.2 修改配置文件

[root@backup /backup]# 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 # 運行進程的用戶
gid = www # 運行進程的用戶組
port = 873 # 監(jiān)聽端口
fake super = yes # 無需讓 rsync 以 root 身份運行耘擂,允許接收文件的完整屬性
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 -u 666 www 
mkdir /backup /data
chown -R www.www /backup
chown -R www.www /data

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

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

4.6 加入開機啟動

systemctl start rsyncd  #啟動服務(wù)
systemctl enable rsyncd #開機自啟動

4.7 檢查端口和服務(wù)

netstat -lntup|grep 873 #查看端口
systemctl status rsyncd #查看服務(wù)

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

5.1 安裝rsync服務(wù)

yum -y install rsync

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

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

echo "oldboy" >/etc/rsync.passwd
chmod 600 /etc/rsync.passwd
rsync -avzP linux2NB.txt rsync_backup@172.16.1.41::backup --passwordfile=/etc/rsync.passwd

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

export RSYNC_PASSWORD=oldboy

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

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

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

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

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

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

#拉取遠(yuǎn)端數(shù)據(jù):遠(yuǎn)端與本地保持一致,遠(yuǎn)端沒有本地有會被刪除, 造成客戶端數(shù)據(jù)丟失
export RSYNC_PASSWORD=oldboy
rsync -avzP --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 -avzP --delete /data/ rsync_backup@172.16.1.41::backup

6.4 Rsync 的 Limit 限速

#企業(yè)案例:防止備份時帶寬不夠用,影響其他業(yè)務(wù)
export RSYNC_PASSWORD=oldboy
rsync -avz --bwlimit=10 rsync_backup@172.16.1.41::backup /data/  #限制為10M/S傳輸數(shù)據(jù)

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

7.1 客戶端需求:

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

7.2 客戶端實現(xiàn)步驟:

7.2.1.創(chuàng)建腳本目錄

mkdir -p /server/scripts 

7.2.2. 取主機名

hostname

7.2.3 取IP地址

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

7.2.4 取時間

date +%F

7.2.5 拼接在一起

echo $(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F)

7.2.6 創(chuàng)建測試

mkdir -p /backup/$(hostname)_$(ifconfig eth1|awk'NR==2{print $2}')_$(date +%F) 

7.2.7 打包并查看壓縮包內(nèi)容

cd / && tar zcvf sys.tar.gz etc/fstab etc/passwd 
tar tf sys.tar.gz

7.2.8 拼接命令

cd / && tar zcf /backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F)/sys.tar.gz etc/fstab etc/passwd
cd / && tar zcf /backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F)/log.tar.gz var/log/messages var/log/secure

7.2.9 創(chuàng)建數(shù)據(jù)

# cat date.sh 
#!/bin/bash
#生成1-31天的系統(tǒng)和日志壓縮包
for i in {1..31}
do
backup="/backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F)"
date -s 2017/07/${i}
mkdir -p ${backup}
cd / && tar zcf ${backup}/sys.tar.gz etc/passwd etc/fstab
cd / && tar zcf ${backup}/log.tar.gz var/log/messages var/log/secure
done

7.2.10 客戶端給壓縮文件打上指紋

md5sum /backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F)/*.tar.gz >/backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F)/$(date +%F)_md5.txt

7.2.11 刪除7天的前文件

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

7.2.12 將路徑秩霍、IP地址篙悯、時間命令替換成變量

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
BACKUP=/backup
HOST=$(hostname)
IP=$(ifconfig eth1|awk 'NR==2{print $2}')
DATE=$(date +%F)
DEST=${HOST}_${IP}_${DATE}

7.2.13 注意要點:

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

7.3 服務(wù)端需求:

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

7.4 服務(wù)端實現(xiàn)步驟

7.4.1 校驗客戶端發(fā)送來的數(shù)據(jù)文件

find ${BACKUP}/ -name "md5.txt" -type f|xargs md5sum -c >${BACKUP}/check_${DATE}.txt

7.4.2 發(fā)送郵件

mail -s "rsync_check_${DATE}" wufei008@qq.com <${BACKUP}/check_${DATE}.txt

7.4.3 刪除文件

#刪除超過 7 天的校驗結(jié)果文件, 刪除超過 180 天的備份數(shù)據(jù)文件
find ${BACKUP}/ -type f -name "check*" -mtime +7|xargs rm -rf
find ${BACKUP}/ -type d -mtime +180|xargs rm -rf

7.4.4 安裝配置mailx

安裝mailx服務(wù)

yum -y install mailx

修改配置文件

# cat /etc/mail.rc
set from=xxxxxx  #郵箱地址
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=xxxxxx  #郵箱地址
set smtp-auth-password=xxxxxx  #郵箱授權(quán)碼
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

第八章 配置文件匯總

8.1 客戶端生成數(shù)據(jù)腳本

# cat date.sh 
#!/bin/bash

#生成1-31天的系統(tǒng)和日志壓縮包

for i in {1..31}
do
backup="/backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F)"
date -s 2017/07/${i}
mkdir -p ${backup}
cd / && tar zcf ${backup}/sys.tar.gz etc/passwd etc/fstab
cd / && tar zcf ${backup}/log.tar.gz var/log/messages var/log/secure
done

8.2 客戶端上傳腳本

# cat push_rsync.sh 
#!/bin/bash

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
BACKUP=/backup
HOST=$(hostname)
IP=$(ifconfig eth1|awk 'NR==2{print $2}')
DATE=$(date +%F)
DEST=${HOST}_${IP}_${DATE}

#1.創(chuàng)建目錄
mkdir -p ${BACKUP}/${DEST}

#2.打包數(shù)據(jù)
cd / && tar zcf ${BACKUP}/${DEST}/sys.tar.gz etc/passwd etc/fstab
cd / && tar zcf ${BACKUP}/${DEST}/log.tar.gz var/log/messages var/log/secure
md5sum ${BACKUP}/${DEST}/*.tar.gz >${BACKUP}/${DEST}/${DATE}_md5.txt

#3.推送
export RSYNC_PASSWORD=oldboy
rsync -avzP ${BACKUP}/ rsync_backup@172.16.1.41::backup

#4.刪除7天以前的文件
find ${BACKUP}/ -type d -mtime +7 |xargs rm -rf 

8.3 服務(wù)器端校驗并發(fā)送到郵箱腳本

# cat check_rsync.sh 
#!/bin/bash

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
BACKUP=/backup
HOST=$(hostname)
IP=$(ifconfig eth1|awk 'NR==2{print $2}')
DATE=$(date +%F)
DEST=${HOST}_${IP}_${DATE}

#1.檢驗客戶端發(fā)送過來的數(shù)據(jù)
find ${BACKUP}/ -name "md5.txt" -type f|xargs md5sum -c >${BACKUP}/check_${DATE}.txt

#2.郵件發(fā)送
mail -s "rsync_check_${DATE}" wufei008@qq.com <${BACKUP}/check_${DATE}.txt

#3.刪除超過 7 天的校驗結(jié)果文件, 刪除超過 180 天的備份數(shù)據(jù)文件
find ${BACKUP}/ -type f -name "check*" -mtime +7|xargs rm -rf
find ${BACKUP}/ -type d -mtime +180|xargs rm -rf

8.4 服務(wù)器rsync安裝配置腳本

# cat rsync_install.sh 
#!/bin/bash

#1.安裝rsync
yum install rsync -y

#2.創(chuàng)建用戶
useradd -s /sbin/nologin -M -u 666 www

#3.配置文件
cat > /etc/rsyncd.conf <<EOF
uid = www 
gid = www 
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
read only = false
list = false
ignore errors
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
EOF

#4.創(chuàng)建密碼
echo "rsync_backup:oldboy" >/etc/rsync.passwd
chmod 600 /etc/rsync.passwd

#5.創(chuàng)建目錄
mkdir -p /{data,backup}  
chown -R www:www /{data,backup}

#6.啟動
systemctl start rsyncd
systemctl enable rsyncd

#7.檢查
ps -ef|grep rsync
ss -lntup|grep 873
netstat -lntup|grep rsync
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末矮燎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赔癌,更是在濱河造成了極大的恐慌漏峰,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件届榄,死亡現(xiàn)場離奇詭異,居然都是意外死亡倔喂,警方通過查閱死者的電腦和手機铝条,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來席噩,“玉大人班缰,你說我怎么就攤上這事〉渴啵” “怎么了埠忘?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長馒索。 經(jīng)常有香客問我莹妒,道長,這世上最難降的妖魔是什么绰上? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任旨怠,我火速辦了婚禮,結(jié)果婚禮上蜈块,老公的妹妹穿的比我還像新娘鉴腻。我一直安慰自己,他們只是感情好百揭,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布爽哎。 她就那樣靜靜地躺著,像睡著了一般器一。 火紅的嫁衣襯著肌膚如雪课锌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天盹舞,我揣著相機與錄音产镐,去河邊找鬼隘庄。 笑死,一個胖子當(dāng)著我的面吹牛癣亚,可吹牛的內(nèi)容都是我干的丑掺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼述雾,長吁一口氣:“原來是場噩夢啊……” “哼街州!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起玻孟,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤唆缴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后黍翎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體面徽,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年匣掸,在試婚紗的時候發(fā)現(xiàn)自己被綠了趟紊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡碰酝,死狀恐怖霎匈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情送爸,我是刑警寧澤铛嘱,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站袭厂,受9級特大地震影響墨吓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嵌器,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一肛真、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧爽航,春花似錦蚓让、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至衷佃,卻和暖如春趟卸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工锄列, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留图云,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓邻邮,卻偏偏與公主長得像竣况,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子筒严,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

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