rsync擴展
環(huán)境準備:
NFS01:
[root@nfs01 ~]# mkdir /data -p
[root@nfs01 ~]# cd /data
[root@nfs01 /data]# touch {a..d}
[root@nfs01 /data]# ls
a? b? c? d
實現(xiàn):
--exclude 排除參數(shù)
例:排除 a b
[root@nfs01 /data]# rsync -avz /data/ --exclude=a --exclude=b? rsync_backup@172.16.1.41::backup
sending incremental file list
./
c
d
排除1到4
[root@nfs01 /data]# touch {1..5}
[root@nfs01 /data]# rsync -avz /data/ --exclude={1..4}? rsync_backup@172.16.1.41::backup
sending incremental file list
./
5
a
b
[root@nfs01 /data]# rsync -avz /data/ --exclude={1,3,a}? rsync_backup@172.16.1.41::backup
sending incremental file list
2
4
--exclude-from 從文件排除
[root@nfs01 /data]# rsync -avz /data/ --exclude-from=./paichu.txt? rsync_backup@172.16.1.41::backup
sending incremental file list
./
16
17
18
19
20
paichu.txt
rsync作為鏡像,相當于raid1,讓兩臺服務器目錄保持一致。
--delete 讓兩臺服務器目錄保持一致
推送:
rsync -avz --delete /data/? rsync_backup@172.16.1.41::backup
本地目錄有啥,遠端就有啥谤逼。
注意:遠端目錄是不是東西更多,多了東西會被刪除仇穗。提前備份backup對應的目錄流部。
rsync -avz --delete rsync_backup@172.16.1.41::backup /data/
遠端有什么。本地目錄就有什么纹坐,注意本地/data目錄枝冀。把/data改成根。提前注意備份本地/data
--partial 支持大文件斷點續(xù)傳
--bwlimit=KBPS 限速耘子。
某上市公司,白天高峰期某DBA人員從數(shù)據庫服務器通過rsync將上百GB數(shù)據復制到備份服務器谷誓,導致數(shù)據庫庫服務器帶寬占滿绒障,造成用戶無法訪問網站的悲劇。其實可以利用rsync限速功能捍歪,將復制速度限制在剩余帶寬的1/3或者1/2端盆,可能就不會出現(xiàn)故障了
1.最簡單的實現(xiàn)费封,可以在配置文件結尾加如下內容(特殊底紋部分):
[root@backup ~]# cat /etc/rsyncd.conf
#rsync_config_______________start
#created by oldboy
#site: http://www.oldboyedu.com
uid = rsync
gid = rsync
use chroot = no
fake super = yes
max connections = 200
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = welcome to oldboyedu backup.
path = /backup/
[data]? ? ? ? #<==新模塊焕妙。
path = /data/? #<==新備份目錄。
除了增加以上兩行外弓摘,讀者也可以設定更多的獨立配置參數(shù)焚鹊,例如:獨立虛擬用戶,獨立密碼文件等韧献。
[root@backup ~]# mkdir -p /data
[root@backup ~]# chown -R rsync.rsync /data
[root@backup ~]# ls -ld /data
drwxr-xr-x 2 rsync rsync 6 4月? 16 10:04 /data
[root@backup ~]# systemctl restart rsyncd
[root@backup ~]# ls /data
etc
程序員開發(fā)代碼(他電腦上)==>代碼服務上(git/svn代碼版本管理)==>測試環(huán)境測試===>正式環(huán)境
原則上程序代碼可以不備份。
運維人員渊啰,寫個定時任務探橱,寫個備份腳本申屹,更改或增加服務配置rsyncd.conf,需要備份
運維人員修改配置(測試服務器)==>代碼服務器上(git/svn代碼版本管理)==>測試環(huán)境測試===>正式環(huán)境
原則上運維人員的變更可以不備份隧膏。
圖片、視頻等文件是放在存儲服務器上的胞枕,任意時刻都可能傳上來杆煞,必須實時備份。
文本(博客文章)腐泻,放在數(shù)據庫里决乎,,任意時刻都可能發(fā)布派桩,必須實時備份瑞驱。
Rsync 企業(yè)級全網備份項目
隨著互聯(lián)網大環(huán)境的不斷蓬勃發(fā)展,社會上各個行業(yè)都不斷轉變思路,拓展自
己的業(yè)務領域,向著互聯(lián)網企業(yè)進行轉型,轉型后的企業(yè)也在不斷擴展著自身的互
聯(lián)網架構.隨著架構不斷的擴展,架構中的服務器數(shù)量也在不斷增多凳寺,由原來的幾
臺變?yōu)閹资_鸭津,甚至幾百臺的規(guī)模。此時由于服務器數(shù)量的增多肠缨,對服務器中數(shù)
據的管理備份也隨之變的復雜逆趋,傳統(tǒng)的本地備份或簡單的 scp 復制到存儲服務器
的備份解決方案,已遠遠不能有效的解決規(guī)模壯大后的架構需求晒奕。因此急需一種
更為智能的解決方案來完成備份數(shù)據需求闻书,保證整體架構數(shù)據的安全可靠性。
某公司里有一臺 web 服務器魄眉,里面的數(shù)據很重要,但是如果硬盤壞了闷袒,數(shù)據
就會丟失坑律,現(xiàn)在領導要求把數(shù)據做備份,這樣 web 服務器數(shù)據丟失可以進行恢復囊骤,
要求如下:
每天晚上 00 點整在 web 服務器 A 上打包備份系統(tǒng)配置文件晃择、網站程序目錄
及訪問日志并通過 rsync 命令推送到服務器 B 上備份保留(備份思路可以是先在
本地按日期打包,然后再推到備份服務器 B 上)
已知 3 臺服務器主機名分別為 web01也物、backup 宫屠、nfs01,主機信息如下
名稱外網IP內網IP主機名稱
nginx web ? ? 服務器 ? ? ? 10.0.0.7/24172.16.1.7/24web01
NFS ? ? ? ?? 存儲服務器 ?? 10.0.0.31/24172.16.1.31/24nfs01
rsync ? ? ?? 備份服務器 ?? 10.0.0.41/24172.16.1.41/24backup
所有服務器的備份目錄必須都為/backup
要備份的系統(tǒng)配置文件包括但不限于:
a) 定時任務服務的配置文件 (/var/spool/cron/root) (適合 web 和 nfs 服務器)浪蹂。
b) 開機自啟動的配置文件 (/etc/rc.local) (適合 web 和 nfs 服務器)抵栈。
c) 日常腳本的目錄 (/server/scripts)。
Web 服務器站點目錄假定為/var/html/www乌逐,如果沒有可以先模擬創(chuàng)建竭讳。
Web 服務器訪問日志路徑假定為/app/logs,如果沒有可以先模擬創(chuàng)建浙踢。
Web 服務器本地保留打包后的 7 天備份數(shù)據即可(本地留存不能多于 7 天绢慢,因為太多硬盤會滿)。
備份服務器 backup 上,保留最近 7 天的備份數(shù)據洛波,同時保留 6 個月內每周一的所有數(shù)據副本胰舆。
備份服務器上,要按照備份數(shù)據服務器的內網 IP 為目錄保存?zhèn)浞荩瑐浞莸奈募凑諘r間名字保存蹬挤。
需要確保備份的數(shù)據盡量完整正確缚窿,在備份服務器上對備份的數(shù)據是否完整進行檢查。
每天早晨 8:00 把備份成功或失敗結果信息發(fā)給系統(tǒng)管理員郵箱中焰扳。
服務器說明備份目錄目錄說明備注
all serve/backup備份目錄統(tǒng)一服務器本地備份目錄倦零,便于管理
all serve/var/spool/cron/roo定時任務服務配置文件
all serve/etc/rc.local開機自啟動配置文件
all serve/server/scripts日常腳本目錄統(tǒng)一服務器本地腳本目錄,便于管理
web server/var/html/wwwweb 服務器站點目錄mkdir -p /var/html/www
web server/app/logsweb 服務器訪問日志路徑mkdir –p /app/logs
解決方案
backup服務器配置好rsync
web01扫茅、nfs01配置好密碼
參考:參考內容
/var/spool/cron/root
/etc/rc.local
/server/scripts
/var/html/www
/app/logs
Web 服務器本地保留打包后的 7 天備份數(shù)據即可(本地留存不能多于 7 天
備份服務器上,要按照備份數(shù)據服務器的內網 IP 為目錄保存?zhèn)浞萦希瑐浞莸奈?/p>
件按照時間名字保存
上傳本地創(chuàng)建好以IP地址的文件即可
需要確保備份的數(shù)據盡量完整正確葫隙,在備份服務器上對備份的數(shù)據是否完整
進行檢查
將打包好的文件上傳即可
在命令行執(zhí)行命令一一實現(xiàn)功能后,再將命令寫入腳本中躏仇,執(zhí)行成功后再編寫定時任務即可
為虛擬環(huán)境因此需要創(chuàng)建沒有的目錄
mkdir -p /server/scripts /var/html/www /app/logs /backup
命令行執(zhí)行打包命令:
[root@web01 /]# tar zcvhf /backup/bak_$(date +%F_%w).tar.gz /var/spool/cron/root /etc/rc.local
/server/scripts /var/html/www /app/logs
編寫腳本:
cd /server/scripts/
vim bak.sh
#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
export RSYNC_PASSWORD=oldboy
IP=$(hostname -i)
mkdir -p /backup/$IP
#1.打包
tar zchf /backup/$IP/bak_${IP}_$(date +%F_%w).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /var/html/www /app/logs &>/dev/null &&\
touch /backup/$IP/bak_${IP}_$(date +%F_%w).flag &&\
#采集指紋
find /backup/ -type f -name "*$(date +%F_%w).tar.gz"|xargs md5sum >/backup/$IP/bak_${IP}_$(date +%F_%w).flag &&\
#2.刪除
find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f &&\
#3.推送
rsync -az /backup/ rsync_backup@172.16.1.41::backup &>/dev/null
執(zhí)行/bin/sh /server/scripts/bak.sh
檢查backup上是否存在以本機地址的命名的文件
編寫定時任務:
[root@web01 /server/scripts]# crontab -e
[root@web01 /server/scripts]# crontab -l|tail -2
######back.....
00 00 * * * /bin/sh /server/scripts/bak.sh >/dev/null 2>&1
[root@web01 /server/scripts]# find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f
ntfs服務器的腳本配置只需要把/var/html/www /app/logs這兩個文件去掉即可
備份服務器 backup 上,保留最近 7 天的備份數(shù)據,同時保留 6 個月內每周一的所有數(shù)據副本焰手。
在備份服務器上對備份的數(shù)據是否完整進行檢查
每天早晨 8:00 把備份成功或失敗結果信息發(fā)給系統(tǒng)管理員郵箱中
yum install mailx -y
teil -1 /etc/mail.rc
set from=13088229550@163.com smtp=smtp.163.com smtp-auth-user=13088229550@163.com? smtp-auth- password=xxxx? smtp-auth=login
systemctl reatart mail
其中password的數(shù)據是授權碼
#!/bin/sh
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
if [ $(date +%w) -eq 1 ]
then
:
else
? ? find /backup/ -type f -name "*.tar.gz" -mtime +180|xargs rm -f &&\
? ? find /backup/ -type f -name "*_$(date +%w).tar.gz" -mtime +7|xargs rm -f
fi
find /backup -type f -name "*$(date +%F_%w).flag"|xargs md5sum -c >/tmp/fail.log
mail -s "$(date +%F_+%T)backup data error" 1771617190@qq.com </tmp/fail.log
首先查看自己的郵箱是否有郵件