第一章 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ù)端
完全備份方式:
增量備份方式:
2.2 備份架構(gòu):
第三章 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.密碼文件是否寫錯