Rsync備份服務

Rsync備份服務

簡要介紹

rsync 是一個用於增量文件傳輸的開源工具,不得不說,rsync簡直是不一樣服務器間傳輸文件、同步文件的利器。與FTP相比,它具備很是簡單的安裝和配置方法。並且,rsync能夠只拷貝發生過變化的文件,這就讓傳輸效率很是高。若是你考慮安全問題,也能夠經過 ssh 協議來進行傳輸。rsync 用來進行備份和鏡像也很是棒,它的這些特性多是你很是須要的:  
    支持連接、屬主、屬組合權限的拷貝  
    支持包含或排出條件,相似 tar  
    不須要 root 權限  
    支持匿名或受權的 rsync server 模式  
rsync監聽端口:873  
rsync運行模式:C/S 客戶端/服務端 | B/S 瀏覽器/服務端

rsync常見的兩種備份方式:徹底備份、增量備份

徹底備份:將客戶端的全部數據內容所有備份至服務端(效率低下,佔用空間)  
增量備份:將客戶端的增量備份至服務端(提升備份效率,節省時間,適合異地備份)

rsync同類服務

sync 同步:刷新文件系統緩存,強制將修改過的數據塊寫入磁盤,而且更新超級塊。  
async 異步:將數據先放到緩衝區,再週期性(通常是30s)的去同步到磁盤。  
rsync 遠程同步:remote synchronous

Rsync關於數據同步的兩種方式:

一、推(上傳):全部主機推送本地數據至Rsync備份服務器,會致使數據同步緩慢(適合少許數據備份)  
二、拉(下載):Rsync備份服務器端拉取全部主機上的數據,會致使備份服務器開銷大。

Rsync傳輸模式:

Rsync大體使用三種主要的傳輸模式:

本地方式  
遠程方式  
守護進程

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            #讓目標目錄和源目錄數據保持一致

本地傳輸cp

[root@backup ~]# rsync /etc/passwd /tmp/
[root@backup ~]# ls /tmp/passwd
/tmp/passwdshell

遠程傳輸scp

拉(下載):vim

rsync -avz root@172.16.1.41:/root/ /backup/ #拉取遠程目錄下的全部文件
rsync -avz root@172.16.1.41:/root /backup/ #拉取遠程目錄以及目錄下的全部文件
推(上傳):瀏覽器

rsync -avz /backup/2018-07-23 root@172.16.1.41:/tmp/緩存

守護進程傳輸方式:rsync自身很是重要的功能、簡單的遠程傳輸存在問題:root權限太高、不使用系統用戶更加安全。

1.安裝

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

2.配置rsync

查詢配置文件存放的路徑bash

[root@backup ~]# rpm -qc rsync
/etc/rsyncd.conf服務器

[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync #運行進程的用戶
gid = rsync #運行進程的用戶組
port = 873 #監聽端口
fake super = yes #無需讓rsync以root身份運行,容許存儲文件的完整屬性
use chroot = no #關閉假根功能
max connections = 200 #最大鏈接數
ignore errors #忽略錯誤信息
read only = false #對備份數據可讀寫
list = false #不容許查看模塊信息
auth users = rsync_backup #定義虛擬用戶,做爲鏈接認證用戶
secrets file = /etc/rsync.password #定義rsync服務用戶鏈接認證密碼文件路徑
log file = /var/log/rsyncd.log #日誌文件
#####################################
[backup] #定義模塊信息
comment = welcome to oldboyedu backup! #模塊註釋信息
path = /backup #定義接收備份數據目錄ssh

3.建立用戶(運行rsync服務的用戶身份)

1.建立rsync帳戶,不容許登陸不建立家目錄異步

useradd -M -s /sbin/nologin rsync
2.建立備份目錄(儘量磁盤空間足夠大),受權rsync用戶爲屬主async

mkdir /backup
chown -R rsync.rsync /backup/

4.建立虛擬用戶密碼文件(用於客戶端鏈接時使用的用戶)

建立虛擬用戶和密碼,並賦予600權限

echo "rsync_backup:1" >/etc/rsync.password
chmod 600 /etc/rsync.password

5.啓動rsync服務,並加入開機自啓

systemctl start rsyncd
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

客戶端:
Access via rsync daemon: 守護進程方式傳輸

1.將客戶端的/etc/passwd 推送至 rsync服務端[backup]
rsync [OPTION...] SRC... [USER@]HOST::DEST

rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup

2.將rsync服務端模塊[/backup]下載至本地
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]

rsync -avz rsync_backup@172.16.1.41::backup /opt

3.同步時不輸入密碼[第一種方式,sersync]

echo "1" >/etc/rsync.password
chmod 600 /etc/rsync.password
rsync -avz rsync_backup@172.16.1.41::backup /opt --password-file=/etc/rsync.password

4.同步時不輸入密碼[第二種方式:寫腳本時使用]

export RSYNC_PASSWORD=1
rsync -avz rsync_backup@172.16.1.41::backup /opt

Rsync實現數據無差別同步

rsync -avz --delete rsync_backup@172.16.1.41::backup/ /data/ --password-file=/etc/rsync.password

限速

rsync -avzP --bwlimit=1 /opt/test.dosk rsync_backup@172.16.1.41::backup

Rsync備份案例

統一全部的目錄站點是/backup

1.備份什麼  
    1.系統重要的配置文件

/etc/fstab /var/spool/cron/root

2.服務的配置文件

/etc/rsyncd.conf

3.日誌

/var/log/secure /var/log/message

4.腳本

/server/scripts
2.怎麼備份

/backup/nfs_172.16.1.31_2018_09_05  
/backup/nfs_172.16.1.31_2018_09_06  
/backup/nfs_172.16.1.31_2018_09_07  
3.編寫腳本

[root@nfs ~]# echo $(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F)
nfs_172.16.1.31_2018-09-05
[root@nfs ~]# mkdir /server/scripts -p
腳本

#腳本不可重複執行, 每次執行都會進行推送,能夠進行判斷
[root@nfs01 ~]# cat /server/scripts/backup_rsync_md5.sh 
#!/bin/bash

#1.定義變量
Path=/backup
Host=$(hostname)
Addr=$(ifconfig eth1|awk 'NR==2{print $2}')
Date=$(date +%F)
Dest=${Path}/${Host}_${Addr}_${Date}

#2.檢查目錄是否存在
[ -d $Dest ] || mkdir -p $Dest

#3.拷貝須要備份的文件至$Dest
cd / && \
   # system backup
tar czf $Dest/system.tar.gz etc/passwd etc/fstab etc/rc.d/rc.local var/spool/cron
   # user backup
tar czf $Dest/user.tar.gz server/
   # config backup
tar czf $Dest/config.tar.gz etc/rsyncd.conf

#4.進行md5校驗
md5sum $Dest/*.tar.gz > $Dest/flag_${Date}

#5.客戶端推送至rsync備份服務端
Rsync_User=rsync_backup
Rsync_Addr=172.16.1.41
Rsync_Module=backup
export RSYNC_PASSWORD=123456
rsync -avz $Path/ ${Rsync_User}@${Rsync_Addr}::${Rsync_Module}

#6.客戶端本地保留最近7天的文件
find $Path/ -type d -mtime +7|xargs rm -rf
相關文章
相關標籤/搜索