天天看點

Rsync基本概述--郭亞望全局子產品

Rsync基本概述

rsync是一款開源的備份工具,可以在不同主機之間進行同步,可實作全量備份與增量備份,保持連結和權限,且采用優化的同步算法,傳輸前執行壓縮,是以非常适合用于架構集中式備份或異地備份等應用。

rsync監聽端口:873

rsync運作模式:C/S

常見的備份有如下幾種方式

完全備份

增量備份

差異備份

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

完全備份,将用戶端所有的資料内容file1 file2 file3全部備份至服務端 (效率低下, 占用空間)

增量備份,将用戶端的file2 file3增量備份至服務端 (提高備份效率,節省空間, 适合異地備份 )

2.Rsync應用場景

關于資料同步的兩種方式

推:一台主機負責把資料推送至其他主機,伺服器開銷大。(适合推送少量主機)

拉:所有主機定時去找一主機拉資料。可能會導緻資料同步緩慢。

3.Rsync傳輸模式

Rsync大緻使用三種主要的資料傳輸方式

本地方式

遠端方式

守護程序

//Local: 本地傳輸

rsync [OPTION...] SRC... [DEST]

Access via remote shell: 遠端通道傳輸

Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]

Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

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

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 //讓目标目錄和源目錄資料保持一緻

1.本地傳輸方式: 單個主機本地之間的資料傳輸(此時類似于cp指令)

Local: rsync [OPTION...] SRC... [DEST]

rsync ---資料備份指令

[OPTION...] ---指令相關參數

SRC... ---要進行本地備份的資料資訊

[DEST] ---把資料備份到本地什麼位置

//同步hosts檔案置tmp目錄相當于cp指令

[root@nfs01 ~]# rsync -avz /etc/hosts /tmp/

2.遠端通道傳輸方式: 通過ssh通道傳輸資料,類似scp指令

Access via remote shell:

拉(下載下傳)

rsync ---指令

[OPTION...] ---選項

[USER@] ---遠端主機使用者(系統使用者)

HOST: ---遠端主機位址

SRC... ---遠端主機資料

[DEST] ---将遠端主機資料備份至本地什麼位置

推(上傳)

SRC... ---本地檔案或目錄

HOST: ---遠端主機位址

[DEST] ---本地資料備份至遠端什麼目錄

//push: 推送本地資料至backup伺服器(上傳)

[root@nfs01 ~]# rsync -avz /etc/hosts [email protected]:/etc/hosts

//pull 拉取backup伺服器資料至本地(下載下傳)

[root@nfs01 ~]# rsync -avz [email protected]:/etc/hosts /etc/hosts

3.守護程序傳輸方式: rsync自身非常重要的功能(不使用系統使用者,更加安全)

Access via rsync daemon:

[USER@] ---遠端主機使用者(虛拟使用者)

HOST:: ---遠端主機位址

SRC... ---遠端主機子產品(不是目錄)

HOST:: ---遠端主機位址

[DEST] ---将遠端主機子產品備份至本地什麼位置

//将本地資料推送至backup伺服器

rsync -avz /mnt/ [email protected]::backup/ --password-file=/etc/rsync.password

//将backup伺服器資料拉至本地伺服器

rsync -avz [email protected]::backup/ /mnt/ --password-file=/etc/rsync.password

4.Rsync服務實踐

角色 外網IP(NAT) 内網IP(LAN) 主機名

Rsync服務端 eth0:10.0.0.41 eth1:172.16.1.41 backup

Rsync用戶端 eth0:10.0.0.31 eth1:172.16.1.31 nfs

1.第一個裡程碑,安裝rsync軟體

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

//檢查是否安裝成功

[root@backup ~]# rpm -qa rsync

rsync-3.1.2-4.el7.x86_64

2.第二個裡程碑,配置/etc/rsyncd.conf

[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

#hosts allow = 172.16.1.0/24

#hosts deny = 0.0.0.0/32

auth users = rsync_backup

secrets file = /etc/rsync.password

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 # 監聽端口

use chroot = no # 關閉假根功能

max connections = 200 # 最大連接配接數

timeout = 600 # 逾時時間

ignore errors # 忽略錯誤資訊

read only = false # 對備份資料可讀寫

list = false # 不允許檢視子產品資訊

hosts allow = 172.16.56.0/24 # 允許某個IP或網段通路

hosts deny = 0.0.0.0/32 # 拒絕某個網段或IP通路

auth users = rsync_backup # 定義虛拟使用者,作為連接配接認證使用者

secrets file = /etc/rsync.password # 定義rsync服務使用者連接配接認證密碼檔案路徑

##局部子產品

[backup] # 定義子產品資訊

comment = commit # 子產品注釋資訊

path = /backup # 定義接收備份資料目錄

3.第三個裡程碑,建立虛拟使用者并授權對應目錄

//建立rsync賬戶,不允許登入不建立家目錄

[root@backup ~]# useradd -M -s /sbin/nologin rsync

//建立備份目錄(盡可能磁盤空間足夠大),授權rsync使用者為屬主

[root@backup ~]# mkdir /backup

[root@backup ~]# chown -R rsync.rsync /backup/

4.第四個裡程碑,建立虛拟使用者密碼檔案

//建立虛拟使用者和密碼,并賦予600權限

[root@backup ~]# echo "rsync_backup:xuliangwei" >/etc/rsync.password

[root@backup ~]# chmod 600 /etc/rsync.password

5.第五個裡程碑,啟動rsync服務,并加入開機自啟

[root@backup ~]# systemctl start rsyncd

[root@backup ~]# systemctl enable rsyncd

啟動後檢查對應端口

[root@bogon ~]# netstat -lntp

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

6.Rsync用戶端配置, 配置密碼并設定權限

方式一:适合終端執行指定使用者密碼檔案

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

[root@nfs01 ~]# echo "xuliangwei" > /etc/rsync.password

[root@nfs01 ~]# chmod 600 /etc/rsync.password

方式二:适合寫腳本,強烈推薦方式

[root@nfs01 ~]# export RSYNC_PASSWORD=123456

實戰一: 用戶端推送資料至Rsync服務端

[root@nfs01 ~]# rsync -avz /backup/ [email protected]::backup/ --password-file=/etc/rsync.password

實戰二: 用戶端拉取Rsync服務端資料至本地

[root@nfs01 ~]#rsync -avz [email protected]::backup /backup/ --password-file=/etc/rsync.password

實戰三: Rsync實作資料無差異同步

//拉取遠端資料:遠端與本地保持一緻,遠端沒有本地有會被删除, 造成用戶端資料丢失

[root@nfs01 ~]# rsync -avz --delete [email protected]::backup/ /data/ --password-file=/etc/rsync.password

//推送資料至遠端:本地與遠端保持一緻, 本地沒有遠端會被删除, 造成伺服器端資料丢失

[root@nfs01 ~]# rsync -avz --delete /data/ [email protected]::backup/ --password-file=/etc/rsync.password

5.Rsync定時備份

//Rsync配合crond定時推送資料

[root@nfs-server scripts]# vim rsync_crond_backup.sh

#!/bin/bash

Client

Client_BackupDIR=/backup-A

Client_Host=$(hostname)

Client_IP=$(/sbin/ifconfig eth1|awk 'NR==2'|awk '{print $2}'|awk -F ':' '{print $2}')

Client_Date=$(date +%F)

Client_Datefile=$(date +%H%M)

Client_Desc_DIR="$Client_BackupDIR"/"$ClientHost""$ClientIP""$Client_Date"

###Server

Server_User=rsync_backup

Server_IP=172.16.56.11

Server_mode=backup/

Server_pass=/etc/rsync.password

###command

mkdir -p $Client_Desc_DIR

/bin/cp /var/spool/cron/root $Client_Desc_DIR/cronroot$Client_Date_file

/bin/cp /etc/fstab $Client_Desc_DIR/etcfstab$Client_Date_file

/bin/cp /etc/rc.d/rc.local $Client_Desc_DIR/etcrc.local$Client_Date_file

##rsync

rsync -avz $Client_BackupDIR/ $Server_User@$Server_IP::$Server_mode/ --password-file=$Server_pass

6.Rsync備份項目案例

已知 3 台伺服器主機名分别為 web01、backup 、nfs,主機資訊見下表:

WEB伺服器 eth0:192.168.56.11 eth1:172.16.56.11 web01

NFS存儲伺服器 eth0:192.168.56.12 eth1:172.16.56.12 nfs01

Rsync備份伺服器 eth0:192.168.56.13 eth1:172.16.56.13 backup

要求:

每天晚上01點整在 Web 伺服器上打包備份系統配置檔案、日志檔案、其他目錄 并通過rsync指令推送備份伺服器backup上備份保留

備份思路:

所有伺服器在本地按日期打包, 然後再推到備份伺服器backup上

具體要求如下:

1)所有伺服器的備份目錄必須都為/backup。

2)備份的系統配置檔案包括但不限于:

//配置檔案

/etc/rc.local //開機自啟動配置檔案

/etc/fstab //裝置挂載配置檔案

/etc/hosts //本地内網配置檔案

//重要目錄

/var/spool/cron/ //cron定時任務

/etc/firewalld //firewalld防火牆

/soft/scripts //腳本目錄

系統日志檔案

/var/log/ //系統安全日志、sudo日志、核心日志、rsyslog日志

應用程式日志

/soft/log/nginx

/soft/log/mysql

/soft/log/php

/soft/log/tomcat

.....

//自己思考下還有什麼需要備份的?

3)Web伺服器本地保留最近7天的資料, 避免浪費磁盤空間

4)Rsync備份伺服器上,其它要保留6個月的資料副本。

5)用戶端伺服器推送資料, 以主機名_IP位址_目前時間作為目錄, 所有的備份資料存放至該目錄下 nfs-server_192.168.69.112_2018-03-28/

6)確定備份的資料完整,在備份伺服器上對備份的資料進行檢查,把備份的成功及失敗結果資訊發給系統管理者郵箱中。

7)真實工作中除了伺服器之間備份, 可能還會需要異地備份,這個地方請大家思考如何異地備份。

8)評分标準見表:

ID 分數 項目

1 20分 完成服務端 rsync 服務搭建

2 10分 完成用戶端 rsync 指令推送到服務端

3 20分 完成用戶端本地打包及校驗腳本。

4 10分 完成用戶端定時任務配置。

5 15分 完成服務端資料完整性檢查及清理腳本

6 10分 完成服務端定時執行腳本。

7 15分 實作每日郵件發送結果給管理者

1.搭建rsync

##backup create-rsync-server.sh

mkdir -p /soft/scripts

vim /soft/scripts/create-rsync-server.sh

#!/bin/sh

useradd rsync

mkdir –p /backup

chown rsync.rsync /backup

cat >> /etc/rsyncd.conf <<EOF

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

hosts allow = 172.16.56.0/24

hosts deny = 0.0.0.0/32

EOF

cat >> /etc/rsync.password <<EOF

rsync_backup:xuliangwei

chmod 600 /etc/rsync.password

####rsync server start###

rsync --daemon

echo "rsync --daemon" /etc/rc.local

//用戶端

xuliangwei

//在backup上部署rsync, 并且在用戶端上可以推送成功。

2.用戶端上建立備份腳本

IP=$(ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}')

if [ $(date +%w) -eq 0 ]

then

Date="week$(date +%F-%w -d "-1day")

else

Date=$(date +%F -d "-1day")

fi

Path=/backup

/bin/mkdir $Path/$IP -p

cd / &&\

/bin/tar czf $Path/$IP/backup$Date.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\

md5sum $Path/$IP/backup$Date.tar.gz > $Path/$IP/flag_$Date &&\

rsync -az /backup/ [email protected]::backup/ --password-file=/etc/rsync.password &&\

#del

find $Path/ -type f -mtime +7 (-name ".log" -o -name ".tar.gz")| xargs rm –f

//3.配置定時任務

Server端backup腳本

LANG=en

find /backup/ -type f -name "${Date}.log"|xargs md5sum -c >>$Path/${Date}_result.log 2>&1 &&\

mail -s "$Date bak result" [email protected] <$Path/${Date}_result.log

find $Path/ -type f -mtime +180 ! -name "_week_6*" | xargs rm -f

//check.sh

find /backup -type f -name "flag_$(date +%F)" |xargs md5sum -c |grep FAILED &> /tmp/mailbody$(date +%F).txt

mail -s "$(date +%U%T) back" [email protected] </tmp/mailbody$(date +%F).txt

配置郵箱

// (在末行加入如下指令)

[root@backup /]# vim /etc/mail.rc

set [email protected]

set smtp=smtps://smtp.qq.com:465

set [email protected]

set smtp-auth-password=

set smtp-auth=login

set ssl-verify=ignore

set nss-config-dir=/etc/pki/nssdb/

備份思考

1.要備份什麼?

WEB APP部署程式配置檔案

MYSQL資料庫部署程式及其配置檔案

MySQL資料檔案

MySQK的binlog日志、慢查詢日志、錯誤日志

系統的安全日志、核心的日志、sudo日志、rsyslog日志

應用程式日志 access.log error.log

靜态資料檔案

//備份目錄如何規劃,如果之前備份規劃是這個樣子的?

/usr/local/nginx

/opt/mysql

/etc/php

/etc/my.cnf

//如果伺服器規劃是這個樣子

/soft/webapp/nginx

/soft/webapp/apache

/soft/webapp/tomcat

/soft/scripts/crond_nginx.sh

/soft/scripts/crond_rsync.sh

/data/mysql/mysql3306/{data,logs,conf,tmp}

/data/mysql/mysql3307/{data,logs,conf,tmp}

/data/mysql/mysql3308/{data,logs,conf,tmp}

思考2:如何備份?

1.根據時間維護劃分

實時備份(同步備份)

非實時備份(異步備份)

2.根據地域劃分

同IDC備份部署

跨IDC備份部署

本地->雲主機->異地主機

備份3:備份可恢複性?

時間成本

維護成本

備份4:備份政策

繼續閱讀