2.Rsync備份服務

1.Rsync基本概述

rsync是一款開源、快速、多功能、可實現全量及增量的本地或遠程數據同步備份的優秀工具。rsync軟件適用於Unix/linux/Windows等多種操做系統平臺。linux


rsync 簡介

rsync英文稱爲remote synchronizetion,從軟件的名稱就能夠看出來,rsync具備可以使本地和遠程兩臺主機之間的數據快速複製同步鏡像、遠程備份的功能,這個功能相似於**ssh帶的scp命令,可是又優於scp命令的功能**,**scp每次都是全量拷貝,而rsync能夠增量拷貝**。固然,rsync還能夠在本地主機的不一樣分區或目錄之間全量及曾量的複製數據,這又相似cp命令。可是一樣也優於cp命令,cp每次都是全量拷貝,而rsync能夠增量拷貝。

在同步數據的時候,默認狀況下,rsync經過其獨特的「quick check」算法,它僅同步大小或者最後修改時間發生變化的文件或目錄,固然也可根據權限、屬主等屬性的變化同步,可是須要制定相應的參數,甚至能夠實現只同步一個文件裏有變化的內容部分,因此,但是實現快速的同步備份數據。

rsync監聽端口:873web

rsync運行模式:C/S算法

client/servershell

客戶端/服務端vim


小提示:利用rsync還能夠實現刪除文件和目錄的功能,這又至關於rm命令,一個rsync至關於scp、cp、rm,可是還優於他們的每個命令。windows


Rsync的特性

支持拷貝特殊文件,如鏈接文件、設備等。
能夠有排除指定文件或目錄同步的功能,至關於打包命令tar的排除功能。
能夠作到保持原文件或目錄的權限、時間、軟硬連接、屬主、組等全部屬性均不改變 –p。
能夠實現增量同步,既只同步發生變化的數據,所以數據傳輸效率很高(tar-N)。
可使用rcp、rsh、ssh等方式來配合傳輸文件(rsync自己不對數據加密)。
能夠經過socket(進程方式)傳輸文件和數據(服務端和客戶端)。
支持匿名的活認證(無需系統用戶)的進程模式傳輸,能夠實現方便安全的進行數據備份和鏡像。

生產場景架構集羣備份方案

1.藉助cron+rsync把全部客戶服務器數據同步到備份服務器。
2.針對公司重要數據備份混亂情況和領導提出備份全網數據的解決方案。
3.經過本地打包備份,而後rsync結合`inotify`應用把全網數統一備份到一個固定存儲服務器,而後在存儲服務器上經過腳本檢查並報警管理員備份結果。
4.按期將IDC機房的數據 備份公司的內部服務器,防止機房地震及火災問題致使數據丟失。
5.實時同步,解決存儲服務器等的單點問題。

備份的類型

全備安全

​ 將數據所有備份下來:全量備份,將客戶端全部的數據內容所有備份至服務端 (效率低下, 佔用空間)bash

增備服務器

​ 全備以後新增的數據,備份下來:增量備份,將客戶端的增量備份至服務端 (提升備份效率,節省空間, 適合異地備份 )架構

2.Rsync的應用場景

Rsync的數據同步模式

1)推:全部主機推送本地數據至Rsync備份服務器,會致使數據同步緩慢(適合少許數據備份)

img

2)拉: rsync備份服務端拉取全部主機上的數據,會致使備份服務器開銷大

img

3)大量數據備份場景

img

4)異地備份

img

3.Rsync的傳輸模式

本地方式

遠程方式

守護進程


1)本地傳輸方式

單個主機本地之間的數據傳輸(此時相似於cp命令)

#本地拷貝數據命令
    Local:  rsync [OPTION...] SRC... [DEST]
    
    #本地拷貝數據示例
​   [root@backup ~]# rsync  -avz  /etc/passwd  /tmp/
​   rsync       #備份命令(cp)
​   [options]   #選項
​   SRC...      #本地源文件
​   [DEST]      #本地目標文件

[root@web01 ~]# rsync /etc/b.txt  /tmp/

2)遠程傳輸方式

經過ssh通道傳輸數據,相似scp命令`

#pull拉取數據命令
     Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
 #push推送數據命令    
     Push: rsync [OPTION...] SRC... [USER@]HOST: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推送數據示例
rsync -avz /backup/2018-10-01  root@172.16.1.41:/tmp/
Push        #推送, 上傳
rsync       #備份命令
[options]   #選項
SRC...      #本地源文件
[USER@]     #目標主機的系統用戶
HOST        #目主機IP地址或域名
[DEST]      #目標對應位置
pull拉:
[root@web01 ~]# rsync -avz root@172.16.1.41:/tmp ./
push推:
[root@web01 ~]# rsync -avz /var root@172.16.1.41:/tmp/

注意: rsync不論是推仍是拉,推送目錄的時候帶/和不帶/

1.帶/ :/etc/ 將etc目錄下的全部內容,推過去(拉過來)

2.不帶/:/etc 將etc目錄總體推過去(拉過來)

Rsync藉助SSH協議同步數據存在的缺陷

1.使用系統用戶(不安全)

2.使用普通用戶(會致使權限不足狀況)


3)守護進程傳輸方式

rsync自身很是重要的功能(不使用系統用戶,更加安全)

#pull拉取數據命令
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
#push推送數據命令
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

#1.拉取rsync備份服務的"backup模塊"數據至本地/mnt目錄
[root@nfs01 ~]# rsync -avz rsync_backup@192.172.16.1.41::backup/ /mnt/ --password-file=/etc/rsync.password
rsync           #命令
[OPTION...]     #選項
[USER@]         #遠程主機用戶(虛擬用戶)
HOST::          #遠程主機地址  
SRC...          #遠程主機模塊(不是目錄)
[DEST]          #將遠程主機數據備份至本地什麼位置

#2.將本地/mnt目錄推送至rsync備份服務器的backup模塊
[root@nfs01 ~]# rsync -avz /mnt/ rsync_backup@192.172.16.1.41::backup/ --password-file=/etc/rsync.password
rsync           #命令
[OPTION...]     #選項
SRC...          #遠程主機模塊(不是目錄)
[USER@]         #遠程主機用戶(虛擬用戶)
HOST::          #遠程主機地址
[DEST]          #將遠程主機模塊備份至本地什麼位置

rsync -avz /data/ rsync_backup@172.16.1.41::zls

4)Rsync命令對應選項

-a                  #歸檔模式傳輸, 等於-tropgDl
-v                  #詳細模式輸出, 打印速率, 文件數量等
-z                  #傳輸時進行壓縮以提升效率
-r                  #遞歸傳輸目錄及子目錄,即目錄下得全部目錄都一樣傳輸。
-t                  #保持文件時間信息
-o                  #保持文件屬主信息
-p                  #保持文件權限
-g                  #保持文件屬組信息
-l                  #保留軟鏈接
-P                  #顯示同步的過程及傳輸時的進度等信息
-D                  #保持設備文件信息
-L                  #保留軟鏈接指向的目標文件
-e                  #使用的信道協議,指定替代rsh的shell程序
--exclude=PATTERN   #指定排除不須要傳輸的文件模式
--exclude-from=file #文件名所在的目錄文件
--bwlimit=100       #限速傳輸
--partial           #斷點續傳
--delete            #讓目標目錄和源目錄數據保持一致
--password-file=xxx #使用密碼文件

rsync無差別同步

rsync -avz --delete  rsync_backup@172.16.1.41::cm

rsync限速

rsync -avz --bwlimit=1024 /etc rsync_backup@172.16.1.41::cm

4.Rsync服務實踐

主機名 外網IP 內網IP 角色
backup 10.0.0.41 172.16.1.41 服務端
web01 10.0.0.7 172.16.1.7 客戶端
nfs01 10.0.0.31 172.16.1.31 客戶端

4.1服務端配置

1)服務端安裝rsync

[root@backup ~]# yum -y install rsync

2)服務端,修改配置文件

[root@backup ~]# cat /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup

#配置詳解
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync                       #運行進程的用戶名
gid = rsync                       #運行進程的用戶組
port = 873                        #監聽端口
fake super = yes                  #無需讓rsync以root身份運行
use chroot = no                   #禁錮推送的數據至某個目錄,不容許跳出該目錄
max connections = 200             #最大鏈接數200
timeout = 600                     #超時時間600s 10分鐘
ignore errors                     #忽略錯誤信息
read only = false                 #關閉只讀
list = false                      #不容許查看模塊信息
auth users = rsync_backup         #定義虛擬用戶,做爲鏈接認證用戶
secrets file = /etc/rsync.passwd  #認證用戶的密碼文件
log file = /var/log/rsyncd.log    #日誌文件路徑
#####################################
[cm]                                    #模塊(任意名字均可以)
comment = welcome to oldboyedu backup!  #註釋信息(可有可無)
path = /backup                          #定義接受備份數據路徑

3)服務端(backup),建立用戶

建立一個用來運行rsync服務的用戶身份

#檢查用戶是否存在
[root@backup ~]# id rsync
id: rsync: no such user

#建立用戶(不容許登陸,不建立家目錄)
[root@backup ~]# useradd rsync -s /sbin/nologin -M
-s:指定登陸的shell
-M:不建立家目錄

4)服務端,建立一個備份目錄

[root@backup ~]# mkdir /backup
#受權rsync用戶
[root@backup ~]# chown -R rsync.rsync /backup/

5)服務端,建立虛擬用戶的密碼文件

建立虛擬用戶密碼文件, 受權600安全權限(用於客戶端鏈接時使用的用戶)

#建立用戶名和密碼文件
[root@backup ~]# vim /etc/rsync.passwd
rsync_backup:123456
#受權
[root@backup ~]# chmod 600 /etc/rsync.passwd

6)服務端,啓動rsync服務,添加開機自啓

[root@backup ~]# ll /usr/lib/systemd/system/rsyncd.service 
-rw-r--r-- 1 root root 237 Apr 26 01:17 /usr/lib/systemd/system/rsyncd.service
#啓動rsyncd守護進程
[root@backup ~]# systemctl start rsyncd
#容許開機自啓
[root@backup ~]# systemctl enable rsyncd

7)檢查端口

[root@backup ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address       Foreign Address      State     PID/Program name   
tcp        0      0 0.0.0.0:873         0.0.0.0:*           LISTEN     4758/rsync

4.2客戶端配置

1)安裝rsync

[root@web01 ~]# yum install -y rsync

2)建立虛擬用戶的密碼文件

Rsync客戶端僅需配置虛擬用戶的密碼,並受權爲600安全權限

#建立用戶密碼文件
[root@web01 ~]# vim /etc/rsync.pass
123456
或  echo 123456 >/etc/rsync.pass
#受權
[root@web01 ~]# chmod 600 /etc/rsync.pass

#免交互方式一:
rsync -avz --password-file=/etc/rsync.pass
#免交互方式二(腳本使用,推薦):
export RSYNC_PASSWORD=cm

4.3Rsync實戰

實戰一

[root@web01 ~]# mkdir /data
[root@web01 ~]# cd /data
[root@web01 data]# touch file{1..100}
[root@web01 data]# ll

推:客戶端推送data目錄下全部內容至Rsync服務端

#交互式,須要輸入密碼
[root@web01 ~]# rsync -avz /data/ rsync_backup@172.16.1.41::cm
#非交互式
[root@web01 ~]# rsync -avz /data/ rsync_backup@172.16.1.41::cm --password-file=/etc/rsync.pass

#查看
[root@backup ~]# ll /backup
total 0
-rw-r--r-- 1 rsync rsync 0 Aug  1 20:07 file1
-rw-r--r-- 1 rsync rsync 0 Aug  1 20:07 file2
-rw-r--r-- 1 rsync rsync 0 Aug  1 20:07 file3
-rw-r--r-- 1 rsync rsync 0 Aug  1 20:07 file4
-rw-r--r-- 1 rsync rsync 0 Aug  1 20:07 file5

拉:客戶端拉取Rsync服務端 backup模塊數據至本地客戶端的 /root目錄

#交互式,須要輸入密碼
[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::cm /root/
#非交互式
[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::cm /root/ --password-file=/etc/rsync.pass

#查看
[root@web01 ~]# ll
-rw-r--r--  1 root root    0 Aug  1 20:07 file1
-rw-r--r--  1 root root    0 Aug  1 20:07 file2
-rw-r--r--  1 root root    0 Aug  1 20:07 file3
-rw-r--r--  1 root root    0 Aug  1 20:07 file4
-rw-r--r--  1 root root    0 Aug  1 20:07 file5

報錯:

1.客戶端密碼文件:600權限

2.服務端密碼文件:600權限

3.客戶端密碼文件中,只寫密碼,不寫用戶

4.服務端密碼文件中,用戶:密碼

5.服務端的/backup目錄權限不是 rsync

chown -R rsync.rsync /backup

認證失敗:

1.先檢查配置文件:服務端:/etc/rsyncd.conf

[模塊]

2.檢查服務端,/etc/rsync.passwd文件的權限是否是600

3.再檢查服務端,/etc/rsync.passwd文件的內容,是否是 用戶名:密碼

rsyncd.conf 裏的 rsync_backup

4.再檢查客戶端,/etc/rsync.pass 權限600

5./etc/rsync.pass 內容只寫密碼

6.修改完配置文件要重啓服務,[backup] [cm]

systemctl restart rsyncd

實戰二

客戶端需求

1.客戶端提早準備存放的備份的目錄,目錄規則以下:/backup/nfs_172.16.1.31_2018-09-02

#安裝ntpdate
yum install -y ntpdate

#實現第一部份內容,將備份的數據目錄建立出來
[root@web01 ~]# vim rsync.sh 
#!/bin/bash
H=`hostname`
IP=`ifconfig eth1|awk 'NR==2{print $2}'`
DATE=`date +%F`
SRC=${H}_${IP}_${DATE}
mkdir -p /backup/$SRC                 #建立備份目錄

#執行腳本
[root@web01 ~]# sh rsync.sh 
#查看備份數據
[root@web01 ~]# ll /backup/
total 0
drwxr-xr-x 2 root root 6 Aug  2 19:00 web01_172.16.1.7_2019-08-02

2.客戶端在本地打包備份(系統配置文件、應用配置等)拷貝至/backup/nfs_172.16.1.31_2018-09-02

[root@web01 ~]# vim rsync.sh

#!/bin/bash
H=`hostname`
IP=`ifconfig eth1|awk 'NR==2{print $2}'`
DATE=`date +%F`
SRC=${H}_${IP}_${DATE}
mkdir -p /backup/$SRC

tar zcf /backup/${SRC}/conf_${DATE}.tar.gz /var/log/messages /etc/passwd /etc/gshadow /etc/shadow /etc/group &>/dev/null         #打包備份至/backup/nfs_172.16.1.31_2018-09-02/下

3.客戶端最後將備份的數據進行推送至備份服務器

[root@web01 ~]# vim rsync.sh

#!/bin/bash
H=`hostname`
IP=`ifconfig eth1|awk 'NR==2{print $2}'`
DATE=`date +%F`
SRC=${H}_${IP}_${DATE}

export RSYNC_PASSWORD=123456        #設置免交互密碼
mkdir -p /backup/$SRC
tar zcf /backup/${SRC}/conf_${DATE}.tar.gz /var/log/messages /etc/passwd /etc/gshadow /etc/shadow /etc/group &>/dev/null

rsync -az /backup/ rsync_backup@172.16.1.41::cm    #將備份數據推送至備份服務器

測試命令:

[root@web01 ~]# for n in `seq -w 30`;do date -s "201908$n";sh rsync.sh;done

4.客戶端服務器本地保留最近7天的數據, 避免浪費磁盤空間

[root@web01 ~]# vim rsync.sh

#!/bin/bash
H=`hostname`
IP=`ifconfig eth1|awk 'NR==2{print $2}'`
DATE=`date +%F`
SRC=${H}_${IP}_${DATE}
export RSYNC_PASSWORD=123456 
mkdir -p /backup/$SRC
tar zcf /backup/${SRC}/conf_${DATE}.tar.gz /var/log/messages /etc/passwd /etc/gshadow /etc/shadow /etc/group &>/dev/null

md5sum /backup/${SRC}/conf_${DATE}.tar.gz > /backup/res7.txt    #校驗打包結果放入/backup目錄下
rsync -az /backup/ rsync_backup@172.16.1.41::cm

find /backup/ -type d -mtime +7 |xargs rm -fr        #保留最近7天的數據
#定義變量
[root@web01 ~]# H=`hostname`
[root@web01 ~]# IP=`ifconfig eth1 |awk 'NR==2{print $2}'`
[root@web01 ~]# DATE=`date +%F`
[root@web01 ~]# SRC=${H}_${IP}_${DATE}

#校驗打包是否成功
[root@web01 ~]# md5sum /backup/${SRC}/conf_${DATE}.tar.gz
1c7529d288ee10f18e59d8ad93e770f7  /backup/web01_172.16.1.7_2019-08-04/conf_2019-08-04.tar.gz
#將校驗結果放入/backup目錄下
[root@web01 ~]# md5sum /backup/${SRC}/conf_${DATE}.tar.gz > /backup/res.txt

5.客戶端天天凌晨1點定時執行該腳本

[root@web01 ~]# crontab -e
#天天凌晨一點備份重要數據 By:cm  At:2019-08-02
00 01 * * * /bin/sh /root/rsync.sh &>/dev/null

#如何修改時間
[root@backup ~]# date
Sat Aug  3 00:04:57 CST 2019
[root@backup ~]# date -s '20190804'
Sun Aug  4 00:00:00 CST 2019
#如何同步時間
[root@backup ~]# ntpdate time.windows.com &>/dev/null
服務端需求

1.服務端部署rsync,用於接收客戶端推送過來的備份數據

#安裝mailx,ntpdate
yum install -y mailx
yum install -y ntpdate

#配置mail.rc
vim /etc/mail.rc

Shift + g(在文件末尾添加便可)

set from=531759321@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=531759321@qq.com
set smtp-auth-password=受權碼
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

2.服務端須要天天校驗客戶端推送過來的數據是否完整

3.服務端須要天天校驗的結果通知給管理員

4.服務端僅保留6個月的備份數據,其他的所有刪除

#配置文件
vim  check_backup.sh

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
DATE=`date +%F`

md5sum -c /backup/res*.txt|mail -s "${DATE} check backup" 531759321@qq.com  #檢驗數據併發送給管理員

find /backup -type d -mtime +180|xargs rm -fr           #保留6個月的備份數據
[root@web01 ~]# crontab -e
#天天凌晨一點零一分校驗結果       By:cm     At:2019-08-02
01 01 * * * /bin/sh /root/check_backup.sh &>/dev/null
相關文章
相關標籤/搜索