1. 程式人生 > >Linux Rsync備份服務介紹及部署守護進程模式

Linux Rsync備份服務介紹及部署守護進程模式

oot 人員 comm 改變 保留 kill pull 密鑰 使用

rsync介紹

rsync是一款開源的、快速的、多功能的、可實現全量及增量的本地或遠程數據同步備份工具

在常駐模式(daemon mode)下,rsync默認監聽TCP端口873,以原生rsync傳輸協議或者通過遠程shell如RSH或者SSH提供文件。SSH模式下,rsync客戶端運行程序必須同時在本地和遠程機器上安裝。

全量與增量

全量:將全部數據進行傳輸覆蓋

增量:只傳輸差異部分的數據

rsync通過獨特的“quick check”算法,實現增量數據傳輸

rsync的功能

類似與cp命令    --- (本地備份傳輸數據)

類似於scp命令   --- (遠程備份傳輸數據)

類似於rm命令 --- (實現無差異同步備份)

類似於ls命令 --- (本地文件信息查看)

rsync的cp復制功能

技術分享圖片
[root@backup ~]# cp -a /etc/hosts /tmp/
[root@backup ~]# ls /tmp/hosts 
/tmp/hosts
[root@backup ~]# rm -f /tmp/hosts 
[root@backup ~]# rsync /etc/hosts /tmp/
[root@backup ~]# ls /tmp/hosts 
/tmp/hosts
rsync的復制功能

rsync的scp遠程復制功能

技術分享圖片
[root@backup ~]# scp -rp /etc/hosts 10.0.0.31:/tmp/
The authenticity of host 10.0.0.31 (10.0.0.31) cant be established.
RSA key fingerprint is fc:99:32:0e:a1:c9:fb:f6:d2:01:bf:86:94:d2:c1:f5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 10.0.0.31 (RSA) to the list of known hosts.
root@
10.0.0.31s password: hosts [root@nfs01 ~]# ll /tmp/hosts -rw-r--r-- 1 root root 371 Oct 1 14:45 /tmp/hosts [root@backup ~]# rsync -rp /etc/hosts 10.0.0.31:/tmp/ root@10.0.0.31s password: [root@nfs01 ~]# ll /tmp/hosts -rw-r--r-- 1 root root 371 Oct 11 15:18 /tmp/hosts
rsync的遠程復制功能

rsync的rm刪除功能

這個功能個人感覺比較雞肋,很少有人使用

技術分享圖片
[root@backup tmp]# cp -a /tmp/* /test/
[root@backup tmp]# mkdir /null     ##創建空目錄,以空目錄清空想刪除的目錄
[root@backup tmp]# rsync --delete -r /null/ /test/ 
[root@backup tmp]# ll /test/
total 0
rsync刪除功能

rsync的ls查看功能

技術分享圖片
[root@backup tmp]# ls -l /etc/hosts
-rw-r--r--. 2 root root 371 Oct  1 14:45 /etc/hosts
[root@backup tmp]# rsync /etc/hosts
-rw-r--r--         371 2017/10/01 14:45:23 hosts
rsync的ls查看功能

rsync的特性

rsync有七個特性:

1. 支持拷貝普通文件與特殊文件如鏈接文件,設備等。

2. 可以有排除指定文件或目錄同步的功能,相當於打包命令tar的排除功能。

    # tar zcvf backup_1.tar.gz  /opt/data  -exclude=ceshi   

    說明:在打包/opt/data時就排除了ceshi命名的目錄和文件。

3. 可以做到保持原文件或目錄的權限、時間、軟硬鏈接、屬主、組等所有屬性均不改變-p。

4. 可實現增量同步,既只同步發生變化的數據,因此數據傳輸效率很高(tar -N)。

   # 將備份/home 目錄自 2008-01-29 以來修改過的文件
    # tar -N 2008-01-29 -zcvf /backups/inc-backup_$(date +%F).tar.gz /home
    # 將備份 /home 目錄昨天以來修改過的文件
    # tar -N $(date -d yesterday "+%F") -zcvf /backups/inc-backup_$(date +%F).tar.gz /home
    # 添加文件到已經打包的文件
    # tar -rf all.tar *.gif
    說明:這條命令是將所有.gif的文件增加到all.tar的包裏面去。-r是表示增加文件的意思。

5. 可以使用rcp,rsh,ssh等方式來配合進行隧道加密傳輸文件(rsync本身不對數據加密)

6. 可以通過socket(進程方式)傳輸文件和數據(服務端和客戶端)*****。重點掌握

7. 支持匿名的或認證(無需系統用戶)的進程模式傳輸,可實現方便安全的進行數據備份及鏡像。

rsync的企業工作場景

同步網站內部人員數據信息(定時任務最小周期為一分鐘)

同步網站用戶人員的數據信息

rsync的參數說明

技術分享圖片
-v        詳細模式輸出,傳輸時顯示信息
-z        傳輸時進行壓縮,提高效率
-a        表示以遞歸方式傳輸文件,又包含了 rtopgDl參數
    -r        遞歸
    -t        保持文件時間信息
    -o        保持文件屬主信息
    -p        保持文件權限
    -g        保持文件屬組信息
    -D        設備文件信息
    -l        保留軟鏈接
-P        顯示傳輸的進度信息        
-e        指定用什麽隧道
    隧道模式傳輸:rsync -avz -e "ssh -p 22" /etc/hosts 172.16.1.31:/backup
--exclude                指定排除不需要的傳輸文件信息
--exclude-from=文件       文件所在的目錄文件,即可實現排除多個文件
--bwlimit=速率             設置速率
--delete                    無差異同步
rsync的參數

rsync軟件工作方式

本地數據同步(類似與cp)

技術分享圖片
格式:  rsync [OPTION...] SRC... [DEST]

rsync               -- 數據同步命令

[OPTION...]      -- 命令參數信息

SRC                 -- 要同步的數據信息(文件或目錄)

[DEST]             -- 將數據傳輸到什麽位置(目標)
本地數據同步

實際操作演示

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

遠程數據同步方式(類似scp)

此類型又叫做隧道傳輸

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

技術分享圖片
Pull(拉):
[USER@]             -- 表示以什麽用戶身份傳輸數據信息
HOST:        -- 遠程主機信息(IP地址信息 主機名稱信息)
SRC...        -- 表示遠端要拉過來的數據信息
[DEST]        -- 拉到本地什麽位置
遠程同步:拉

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

技術分享圖片
Push(推):
SRC...          -- 本地要推過去的數據信息
[DEST]        -- 推到什麽位置
[USER@]             -- 表示以什麽用戶身份傳輸數據信息
HOST:        -- 遠程主機信息(IP地址信息 主機名稱信息)
遠程同步:推

說明:需進行交互傳輸數據,如果想實現免交互傳輸數據,需借助ssh+key方式實現

實際操作演示

註意:不加以什麽用戶拉文件,默認是當前用戶

技術分享圖片
[root@backup tmp]# rsync 10.0.0.31:/tmp/test.txt /tmp/
root@10.0.0.31s password: 
[root@backup tmp]# ll
total 16
-rw-r--r--  1 root root  371 Oct 11 15:12 hosts
-rw-r--r--  1 root root    0 Oct 11 16:17 test.txt
-rw-r--r--  1 root root 4162 Oct 10 13:16 optimize-init_sys.sh
-rw-r--r--  1 root root 2184 Oct 10 12:22 sysctl.conf
-rw-------. 1 root root    0 Sep 29 22:14 yum.log
演示:拉取文件 技術分享圖片
[root@backup tmp]# rsync 10.0.0.31:/tmp/test.txt /tmp/
root@10.0.0.31s password: 
[root@backup tmp]# ll
total 16
-rw-r--r--  1 root root  371 Oct 11 15:12 hosts
-rw-r--r--  1 root root    0 Oct 11 16:17 test.txt
-rw-r--r--  1 root root 4162 Oct 10 13:16 optimize-init_sys.sh
-rw-r--r--  1 root root 2184 Oct 10 12:22 sysctl.conf
-rw-------. 1 root root    0 Sep 29 22:14 yum.log
演示:推送文件

守護進程方式同步數據

此方式是rsync中最重要的部分

格式(拉):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守護進程方式(需要有服務端與客戶端)

配置rsync服務端

1. 查看rsync軟件是否存在,一般來說系統是自帶rsync的

[root@backup tmp]# rpm -qa |grep rsyn
rsync-3.0.6-12.el6.x86_64

2. 然後進行軟件服務配置,編輯配置文件

對於配置文件的解釋我寫的過於簡單,不懂的話可以看一下爛泥的介紹:https://www.cnblogs.com/ilanni/p/4225897.html

技術分享圖片
[root@backup tmp]# ll /etc/rsyncd.conf
ls: cannot access /etc/rsyncd.conf: No such file or directory
編輯配置文件:
[root@backup tmp]# vim /etc/rsyncd.conf
uid = rsync                #用戶 遠端命令使用rsync訪問共享目錄
gid = rsync                #用戶組
use chroot = no            #安全相關
max connections = 200      #最大連接數
timeout = 300              #超時時間(不進行備份多長時間斷開)
pid file = /var/run/rsyncd.pid             #進程對應進程號文件(存放服務運行時進程id號)
lock file = /var/run/rsync.lock            #鎖文件
log file = /var/log/rsyncd.log             #日誌文件,顯示出錯信息
模塊信息:
[backup]
comment = "backup dir by oldboy"
path = /backup          #模塊對應的位置(路徑)
ignore errors            #忽略錯誤程序
read only = false        #是否只讀(這裏是假,表示能寫入)
list = false             #是否可以列表*
hosts allow = 172.16.1.0/24        #準許訪問rsync服務器客戶範圍(白名單)
hosts deny = 0.0.0.0/32            #禁止訪問rsync服務器客戶範圍(黑名單)
auth users = rsync_backup          #不存在的用戶,只用於認證
設置進行連接認證的密鑰文件:
secrets file = /etc/rsync.password    #認證時密鑰文件
配置文件

3. 創建rsync服務管理用戶

技術分享圖片
[root@backup tmp]# useradd -s /sbin/nologin -M rsync  #虛擬用戶
[root@backup tmp]# id rsync
uid=501(rsync) gid=501(rsync) groups=501(rsync)
創建管理用戶

4. 創建數據備份存儲目錄

技術分享圖片
[root@backup tmp]# mkdir /backup
[root@backup tmp]# chown -R rsync.rsync /backup/    #一定要將文件屬主和屬組改成rsync用戶
數據備份目錄

5. 創建認證用戶的密碼文件

技術分享圖片
echo "rsync_backup:123456" >/etc/rsync.password
chmod 600 /etc/rsync.password        ##為了安全起見,把認證用戶的密碼文件權限改成600
創建認證密碼文件

6. 啟動rsync服務

技術分享圖片
[root@backup tmp]# rsync --daemon
[root@backup tmp]# ps -ef |grep rsync
root       2552      1  0 17:37 ?        00:00:00 rsync --daemon
root       2554   2276  0 17:37 pts/0    00:00:00 grep --color=auto rsync
[root@backup tmp]# netstat -lntup |grep rsync        ###看一下socket條目,是否有了
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      2552/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      2552/rsync  
啟動rsync

配置rsync客戶端

需要將數據進行備份的服務器就是客戶端

1. 查看rsync軟件是否存在

[root@web tmp]# rpm -qa rsync

rsync-3.0.6-12.el6.x86_64

2. 建立認證密碼文件

echo "123456" >/etc/rsync.password
chmod 600 /etc/rsync.password

3. 傳輸測試

交互式:rsync -avz /etc/hosts [email protected]::backup

非交互:rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password

技術分享圖片
[root@nfs01 backup]# rsync -avz rsync_backup@172.16.1.41::backup/1.txt .
Password: 
receiving incremental file list
1.txt

sent 83 bytes  received 134 bytes  62.00 bytes/sec
total size is 0  speedup is 0.00
[root@nfs01 backup]# ll
total 0
-rw-r--r-- 1 root root 0 Oct 12 16:20 1.txt
[root@nfs01 backup]#
拉取客戶端文件

rsync報mkstemp ".hosts.EfhOg4" (in backup) failed: Permission denied (13)錯誤的原因

備份目錄權限不正確導致的報錯信息:

[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

Password:
sending incremental file list
hosts
rsync: mkstemp ".hosts.EfhOg4" (in backup) failed: Permission denied (13)

 
sent 200 bytes  received 27 bytes  64.86 bytes/sec
total size is 371  speedup is 1.63
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]

解決辦法:修改權限,屬主與屬組

rsync重啟方式

停止服務

kill  pid號
killall 進程名稱
pkill  進程名稱 
說明:小心使用!!!!!

啟動服務

rsync  --daemon

rsync --daemon啟動擴展參數:

   --daemon           #←daemon表示以守護進程的方式啟動rsync服務。
   --address          #←綁定指定IP地址提供服務。
   --config=FILE      #←更改配置文件路徑,而不是默認的/etc/rsyncd.conf
   --port=PORT        #←更改其它端口提供服務,而不是缺省的873端口

--daemon --address演示

技術分享圖片
服務端:[root@backup backup]# rsync --daemon --address=172.16.1.41
客戶端推送文件:
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@10.0.0.41::backup --password-file=/etc/rsync.password 
rsync: failed to connect to 10.0.0.41: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password 
sending incremental file list
hosts

sent 200 bytes  received 27 bytes  454.00 bytes/sec
total size is 371  speedup is 1.63
--daemon --address 演示

--daemon -- config=FILE演示

技術分享圖片
服務端:
[root@backup backup]# cp /etc/rsyncd.conf /tmp
[root@backup backup]# rsync --daemon --config=/tmp/rsyncd.conf
客戶端推送測試:
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password 
sending incremental file list
hosts

sent 200 bytes  received 27 bytes  454.00 bytes/sec
total size is 371  speedup is 1.63
--daemon -- config=FILE演示

--daemon --port=PORT演示

技術分享圖片
服務端:
[root@backup backup]# rsync --daemon --port=8023
[root@backup backup]# netstat -lntup|grep rsync
tcp        0      0 0.0.0.0:8023                0.0.0.0:*                   LISTEN      2714/rsync          
tcp        0      0 :::8023                     :::*                        LISTEN      2714/rsync   
客戶端:
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password         ###沒有加--port=端口
rsync: failed to connect to 172.16.1.41: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
[root@nfs01 ~]# rsync -avz --port=8023 /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password         ###加了--port=端口
sending incremental file list
hosts

sent 200 bytes  received 27 bytes  151.33 bytes/sec
total size is 371  speedup is 1.63
--daemon --port=PORT演示

rsync實現免密交互幾種方式

--password-file=/etc/rsync.password 方式

技術分享圖片
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password 
sending incremental file list
hosts

sent 200 bytes  received 27 bytes  454.00 bytes/sec
total size is 371  speedup is 1.63
指定密碼文件方式

定義全局變量信息實現免密交互

技術分享圖片
[root@nfs01 ~]# export RSYNC_PASSWORD=oldboy123
[root@nfs01 ~]# rsync -avz /etc/services rsync_backup01@172.16.1.41::backup
sending incremental file list

sent 29 bytes  received 8 bytes  74.00 bytes/sec
total size is 641020  speedup is 17324.86
定義全局變量方式

rsync守護進程的排除功能實踐

1.--exclude=要配置的目錄或文件名稱

2.--exclude-from=要排除多個目錄或文件匯總文件名稱,利用排除文件排除,此方法是先將要排除的文件或目錄名寫到一個文件中,引用此文件

3.在配置文件中進行修改,指定要排除的信息,此方法是在rsync.conf配置文件中添加exclude = file 參數

rsync守護進程多模塊功能配置

1. 編寫配置文件創建多模塊信息

技術分享圖片
    vim /etc/rsyncd.conf
    [nfsdata01]
    comment = "nfsdata dir by erlianzhang"
    path = /nfsdata
    [nfsbackup01]                                                                                                            
    comment = "nfsbackup dir by erlianzhang"
    path = /nfsbackup
多模塊

2. 創建多模塊指定的存儲目錄,並進行授權

技術分享圖片
mkdir -p /{nfsdata,nfsbackup}
chown -R rsync.rsync /{nfsdata,nfsbackup}
第三步、利用rsync客戶端進行測試
rsync -avz /etc/services rsync_backup01@172.16.1.41::nfsdata01 --password-file=/etc/rsync.password
rsync -avz /etc/services rsync_backup01@172.16.1.41::nfsbackup01 --password-file=/etc/rsync.password
說明:rsyncd.conf配置文件中,添加多模塊信息,可以不用重啟rsync服務,即時生效
全局變量參數針對所有模塊生效;局部變量參數只對指定模塊生效
read only參數默認配置為ture,即為只讀模式
全局變量發生變化不用重啟rsync服務,局部變量發生變化需要重啟rsync
存儲目錄、授權

不當之處,還望海涵

Linux Rsync備份服務介紹及部署守護進程模式