1. 程式人生 > 其它 >Rsync備份伺服器

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監聽埠:873

rsync執行模式:C/S

全量備份:

假設客戶端上有file1 file2 file3檔案,服務端上有file1 file2檔案,現要將客戶端上的資料備份至服務端

全量備份,將客戶端所有的資料內容file1 file2 file3全部備份至服務端 (效率低下, 佔用空間)

增量備份,只將客戶端的file3增量備份至服務端 (提高備份效率,節省空間, 適合異地備份 )

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

大量伺服器備份場景

通過ssh通道傳輸資料,類似scp命令

#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]      #目標對應位置

rsync自身非常重要的功能(不使用系統使用者,更加安全)

#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.....

  1. 客戶端備份實現思路,每天凌晨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 測試服務功能

很高興各位朋友能欣賞作品,本文版權歸作者和部落格園共有,歡迎轉載,請在文章頁面明顯位置給出原文出處,否則將追究法律責任。 原文連結: https://www.cnblogs.com/strugger-0316