Rsync備份伺服器
第1章 Rsync服務
Rsync是一款開源的、快速的、多功能的、可實現全量及增量的本地或遠端資料同步備份的優秀工具
rsync軟體使用方法:
rsync命令 1v4
1.1 本地備份資料 cp
[root@nfs01 backup]# cp /etc/hosts /tmp [root@nfs01 backup]# ll /tmp/hosts -rw-r--r-- 1 root root 371 May 6 16:11 /tmp/hosts [root@nfs01 backup]# rsync /etc/hosts /tmp/host_rsync [root@nfs01 backup]# ll /tmp/host_rsync -rw-r--r-- 1 root root 371 May 6 16:12 /tmp/host_rsync
1.2 遠端備份資料 scp
scp -rp /etc/hosts [email protected]:/backup [email protected]'s password: hosts 100% 371 42.8KB/s 00:00
-r --- 遞迴複製傳輸資料
-p --- 保持檔案屬性資訊不變
[root@nfs01 ~]# rsync -rp /etc/hosts 172.16.1.41:/backup/hosts_rsync [email protected]'s password:
rsync遠端備份目錄:
[root@nfs01 ~]# rsync -rp /oldboy 172.16.1.41:/backup --- 備份的目錄後面沒有 / [email protected]'s password: [root@backup ~]# ll /backup total 0 drwxr-xr-x 2 root root 48 May 6 16:22 oldboy [root@backup ~]# tree /backup/ /backup/ └── oldboy ├── 01.txt ├── 02.txt └── 03.txt 1 directory, 3 files [root@nfs01 ~]# rsync -rp /oldboy/ 172.16.1.41:/backup --- 備份的目錄後面有 / [email protected]'s password: [root@backup ~]# ll /backup total 0 -rw-r--r-- 1 root root 0 May 6 16:24 01.txt -rw-r--r-- 1 root root 0 May 6 16:24 02.txt -rw-r--r-- 1 root root 0 May 6 16:24 03.txt
總結: 在使用rsync備份目錄時:
備份目錄後面有 / -- /oldboy/ : 只將目錄下面的內容進行備份傳輸
備份目錄後面沒有/ -- /oldboy : 會將目錄本身以及下面的內容進行傳輸備份
1.3 替代刪除命令
rm命令 [root@nfs01 ~]# rsync -rp --delete /null/ 172.16.1.41:/backup [email protected]'s password: --delete 實現無差異同步資料
面試題
有一個儲存資料資訊的目錄, 目錄中資料儲存了50G資料, 如何將目錄中的資料快速刪除 rm /目錄/* -rf
替代檢視檔案命令 ls
[root@backup ~]# ls /etc/hosts /etc/hosts [root@backup ~]# rsync /etc/hosts -rw-r--r-- 371 2019/05/06 11:55:22 hosts
全量備份:
rsync命令語法格式
SYNOPSIS
Local: rsync [OPTION...] SRC... [DEST]
本地備份資料:
src: 要備份的資料資訊
dest: 備份到什麼路徑中
遠端備份資料:
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
[USER@] --- 以什麼使用者身份拉取資料(預設以當前使用者)
hosts --- 指定遠端主機IP地址或者主機名稱
SRC --- 要拉取的資料資訊
dest --- 儲存到本地的路徑資訊
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
SRC --- 本地要進行遠端傳輸備份的資料
[USER@] --- 以什麼使用者身份推送資料(預設以當前使用者)
hosts --- 指定遠端主機IP地址或者主機名稱
dest --- 儲存到遠端的路徑資訊
守護程序方式備份資料 備份服務
01. 可以進行一些配置管理
02. 可以進行安全策略管理
03. 可以實現自動傳輸備份資料
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
大量伺服器備份場景
#pull拉取資料命令 Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] #pull拉取資料示例 [root@backup ~]# rsync -avz [email protected]:/etc/hostname ./ #拉取遠端檔案 [root@backup ~]# rsync -avz [email protected]:/root/ /backup/ #拉取遠端目錄下的所有檔案 [root@backup ~]# rsync -avz [email protected]:/root /backup/ #拉取遠端目錄以及目錄下的所有檔案 Pull #拉取, 下載 rsync #備份命令 [options] #選項 [USER@] #目標主機的系統使用者 HOST #目主機IP地址或域名 SRC... #目標主機原始檔 [DEST] #下載至本地哪個位置 #push推送資料命令 Push: rsync [OPTION...] SRC... [USER@]HOST:DEST #push推送資料示例 rsync -avz /backup/2018-10-01 [email protected]:/tmp/ Push #推送, 上傳 rsync #備份命令 [options] #選項 SRC... #本地原始檔 [USER@] #目標主機的系統使用者 HOST #目主機IP地址或域名 [DEST] #目標對應位置
#pull拉取資料命令 Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] #1.拉取rsync備份服務的"backup模組"至本地/mnt目錄 [root@nfs01 ~]# rsync -avz [email protected]::backup/ /mnt/ --password-file=/etc/rsync.password rsync #命令 [OPTION...] #選項 [USER@] #遠端主機使用者(虛擬使用者) HOST:: #遠端主機地址 SRC... #遠端主機模組(不是目錄) [DEST] #將遠端主機資料備份至本地什麼位置 #push推送資料命令 Push: rsync [OPTION...] SRC... [USER@]HOST::DEST #2.將本地/mnt目錄推送至rsync備份伺服器的"backup模組" [root@nfs01 ~]# rsync -avz /mnt/ [email protected]::backup/ --password-file=/etc/rsync.password rsync #命令 [OPTION...] #選項 SRC... #遠端主機模組(不是目錄) [USER@] #遠端主機使用者(虛擬使用者) HOST:: #遠端主機地址 [DEST] #將遠端主機模組備份至本地什麼位置
第2章 rsync守護程序部署方式
客戶端---服務端
rsync守護程序服務端配置:
第一個歷程: 下載安裝軟體
rpm -qa|grep rsync yum install -y rsync
第二個歷程: 編寫配置檔案
man rsyncd.conf vim /etc/rsyncd.conf created by HQ at 2017 rsyncd.conf start uid = rsync --- 指定管理備份目錄的使用者
gid = rsync --- 指定管理備份目錄的使用者組
port = 873 --- 定義rsync備份服務的網路埠號
fake super = yes --- 將rsync虛擬使用者偽裝成為一個超級管理員使用者
use chroot = no --- 和安全相關的配置
max connections = 200 --- 最大連線數 同時只能有200個客戶端連線到備份伺服器
timeout = 300 --- 超時時間(單位秒)
pid file = /var/run/rsyncd.pid --- 記錄程序號碼資訊 1.讓程式快速停止程序 2. 判斷一個服務是否正在執行
lock file = /var/run/rsync.lock --- 鎖檔案
log file = /var/log/rsyncd.log --- rsync服務的日誌檔案 用於排錯分析問題
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 = "backup dir by oldboy"
path = /backup --- 模組中配置引數 指定備份目錄
第三個歷程: 建立rsync服務的虛擬使用者
[root@nfs01 ~]# rsync -avz /backup/ [email protected]::backup/
useradd rsync -M -s /sbin/nologin
第四個歷程: 建立備份服務認證密碼檔案
echo "rsync_backup:oldboy123" >/etc/rsync.password chmod 600 /etc/rsync.password
第五個歷程: 建立備份目錄並修改屬主屬組資訊
mkdir /backup chown rsync.rsync /backup/
第六個歷程: 啟動備份服務
systemctl start rsyncd systemctl enable rsyncd systemctl status rsyncd
需要熟悉rsync守護程序名稱語法:
Access via rsync daemon:
客戶端做拉的操作: 恢復資料
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
客戶端做退的操作: 備份資料
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
src: 要推送備份資料資訊
[USER@]: 指定認證使用者資訊
HOST: 指定遠端主機的IP地址或者主機名稱
::DEST: 備份伺服器的模組資訊
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
rsync守護程序客戶端配置:
第一個歷程: 建立一個祕密檔案
echo "oldboy123" >/etc/rsync.password chmod 600 /etc/rsync.password
第二個歷程: 進行免互動傳輸資料測試
rsync -avz /etc/hosts [email protected]::backup --password-file
=/etc/rsync.password
rsync命令引數詳細說明
-v, --verbose 顯示詳細的傳輸資訊 -a, --archive 命令的歸檔引數 包含: rtopgDl -r, --recursive 遞迴引數 -t, --times 保持檔案屬性資訊時間資訊不變(修改時間) -o, --owner 保持檔案屬主資訊不變 -g, --group 保持檔案屬組資訊不變 PS: 如何讓-o和-g引數生效,需要將配置檔案uid和gid改為root,需要將 fake super引數進行註釋 -p, --perms 保持檔案許可權資訊不變 -D, 保持裝置檔案資訊不變 -l, --links 保持連結檔案屬性不變 -L, 保持連結檔案資料資訊不變 -P, 顯示資料傳輸的進度資訊 --exclude=PATTERN 排除指定資料不被傳輸 --exclude-from=file 排除指定資料不被傳輸(批量排除) --bwlimit=RATE 顯示傳輸的速率 100Mb/8=12.5MB 企業案例: 馬路(頻寬-半) 人人網地方 --delete 無差異同步引數(慎用) 我有的你也有,我沒有的你也不能有
第三章 守護程序服務企業應用
a. 守護程序多模組功能配置
sa sa_data.txt dev dev_data.txt dba dba_data.txt [backup] comment = "backup dir by oldboy" path = /backup [dba] comment = "backup dir by oldboy" path = /dba [dev] comment = "backup dir by oldboy" path = /devdata
b. 守護程序的排除功能實踐
準備環境:
[root@nfs01 /]# mkdir -p /oldboy [root@nfs01 /]# mkdir -p /oldboy/{a..c} [root@nfs01 /]# touch /oldboy/{a..c}/{1..3}.txt [root@nfs01 /]# tree /oldboy /oldboy ├── 01.txt ├── 02.txt ├── a │?? ├── 1.txt │?? ├── 2.txt │?? └── 3.txt ├── b │?? ├── 1.txt │?? ├── 2.txt │?? └── 3.txt └── c ├── 1.txt ├── 2.txt └── 3.txt
例項01: 將/oldboy目錄下面 a目錄資料全部備份 b目錄不要備份1.txt檔案 c整個目錄不要做備份
--exclude=PATTERN
絕對路徑方式:
[root@nfs01 /]# rsync -avz /oldboy --exclude=/oldboy/b/1.txt --exclude=/oldboy/c/ [email protected]::backup --password-file=/etc/rsync.password sending incremental file list oldboy/ oldboy/01.txt oldboy/02.txt oldboy/a/ oldboy/a/1.txt oldboy/a/2.txt oldboy/a/3.txt oldboy/b/ oldboy/b/2.txt oldboy/b/3.txt
相對路徑方式:
[root@nfs01 /]# rsync -avz /oldboy --exclude=b/1.txt --exclude=c/ [email protected]::backup --password-file=/etc/rsync.password sending incremental file list oldboy/ oldboy/01.txt oldboy/02.txt oldboy/a/ oldboy/a/1.txt oldboy/a/2.txt oldboy/a/3.txt oldboy/b/ oldboy/b/2.txt oldboy/b/3.txt sent 502 bytes received 177 bytes 1,358.00 bytes/sec total size is 0 speedup is 0.00
例項02: 將/oldboy目錄下面 a目錄資料全部備份 b目錄不要備份1.txt檔案 c整個目錄1.txt 3.txt檔案不要備份
--exclude-from=file --- 批量排除
第一個歷程: 編輯好一個排除檔案
[root@nfs01 /]# cat /oldboy/exclude.txt b/1.txt c/1.txt c/3.txt exclude.txt
第二個歷程: 實現批量排除功能
[root@nfs01 /]# rsync -avz /oldboy --exclude-from=/oldboy/exclude.txt [email protected]::backup --password-file=/etc/rsync.password sending incremental file list oldboy/ oldboy/01.txt oldboy/02.txt oldboy/a/ oldboy/a/1.txt oldboy/a/2.txt oldboy/a/3.txt oldboy/b/ oldboy/b/2.txt oldboy/b/3.txt oldboy/c/ oldboy/c/2.txt
c. 守護程序來建立備份目錄
[root@nfs01 /]# rsync -avz /etc/hosts [email protected]::backup/10.0.0.31/ --password-file=/etc/rsync.password sending incremental file list created directory 10.0.0.31 hosts sent 226 bytes received 75 bytes 602.00 bytes/sec total size is 371 speedup is 1.23
PS: 客戶端無法在服務端建立多級目錄
d. 守護程序的訪問控制配置
守護程序白名單和黑名單功能
PS: 建議只使用一種名單
e. 守護程序的列表功能配置
[root@nfs01 /]# rsync [email protected]:: backup "backup dir by oldboy" dba "backup dir by oldboy" dev "backup dir by oldboy"
Rsync備份案例
使用3臺伺服器主機名分別為web01、backup 、nfs
主機資訊見下表:
角色 | 外網IP(WAN) | 內網IP(LAN) | 主機名 | |
---|---|---|---|---|
WEB | eth0:10.0.0.7 | eth1:172.16.1.7 | web01 | |
NFS | eth0:10.0.0.31 | eth1:172.16.1.31 | nfs01 | |
Rsync | eth0:10.0.0.41 | eth1:172.16.1.41 | backup |
客戶端需求
1.客戶端提前準備存放的備份的目錄,目錄規則如下:/backup/nfs_172.16.1.31_2018-09-02
2.客戶端在本地打包備份(系統配置檔案、應用配置等)拷貝至/backup/nfs_172.16.1.31_2018-09-02
3.客戶端最後將備份的資料進行推送至備份伺服器
4.客戶端每天凌晨1點定時執行該指令碼
5.客戶端伺服器本地保留最近7天的資料, 避免浪費磁碟空間
服務端需求
1.服務端部署rsync,用於接收客戶端推送過來的備份資料
2.服務端需要每天校驗客戶端推送過來的資料是否完整
3.服務端需要每天校驗的結果通知給管理員
4.服務端僅保留6個月的備份資料,其餘的全部刪除
注意:所有伺服器的備份目錄必須都為/backup
建議備份的資料內容如下:
# 1.開機自啟動配置檔案 裝置掛載配置檔案 本地內網配置檔案 (系統配置檔案)
/etc/rc.local /etc/fstab /etc/hosts
# 2.cron定時任務 firewalld防火牆 指令碼目錄 (重要目錄)
/var/spool/cron/ /etc/firewalld /server/scripts
# 3.系統日誌檔案
/var/log/ /系統安全日誌、sudo日誌、核心日誌、rsyslog日誌
# 4.應用程式服務配置檔案 nginx、PHP、mysql、redis.....
-
客戶端備份實現思路,每天凌晨01點定時執行一次指令碼(打包->標記->推送->保留最近7天的檔案)
[root@nfs scripts]# vim /server/scripts/client_rsync_backup.sh #!/usr/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.建立備份目錄 [ -d $Path/$Dest ] || mkdir -p $Path/$Dest # 3.備份對應的檔案 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驗證資訊 [ -f $Path/$Dest/flag ] || md5sum $Path/$Dest/*.tar.gz >$Path/$Dest/flag_$Date # 5.推送本地資料至備份伺服器 export RSYNC_PASSWORD=123456 rsync -avz $Path/ [email protected]::backup # 6.本地保留最近7天的資料 find $Path/ -type d -mtime +7 | xargs rm -rf
2.客戶端編寫定時任務,讓備份每天凌晨1點執行 00 01 * * * /bin/bash /server/scripts/client_rsync_backup.sh &>/dev/null 3.服務端校驗客戶端推送資料的完整性, (校驗->儲存校驗結果->將儲存的結果通過郵件傳送給管理員->保留最近180天的資料) # 1.服務端配置郵件功能 [root@backup /]# yum install mailx -y [root@backup /]# vim /etc/mail.rc # 檔案最後新增 set [email protected] # 郵件來源(發件人) set smtp=smtps://smtp.qq.com:465 # smtp伺服器地址 set [email protected] # 發件人郵箱帳號 set smtp-auth-password=xcvzpqgrjtmuecaa # smtp客戶端授權密碼,登入郵箱設定,並非郵箱密碼! set smtp-auth=login # 需要登入認證 set ssl-verify=ignore # 忽略證書警告 set nss-config-dir=/etc/pki/nssdb/ # 證書所在目錄 # 2.服務端校驗、以及郵件通知指令碼 [root@backup ~]# mkdir /server/scripts -p [root@backup ~]# vim /server/scripts/check_backup.sh #!/usr/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檔案,並對該檔案進行校驗, 然後將校驗的結果儲存至result_時間 find $Path/ -type f -name "flag_$Date"|xargs md5sum -c >$Path/result_${Date} # 4.將校驗的結果傳送郵件給管理員 mailx -s "Rsync Backup $Date" [email protected] <$Path/result_${Date} # 5.刪除超過7天的校驗結果檔案, 刪除超過180天的備份資料檔案 find $Path/ -type f -name "result*" -mtime +7|xargs rm -f find $Path/ -type d -mtime +180|xargs rm -rf 4.服務端編寫定時任務指令碼 00 05 * * * /bin/bash /server/scripts/check_backup.sh &>/dev/null 擴充套件多臺客戶端 5.對其他客戶端重複1. 2. 步即可
rsync服務部署安裝過程
linux系統安裝部署服務流程:
a 下載安裝軟體 yum
b 編寫配置檔案
c 搭建服務環境 備份的目錄/目錄許可權
d 啟動服務程式 開機自動啟動
e 測試服務功能