同步備份工具之 rsync


  1.常用同步方法

    SCP、 NFS、 SFTP、 http、 samba、 rsync、 drbd(基於文件系統同步,效率高)

  2.rsync 介紹

  rsync,英文全稱是 remote synchronize, 是一款實現遠程同步功能的免費軟件,它在同步文件的同時,可以
保持原來文件的權限、時間、軟硬鏈接等附加信息。 rsync 是用 “rsync 算法”提供了一個客戶機和遠程文件服務器
的文件同步的快速方法,而且可以通過 ssh 方式來傳輸文件。 甚至還可以實現只同步一個文件里有變化的內容部分,
所以可以實現快速的同步備份數據。
同時, rsync 還可以實現同步本地數據、刪除文件和目錄的功能。一個 rsync 相當於 scp、 cp、 rm,並且還在性
能上優於它們每一個命令。

  3.rsync 特性

  能更新整個目錄和樹和文件系統;
  有選擇性的保持符號鏈鏈、硬鏈接、文件屬於、權限、設備以及時間等;
  對於安裝來說,無任何特殊權限要求;
  對於多個文件來說,內部流水線減少文件等待的延時;
  能用 rsh、 ssh 或直接端口做為傳輸入端口(rsync 本身不對數據加密);
  支持匿名 rsync 同步文件,是理想的鏡像工具;

  4.rsync 在企業的工作場景

  (1)服務器之間的數據同步(cron+rsync)
  (2)把所有客戶服務器數據同步到備份服務器(cron+rsync)
  (3)與 inotify 或 sersync 配合,做實時的數據同步(rsync+inotify/sersync)

  5.rsync命令行常用參數

1)參數說明
-v:--verbose 詳細模式輸出
-z:--compress 對備份的文件在傳輸的過程中進行壓縮處理
-a:--archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於參數:-vrztopg
-r:--recursive 對子目錄以遞歸模式處理。
-t:--times 保持文件時間信息
-o:--owner 保持文件屬主信息。
-p:--perms 保持文件權限。
-g:--group 保持文件屬組信息
-D:--devices 保持設備文件信息
-l: --links 保留軟鏈結。
-e:--rsh=command 指定使用 rsh、 ssh 方式進行數據同步
--exclude=PATTERN 指定排除不需要傳輸的文件模式。
--exclude-from=FILE 排除 FILE 中指定模式的文件。
--bwlimit=KBPS 限制 I/O 帶寬, KBytes per second。

(2)工作中常用參數組合:-avz
(3)參數使用演示
a.使用--bwlimit參數限制傳輸帶寬
rsync -avz --bwlimit=100 -e 'ssh' /etc/hosts root@192.168.0.100:/tmp/

  6.rsync的三種工作模式講解及用法

SYNOPSIS
       Local:  rsync [OPTION...] SRC... [DEST]      ##本地備份
示例:
[root@localhost ~]# rsync -avz /etc/hosts /tmp/
sending incremental file list
hosts

sent 152 bytes  received 31 bytes  366.00 bytes/sec
total size is 188  speedup is 1.03
[root@localhost ~]# ll /tmp/hosts 
-rw-r--r-- 1 root root 188 Sep 21 05:44 /tmp/hosts
[root@localhost ~]# ll /etc/hosts
-rw-r--r-- 1 root root 188 Sep 21 05:44 /etc/hosts

       Access via remote shell:         ##ssh協議遠程備份
         Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
示例:
[root@localhost ~]# rsync -avz -e 'ssh -p 22' /etc/hosts root@192.168.0.175:/tmp/
The authenticity of host '192.168.0.175 (192.168.0.175)' can't be established.
ECDSA key fingerprint is SHA256:46QEG3vm+DkznMyVjIiHxE9xGGRFtlocipE8eKGqzp0.
ECDSA key fingerprint is MD5:72:9e:44:4d:87:96:be:58:de:00:f9:77:8a:33:9f:43.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.175' (ECDSA) to the list of known hosts.
root@192.168.0.175's password: 
sending incremental file list
hosts

sent 152 bytes  received 31 bytes  19.26 bytes/sec
total size is 188  speedup is 1.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

rsync daemon模式的配置過程
**=====Rsync服務端:
(1).查看rsync安裝包
# rpm -qa rsync

(2).添加rsync服務的用戶,管理本地目錄的
# useradd -s /sbin/nologin -M rsync
# id rsync

(3).生成rsync.conf配置文件
# vim /etc/rsyncd.conf 配置文件
uid = rsync     ##用戶,遠端命令使用rsync訪問共享目錄
gid = rsync     ##用戶組       
use chroot = yes    ##安全
max connections = 200   ##最大連接數
pid file = /var/run/rsyncd.pid      ##pid文件路徑
log file = /var/log/rsyncd.log      ##日志文件路徑
timeout = 300               ##超時時間
[long]              ##模塊名稱
path=/backup                ##服務器提供訪問的目錄
ignore errors           ##忽略錯誤
read only = false       ##可寫
list = false            ##禁止列表
hosts allow = 192.168.0.0/24    ##允許網段
hosts deny = 0.0.0.0/32     ##禁止網段
auth users = rsync_backup       ##虛擬用戶
secrets file = /etc/rsync.password  ##密碼文件

(4).根據rsyncd.conf的auth users配置賬戶,遠程連接使用,並根據secrets file參數生成密碼文件
echo "rsync_backup:123456" > /etc/rsync.password
cat /etc/rsync.password

(5).為密碼文件設置權限
chmod 600 /etc/rsync.password
ls -l /etc/rsync.password

(6).創建共享的目錄並授權rsync服務管理
mkdir /backup
chown -R rsync.rsync /backup

(7).啟動rsync服務並檢查
rsync --daemon
ps -ef |grep rsync|grep -v grep
lsof -i :873

(8).加入開機啟動
echo "/usr/bin/rsync --daemon" >> /etc/rc.local
tail -1 /etc/rc.local

**======rsync客戶端
(1).生成連接服務器需要的密碼文件
echo "123456" > /etc/rsync.password
cat /etc/rsync.password

(2).為密碼文件設置權限
chmod 600 /etc/rsync.password
ls -l /etc/rsync.password

(3).同步文件
推送:
    rsync -avz /tmp/ rsync_backup@192.168.0.175::long --password-file=/etc/rsync.password
    rsync -avz /tmp/ rsync://rsync_backup@192.168.0.175/long --password-file=/etc/rsync.password
拉取:
    rsync -avz rsync_backup@192.168.0.175::long /tmp/ --password-file=/etc/rsync.password
    rsync -avz rsync://rsync_backup@192.168.0.175/long /tmp/ --password-file=/etc/rsync.password 

  7.服務故障模擬

  (1)服務器備份目錄不存在
  (2)服務器備份目錄權限不足
  (3)服務器rsync服務用戶被刪除
  (4)鑒權模塊失敗--查看日志(密碼文件路徑錯誤,密碼錯誤等等)
  (5)啟動rsync服務問題(配置文件路徑或文件名不正確,rsync配置文件的正確名稱及路徑為:/etc/rsyncd.conf)
  (6)rsync服務ip段的控制問題(拒絕和允許二選一)

  8.rsync優缺點

  優點:
  (1)增量備份,支持socket(daemon),集中備份(支持推拉,都是以客戶端為參照物)
  (2)遠程shell通道模式還可以加密(ssh)傳輸,socket(daemon)需要加密傳輸,可以利用vpn服務或ipsec服務
  缺點:
  (1)大量小文件同步的時候,比對時間較長,有的時候,rsync進程可能會停止
  (2)同步大文件,10G這樣的大文件有時也會出現問題:中斷。未完整同步前,是隱藏文件,可以通過續傳等參數實現傳輸。一次性遠程拷貝可以用scp

  9.rsync守護進程服務傳輸數據排錯思路

  (1)查看rsync服務配置文件路徑是否正確,正確的默認路徑為:/etc/rsyncd.conf;
  (2)查看配置文件host allow,host deny,允許的ip網段是否為允許客戶端訪問的ip網段;
  (3)查看配置文件中path參數里的路徑是否存在,權限是否正確(正常應為配置文件中的UID參數對應的屬主和組);
  (4)查看rsync服務是否啟動。查看命令為:ps -ef |grep rsync。端口是否存在:netstat -lnp |grep 873;
  (5)查看iptables防火牆和selinux是否開啟允許rsync服務通過,也可以考慮關閉iptables和selinux;
  (6)查看服務端rsync設置的密碼未見是否為600權限,密碼文件格式是否正確,正確格式為 用戶名:密碼,文件路徑和配置文件里的secrect files 參數對應;
  (7)如果是推送數據,要查看下,配置rsyncd.conf文件中用戶是否對模塊下目錄有可讀可寫的權限。

  10.rsync多模塊使用

vim /etc/rsyncd.conf配置文件    ##設置全局參數共用,獨立的模塊只需要配置備份路徑即可
uid = rsync     
gid = rsync     
use chroot = yes    
max connections = 200   
pid file = /var/run/rsyncd.pid      
log file = /var/log/rsyncd.log      
timeout = 300
ignore errors           
read only = false       
list = false            
hosts allow = 192.168.0.0/24            
auth users = rsync_backup       
secrets file = /etc/rsync.password              
[long]              
path=/root/rsync        
[ying]              
path=/root/ying 

  11.rsync daemon服務模式排除及無差異同步

rsync排除的相關參數:
--exclude=PATTERN (排除較少文件時使用)
--exclude=FILE (排除較多文件時使用,可以將文件名寫入一個文件中,再指定排除)
客戶端:
排除單個文件
rsync -avz --exclude=a.txt /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
排除多個目錄文件
(1)排除多個不連續的文件
rsync -avz --exclude={a.txt,b.txt,c.txt} /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
rsync -avz --exclude={a,b} /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
(2)排除多個連續的文件
rsync -avz --exclude={a..g} /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
(3)通過指定文件來排除多個連續的文件
rsync -avz --exclude-from=/tmp/rsynctest/1.log /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
##1.log中需要寫入排除的文件名,並且最好指定1.log的全路徑是什么
(4)完全同步:無差異同步(客戶端有,服務端就有;客戶端沒有,服務端就沒有)---謹慎使用
rsync -avz --delete /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password

服務端:
在服務端排除文件--通過修改配置文件rsyncd.conf;增加:exclude=a.txt b.txt

  12.案例

1)某DBA做數據同步,帶寬占滿,導致用戶無法訪問網站
rsync scp ftp 都具備限速功能
# dd if=/dev/zero of=test1 bs=1M count=128
# rsync -avz --bwlimit=100 /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
默認單位為kbyte
還有斷點續傳的功能

(2)某視頻網站,視頻推到服務器上線發布,本地/backup只有當天發布的內容,服務器上卻又以前的所有文件,執行命令
rsync -avz --delete /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
慘案:服務器端刪除以前的所有,只有當天的數據文件

  13.總結

rsync有三種工作模式
(1)local:rsync
(2)通道模式:rsync -avzP -e 'ssh -p 22' /etc/hosts root@192.168.0.175:/tmp
一般配合ssh key免秘鑰傳輸,結合定時任務
(3)daemon模式
內網不需要,加密性能會有損失
外網同步建議加密使用rsync+vpn(pptp,openvpn,ipsec)

  14.備份全網服務器數據生產架構方案案例

某公司里有一台web服務器,里面的數據很重要,但是如果硬盤壞了,數據就會丟失,現在領導要求你把數據在其他機器上做一個周期性的定時備份。要求如下:
1)web服務器A和備份服務器B的備份目錄必須為/backup
2)要本分的系統配置文件包括但不限於:
a.定時任務服務的配置文件(/var/spool/cron/root)
b.開啟自動的配置文件(/etc/rc.local)
c.日常腳本的目錄(server/scripts)
d.防火牆iptables的配置文件(/ets/sysconfig/iptables)
e.自我思考還需要備份哪些配置?
3)web服務器站點目錄假定為(var/html/www)
4)web服務器A的訪問日志路徑假定為(/app/logs)
6)備份服務器上,保留最近7天的備份數據,同時保留6個月內每周一的所有數據副本
7)備份服務器上要按照備份數據服務器的內網ip為目錄保存備份,備份的文件按照時間名字保存。
8)需要確保備份的數據盡量完整正確,在備份服務器上對備份服務器的數據進行檢查,把備份的成功及失敗結果信息發給系統管理員郵箱中

1.環境需求配置
web服務器  192.168.0.165   主機名稱:web01
rsync備份服務器  192.168.0.165   主機名稱:backup

2.備份方案思路
①搭建backup服務器
a.rsync服務
②搭建web01服務器
a.驗證rsync服務器是否能推送成功
b.開發腳本實現打包、備份、推送、校驗、刪除
c.配置定時任務每天00點定時推送
③backup服務器
a.開發腳本實現數據校驗、刪除、報警
b.配置定時任務每天6點定時執行
④同理搭建存儲服務器nfs01

backup服務器設置:
[root@backup ]# useradd rsync -s /sbin/nologin -M
[root@backup ]# mkdir /backup
[root@backup ]# chown -R rsync.rsync /backup
[root@backup ]# vim /etc/rsyncd.conf
uid = rsync     
gid = rsync     
use chroot = no 
max connections = 200   
pid file = /var/run/rsyncd.pid      
log file = /var/log/rsyncd.log      
timeout = 300
ignore errors           
read only = false       
list = false            
hosts allow = 192.168.0.0/24            
auth users = rsync_backup       
secrets file = /etc/rsync.password              
[backup]                
path=/backup
[root@backup ]# echo "rsync_backup:123456" > /etc/rsync.password
[root@backup ]# systemctl start rsyncd
[root@backup ]# systemctl enable rsyncd
[root@backup ]# ps -ef |grep rsync
[root@web01 ]# echo "123456" >/etc/rsync.password
[root@web01 ]# rsync -avz rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
sending incremental file list
hosts

sent 148 bytes  received 27 bytes  350.00 bytes/sec
total size is 188  speedup is 1.07
[root@web01 ]# mkdir /var/html/www -p
[root@web01 ]# mkdir /app/logs -p
[root@web01 ]# mkdir /server/scripts -p
[root@web01 ]# mkdir /backup
[root@web01 ]# touch /var/html/www/{1..10}.html
[root@web01 ]# touch /app/logs/{1..10}.log
[root@web01 ]# vim /server/scripts/bak.sh
#/bin/bash
cd / &&\
IP=`ifconfig enp0s3 |awk -F "[ :]+" 'NR==2{print $3}'`
BakPath=/backup
mkdir $BakPath/$IP -p
######判斷是否屬於星期二,並對星期一的數據增加標記打包
if [ $(date +%w) -eq 2 ];then
date="$(date +%F -d "-1day")_week1"
else
date="$(date +%F -d "-1day")"
fi

cd / &&\
tar zcfh $BakPath/$IP/sys_config_${date}.tar.gz /var/spool/crond/ /etc/rc.local /server/scripts /etc/sysconfig/iptables && \
tar zcf $BakPath/$IP/web_data_${date}.tar.gz /var/html/www && \
tar zcf $BakPath/$IP/access_log_${date}.tar.gz /app/logs && \
find $BakPath -type f -name "*.tar.gz" |xargs md5sum > $BakPath/$IP/flag_${date}
########bak data to backupserver by long at 20171013
rsync -az $BakPath/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
#######delete data 7 days ago.
find $BakPath -type -f -mtime +7 |xargs rm -rf 
[root@web01 ]# crontab -e
00 * * * * /bin/bash /server/scripts/bak.sh

[root@backup ]# yum install -y mailx
[root@backup ]# vim /etc/mailrc
set from=wangjinlong@163.com smtp=smtp.163.com smtp-auth-user=wangjinlong smtp-auth-password=123456 smtp-auth=login
###from:發送的郵件地址
###smtp:發生的外部smtp服務器地址
###smtp-auth-user是外部smtp服務器認證的用戶名
###smtp-auth-password:外部smtp服務器認證的用戶密碼(授權碼)
###smtp-auth:郵件認證方式
[root@backup ]# mail -s "testing" 18824948172@139.com < /etc/hosts
[root@backup ]# mkdir -p /server/scripts
[root@backup ]# vim /server/scripts/check.sh
#!/bin/bash
#######對數據進行校驗
find /backup/ -name "flag_$(date +%F)"|xargs md5sum -c > /tmp/mail_$(date +%F).log
if [ $(date +%w) -eq 2 ];then
date="$(date +%F -d "-1day")_week1"
else
date="$(date +%F -d "-1day")"
fi
####對180天前的數據進行刪除,並留下6個月內每星期一的數據
find /backup -type -f -name "*.tar.gz" -a ! -name "*week1*" -mtime -7 |xargs rm -rf
mail -s "backup `date`" 18824948172@139.com < /tmp/mail_$(date +%F).log
[root@backup ]# crontab -e
00 06 * * * /bin/bash /server/scripts/check.sh

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM