Rsync備份服務器

第1章 Rsync服務  

  Rsync是一款開源的、快速的、多功能的、可實現全量及增量的本地或遠程數據同步備份的優秀工具
    rsync軟件使用方法:
    rsync命令  1v4mysql

  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 root@172.16.1.41:/backup
root@172.16.1.41's password:
hosts   100%  371    42.8KB/s   00:00

    -r    --- 遞歸複製傳輸數據
    -p    --- 保持文件屬性信息不變linux

[root@nfs01 ~]# rsync -rp /etc/hosts 172.16.1.41:/backup/hosts_rsync
root@172.16.1.41's password:     

    rsync遠程備份目錄:nginx

[root@nfs01 ~]# rsync -rp /oldboy 172.16.1.41:/backup   --- 備份的目錄後面沒有 /
root@172.16.1.41'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  --- 備份的目錄後面有 /
 root@172.16.1.41'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  : 會將目錄自己以及下面的內容進行傳輸備份web

  1.3 替代刪除命令

rm命令
[root@nfs01 ~]# rsync -rp --delete /null/ 172.16.1.41:/backup
root@172.16.1.41'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監聽端口:873redis

rsync運行模式:C/Ssql

全量備份:shell

假設客戶端上有file1 file2 file3文件,服務端上有file1 file2文件,現要將客戶端上的數據備份至服務端vim

全量備份,將客戶端全部的數據內容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 root@172.16.1.41:/etc/hostname ./   #拉取遠程文件
[root@backup ~]# rsync -avz root@172.16.1.41:/root/ /backup/   #拉取遠程目錄下的全部文件
[root@backup ~]# rsync -avz root@172.16.1.41:/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 root@172.16.1.41:/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 rsync_backup@172.16.1.41::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/ rsync_backup@172.16.1.41::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/ rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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/ rsync_backup@172.16.1.41::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/ rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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  rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::
backup           "backup dir by oldboy"
dba                "backup dir by oldboy"
dev                "backup dir by oldboy"

 

Rsync備份案例

使用3臺服務器主機名分別爲web0一、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/ rsync_backup@172.16.1.41::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 from=2543843664@qq.com               # 郵件來源(發件人)
 set smtp=smtps://smtp.qq.com:465         # smtp服務器地址
 set smtp-auth-user=2543843664@qq.com     # 發件人郵箱賬號
 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" 2543843664@qq.com <$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 測試服務功能 

相關文章
相關標籤/搜索