第一章 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ù)端 完全備份方式:
增量備份方式:
2.2 備份架構(gòu):
1推(上傳)
2拉 (下載)
3.大量服務(wù)器備份
4.異地備份
第三章 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