Rsync項(xiàng)目實(shí)踐:數(shù)據(jù)備份
項(xiàng)目需求
基本備份要求
準(zhǔn)備三臺(tái)服務(wù)器,兩臺(tái)web服務(wù)器、一臺(tái)rsync備份服務(wù)器 主機(jī)名分別為web01、web02、backup
主機(jī)名 外網(wǎng)IP
web01 10.0.0.7/24
web02 10.0.0.8/24
backup 10.0.0.41/24
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-rLf7EhNj-1666099690586)(…/…/圖片/image-20221018164708556.png)]
客戶端需求
1.客戶端每天凌晨01點(diǎn)在服務(wù)器本地打包備份(系統(tǒng)配置文件、日志文件、其他目錄、應(yīng)用配置等
文件)
2.客戶端備份的數(shù)據(jù)必須存放至以主機(jī)名IP地址當(dāng)前時(shí)間命名的目錄中,
例 /backup/nfs_10.0.0.31_2018-09-26
3.客戶端最后通過(guò) rsync 推送本地已打包好的備份文件至 backup 服務(wù)器
4.客戶端服務(wù)器本地保留最近7天的數(shù)據(jù), 避免浪費(fèi)磁盤(pán)空間
服務(wù)端需求
1.服務(wù)端部署rsync,用于接收客戶端推送過(guò)來(lái)的備份數(shù)據(jù)
2.服務(wù)端需要每天校驗(yàn)客戶端推送過(guò)來(lái)的數(shù)據(jù)是否完整
3.服務(wù)端需要每天校驗(yàn)的結(jié)果通知給管理員
4.服務(wù)端僅保留3個(gè)月的備份數(shù)據(jù),其余的全部刪除
注意:所有服務(wù)器的備份目錄必須都為/backup
項(xiàng)目需求分析
客戶端需求分析
1.每天凌晨01點(diǎn)在服務(wù)器本地打包備份
? 設(shè)置定時(shí)任務(wù)
crontab -e
0 1 * * * sh /root/rsync_client.sh
2.備份文件
系統(tǒng)配置文件
設(shè)備掛載配置文件 /etc/fstab 本地內(nèi)網(wǎng)配置文件 /etc/hosts
系統(tǒng)日志文件
系統(tǒng)安全日志、rsysloglog日志等 /var/log/
應(yīng)用程序日志
nginx運(yùn)行日志 /etc/nginx/conf.d/
3.客戶端備份的數(shù)據(jù)必須存放至以主機(jī)名IP地址當(dāng)前時(shí)間命名的目錄中,
創(chuàng)建一個(gè)目錄 以主機(jī)名IP地址當(dāng)前時(shí)間命名
獲取主機(jī)名 hostname
獲取主機(jī)IP ip add show ens33 | awk -F'[ /]+' '/inet /{print $3}'
當(dāng)前時(shí)間 date +%F
4.客戶端服務(wù)器本地保留最近7天的數(shù)據(jù), 避免浪費(fèi)磁盤(pán)空間
查找7天以前的內(nèi)容并刪除
find /backup/ -atime +7 -delete
服務(wù)端需求分析
1.服務(wù)端部署rsync,部署郵箱代理(校驗(yàn)完數(shù)據(jù)后反饋校驗(yàn)信息至QQ郵箱)
2.服務(wù)端需要每天校驗(yàn)客戶端推送過(guò)來(lái)的數(shù)據(jù)是否完整
把服務(wù)器需要備份的文件存放在主機(jī)名IP地址當(dāng)前時(shí)間命名的目錄中,對(duì)目錄中的文件進(jìn)行壓縮歸檔。
服務(wù)器和客戶端:
使用md5sum命令生成和校驗(yàn)文件的md5值,并把校驗(yàn)的結(jié)果重定向到以主機(jī)名 IP地址 當(dāng)前時(shí)間 .md5sum命名的文件
把兩個(gè)文件的值進(jìn)行對(duì)比
3.服務(wù)端需要每天校驗(yàn)的結(jié)果通知給管理員
把校驗(yàn)結(jié)果發(fā)送至管理員的郵箱
mail -s "校驗(yàn)的結(jié)果" $管理員的郵箱號(hào) < $mail_file
4.服務(wù)端僅保留3個(gè)月的備份數(shù)據(jù),其余的全部刪除
刪除三個(gè)月之前的文件
find /backup/ -atime +90 -name "*.tar.gz" -delete
項(xiàng)目設(shè)計(jì)
編寫(xiě)shell腳本實(shí)現(xiàn)
客戶端腳本
定義變量
dir=/backup/ #所有服務(wù)器的備份目錄必須都為/backup
host=$(hostname) #獲取主機(jī)名
ip=$(ip add show ens33 | awk -F'[ /]+' '/inet /{print $3}') #獲取IP地址
date=$(date +%F) #顯示當(dāng)前日期
bak_dir=$dir$host-$ip-$date #客戶端備份的數(shù)據(jù)必須存放至以主機(jī)名IP地址當(dāng)前時(shí)間命名的目錄中
conf_bak="/etc/passwd /etc/fstab /etc/hosts /etc/nginx/conf.d/" #需要備份的系統(tǒng)配置文件
log_bak="/var/log /etc/nginx/logs/" #需要備份的日志文件
other_bak="/etc/rsync.password" #rsync的密碼文件
rsync_srv=10.0.0.41 #服務(wù)器IP
rsync_user=rsync_user #用戶名
rsync_dir=backup #目錄
rsync_cmd="rsync -avz" #使用rsync實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)同步 壓縮后使用歸檔模式傳輸 并以詳細(xì)模式輸出
服務(wù)端腳本
定義變量
dir=/backup/ #所有服務(wù)器的備份目錄必須都為/backup
date=$(date +%F) #當(dāng)前日期
mail_file="/root/mail_md5sum_result" #使用md5校驗(yàn),把校驗(yàn)結(jié)果存放至文件中
adm_email="管理員的郵箱"
項(xiàng)目實(shí)施
客戶端腳本
vim rsync_client.sh
#!/bin/bash
dir=/backup/
host=$(hostname)
ip=$(ip add show ens33 | awk -F'[ /]+' '/inet /{print $3}')
date=$(date +%F)
bak_dir=$dir$host-$ip-$date
conf_bak="/etc/passwd /etc/fstab /etc/hosts /etc/nginx/conf.d/"
log_bak="/var/log /etc/nginx/logs/"
other_bak="/etc/rsync.password"
rsync_srv=10.0.0.41
rsync_user=rsync_user
rsync_dir=backup
rsync_cmd="rsync -avz"
export RSYNC_PASSWORD=1
mkdir -p $bak_dir/{confs,logs,scripts,others} #創(chuàng)建需要備份的文件目錄
#把文件復(fù)制到指定的目錄下 并把結(jié)果丟至黑洞
cp -r $conf_bak $bak_dir/confs &>/dev/null
cp -r $log_bak $bak_dir/logs &>/dev/null
cp -r $other_bak $bak_dir/others &>/dev/null
#在添加文檔至歸檔后刪除源文件(打包后刪除源文件)
tar czf $bak_dir.tar.gz $bak_dir --remove-files &> /dev/null
#md5sum命令生成和校驗(yàn)文件的md5值,并把校驗(yàn)的結(jié)果重定向到以主機(jī)名 IP地址 當(dāng)前時(shí)間 .md5sum命名的文件
md5sum $bak_dir.tar.gz > $bak_dir.md5sum
$rsync_cmd $dir $rsync_user@$rsync_srv::$rsync_dir &>/dev/null
#本地資源保留7天
find $dir -atime +7 -delete &> /dev/null
客戶端計(jì)劃任務(wù)
crontab -e
0 1 * * * sh /root/rsync_client.sh
服務(wù)端腳本
vim rsync_server.sh
#!/bin/bash
dir=/backup/
date=$(date +%F)
mail_file="/root/mail_md5sum_result"
adm_email="你自己的郵箱"
find $dir -name "*$date.md5sum" | xargs md5sum -c > $mail_file
mail -s "rsync_result" $adm_email < $mail_file &> /dev/null
#校驗(yàn)信息保留三天
find $dir -atime +3 -name "*.md5sum" -delete
#備份數(shù)據(jù)庫(kù)三個(gè)月
find $dir -atime +90 -name "*.tar.gz" -delete
服務(wù)端計(jì)劃任務(wù)
crontab -e
0 3 * * * sh /root/rsync_server.sh
項(xiàng)目驗(yàn)收
在客戶端10.0.0.7上運(yùn)行腳本
在客戶端10.0.0.8上運(yùn)行腳本
在服務(wù)器上運(yùn)行腳本
設(shè)置郵箱的文件
項(xiàng)目中出現(xiàn)的問(wèn)題匯總
使用什么樣的校驗(yàn)方式 diff 還是md5
Linux diff命令用于比較文件的差異。diff以逐行的方式,比較文本文件的異同處。特別是比較兩個(gè)版本不同的文件,如果指定要比較目錄,則diff會(huì)比較目錄中相同文件名的文件,但不會(huì)比較其中子目錄。比較文件夾diff,可以直接使用diff命令
md5sum
用于計(jì)算和校驗(yàn)文件的MD5值
MD5,是一種單向加密,它的加密不可逆,它將任意長(zhǎng)度的字符串,經(jīng)過(guò)算法計(jì)算后生成固定長(zhǎng)度的數(shù)據(jù),一般為16位表示。
MD5的用途:
1. 消息完整性:每份數(shù)據(jù)生成的MD5碼不同,所以可以吧MD5碼和數(shù)據(jù)一塊發(fā)送,在對(duì)端使用MD5加密對(duì)數(shù)據(jù)加密在與接收的MD5碼做對(duì)比,保證數(shù)據(jù)的正確性。
2. 安全訪問(wèn)認(rèn)證:常被用到 mysql和傳遞用戶賬戶信息和密碼,從用戶端發(fā)送到服務(wù)器的只是一段128位的摘要,服務(wù)器拿到后直接將其存入數(shù)據(jù)庫(kù),下次登錄只需與服務(wù)器的密文進(jìn)行對(duì)比即可,這樣保護(hù)了用戶的信息,即便是后臺(tái)人員也無(wú)法去獲取用戶的賬戶密碼。
3. 數(shù)字簽名
其他加密算法
非對(duì)稱加密:包括RSA DSA RCC,非對(duì)稱加密是相比對(duì)稱加密而言的。
對(duì)稱加密:包括AES,DES,3DES
對(duì)稱加密與解密使用的是同樣的密鑰,但由于需要將密鑰在網(wǎng)絡(luò)傳輸,所以安全性不高
非對(duì)稱加密使用了一對(duì)密鑰,公鑰與私鑰,把以安全性高,但加密與解密速度慢
解決的辦法是將對(duì)稱加密的密鑰使用非對(duì)稱加密的公鑰進(jìn)行加密,然后發(fā)送出去,接收方使用私鑰進(jìn)行解密得到對(duì)稱加密的密鑰,然后雙方可以使用對(duì)稱加密來(lái)進(jìn)行溝通
如何把校驗(yàn)結(jié)果以郵箱的形式發(fā)給管理者
安裝郵件服務(wù)
yum install -y mailx
vim /etc/mail.rc文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-404849.html
set from=2414857437@qq.com (自己的QQ郵箱)
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=2414857437@qq.com (自己的QQ郵箱)
set smtp-auth-password=XXXX (自己的郵箱IPMPA碼)
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
使用echo “郵件正文” | mail -s 郵件標(biāo)題 郵箱文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-404849.html
到了這里,關(guān)于?。。。〗ㄗh收藏 Rsync項(xiàng)目實(shí)踐:數(shù)據(jù)備份 (文件同步到服務(wù)器)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!