day32

第1章 rsync服務及搭建備份服務器
1.1 什么是Rsync
??Rsync是一款開源的、快速的、多功能的、可實現(xiàn)全量及增量的本地或遠程數(shù)據(jù)復制(拷貝)的優(yōu)秀工具。
1.2 全量和增量

全量
全部備份

增量
差異化備份,對更新的那一部分進行備份

1.3 Rsync的作用
??工作中的定時/實時數(shù)據(jù)備份、本地服務器目錄、不同機器、不同機房之間的數(shù)據(jù)備份都可以使用Rsync完成。
1.4 Rsync的功能特性

支持拷貝普通文件與特殊文件,如鏈接文件,設備文件等。
支持排除指定文件或目錄同步的功能,相當于打包命令tar的排除功能。
可以做到保持原文件或目錄的權限、時間、軟硬鏈接、屬主、組等所有屬性均不改變。
可實現(xiàn)增量復制,既只復制發(fā)生變化的數(shù)據(jù),因此數(shù)據(jù)傳輸效率很高。
可以使用rcp,rsh,ssh等方式來配合進行隧道加密傳輸文件(rsync本身不對數(shù)據(jù)加密)。
可以通過socket(進程方式)傳輸文件和數(shù)據(jù)(服務端和客戶端)。
支持匿名或認證(無需系統(tǒng)用戶)進程模式傳輸,安全的進行數(shù)據(jù)備份及鏡像

1.5 增量復制原理
使用quick check算法,只對增量的部分復制,根據(jù)大小屬性的變化進行復制。

版本
復制原理

Rsync 2.x
比對完所有內(nèi)容后,對差異的內(nèi)容進行復制

Rsync 3.x
一邊比對文本內(nèi)容,一邊對差異進行復制。

1.6 Rsync三種工作模式介紹
1.6.1 本地(local)
在本地使用,rsync就是一個命令。
語法格式:

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

rsync命令
參數(shù)選項
[源目錄或文件]
目的目錄或文件

命令作用:

把數(shù)據(jù)從一個地方復制到另一個地方(僅在一臺機器增量),相當于cp命令。
通過加參數(shù)實現(xiàn)刪除功能,相當于rm命令。
查看屬性信息功能,相當于ls命令。

拷貝實踐:
1.一般復制:
[root@backup ~]ls /opt <===查看目錄為空目錄 [root@backup ~] rsync /etc/hosts /opt <===拷貝文件hosts
[root@backup ~]$ ls /opt <===查看結果
hosts

2.保持屬性復制:
[root@backup ~]rsync -zrtopg /etc/hosts /opt/ <===復制文件 [root@backup ~] ls -l /opt/hosts /etc/hosts <===查看屬性
-rw-r--r-- 1 root root 332 4月 12 11:25 /etc/hosts
-rw-r--r-- 1 root root 332 4月 12 11:25 /opt/hosts

刪除實踐:
1.刪除文件內(nèi)容:
[root@backup ~]touch /null.txt <===創(chuàng)建空文件 [root@backup ~] cat /opt/hosts <===查看原文件內(nèi)容
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.1.5 lb01
172.16.1.6 lb02
172.16.1.7 web01
172.16.1.8 web02
172.16.1.9 web03
172.16.1.31 nfs01
172.16.1.41 backup
172.16.1.51 db01 db01.etiantian.org
172.16.1.61 m01
[root@backup ~]rsync -r --delete /null.txt /opt/hosts <===讓后面的hosts和前面的null.txt一樣 [root@backup ~] cat /opt/hosts <===查看是否清空

2.刪除目錄下所有內(nèi)容:
[root@backup ~]mkdir /null <===創(chuàng)建空目錄 [root@backup ~] rsync -r --delete /null/ /opt/ <===讓后面opt和前面null目錄內(nèi)容保持一致
[root@backup ~]$ ls /opt/

查看屬性:
[root@backup ~]$ rsync /etc/hosts
-rw-r--r-- 332 2019/04/12 11:25:32 hosts

重點:只適合rsync

目錄
區(qū)別

null
目錄和目錄下的內(nèi)容

null/
只是目錄下的內(nèi)容,不含本身

1.6.2 遠程shell模式
??借助類似ssh隧道傳輸數(shù)據(jù),適合不同的機器之間的異地拷貝,相當于scp,但是scp是遠程全量拷貝。
遠程拷貝的兩種模式:
1、pull(拉):從遠端拉取到本地
語法格式:

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

rsync命令
參數(shù)選項
[認證用戶]@[主機地址]:[源路徑]
本地路徑

2、push(推):從本地推到遠端
語法格式:

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

rsync命令
參數(shù)選項
本地路徑
[認證用戶]@[主機地址]:[目標路徑]

示例:
[root@nfs01 ~]$ rsync -avz /etc/hosts root@172.16.1.41:/opt/ <===加密傳輸。
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.1.41' (ECDSA) to the list of known hosts.
root@172.16.1.41's password:
sending incremental file list
hosts

sent 219 bytes received 35 bytes 14.51 bytes/sec
total size is 332 speedup is 1.31

檢查:
[root@backup ~]cd /opt/ [root@backup /opt] ls
hosts

以下兩條命令是等價的。其中:

參數(shù)
含義

-e ssh
指定使用ssh通道

-p 22
指定使用22端口

rsync -avz /etc/hosts root@172.16.1.41:/opt/
rsync -avz /etc/hosts -e "ssh -p 22" root@172.16.1.41:/opt/

示例:
[root@nfs01 ~]# rsync -avz /etc/hosts -e "ssh -p 22" root@172.16.1.41:/opt/
root@172.16.1.41's password:
sending incremental file list

sent 44 bytes received 12 bytes 22.40 bytes/sec
total size is 332 speedup is 5.93

pull(拉)的命令:
rsync -avz root@172.16.1.41:/opt/hosts /opt
rsync -avz -e "ssh -p 22" root@172.16.1.41:/opt/hosts /opt

1.6.3 rsync守護進程模式
??rsync服務模式:開啟后臺進程,接受別人訪問。
??守護進程模式首先要搭建rsync服務端(即守護進程),然后才能在客戶端實現(xiàn)推拉數(shù)據(jù)。守護進程模式是企業(yè)運維的一個重要的模式。
1.7 rsync命令參數(shù)

參數(shù)
說明

-v
--verbose 顯示輸出過程

-z
--compress 壓縮

-a
--archive 多參數(shù)集合(-rtopgDl)

-r
--recursive 遞歸

-t
--times 保持修改時間屬性

-o
--owner 保持屬主不變

-p
--perms 保持權限不變

-g
--group 保持用戶組不變

-l
--links 保持拷貝軟連接

-q
--quiet 安靜的拷貝

-e
指定傳輸通道

--bwlimit=KBPS
限制I/O帶寬,KBytes per second。

--delete
刪除

--exclude
排除

--exclude-from
從文件中排除

企業(yè)常用參數(shù)組合: -avz或者-vzrtopg
1.8 rsync守護進程模式應用實踐
1.8.1 以下操作都是在backup服務器
1.8.1.1 安裝rsync命令,若已安裝,可以忽略
[root@backup ~]rsync --version <===查看rsync版本 rsync version 3.1.2 protocol version 31 [root@backup ~] yum install rsync <===安裝rsync

1.8.1.2 配置配置文件
備份:
cp /etc/rsyncd.conf{,.ori}

修改文件信息:
cat -n /etc/rsyncd.conf
1 #rsync_config_______________start
2 #created by oldboy
3 #site: http://www.oldboyedu.com
4 uid = rsync --->管理備份目錄的用戶
5 gid = rsync --->管理備份目錄的用戶組
6 use chroot = no --->安全功能,數(shù)據(jù)是否鎖定到備份目錄
7 fake super = yes --->不用root用戶也可以存儲文件的完整屬性
8 max connections = 200 --->最大并發(fā)連接數(shù)(同時多少客戶端訪問)
9 timeout = 600 --->超時時間
10 pid file = /var/run/rsyncd.pid --->進程號所在文件
11 lock file = /var/run/rsync.lock --->鎖文件
12 log file = /var/log/rsyncd.log --->日志文件,查看報錯等信息*****
13 ignore errors --->忽略錯誤
14 read only = false --->可寫
15 list = false --->不允許列表
16 hosts allow = 172.16.1.0/24 --->授權哪些主機可以訪問
17 hosts deny = 0.0.0.0/32 --->哪些主機不允許訪問
18 auth users = rsync_backup --->遠程虛擬連接用戶
19 secrets file = /etc/rsync.password --->存放密碼的文件(格式為(用戶名:密碼) 權限:必須為600)
20 [backup] --->[模塊名]遠程訪問一般使用模塊名訪問
21 comment = welcome to oldboyedu backup! --->說明,注釋
22 path = /backup/ --->服務端用戶備份的目錄(用戶和組,rsync.rsync)

創(chuàng)建用戶和備份目錄:
[root@backup ~]useradd rsync <===創(chuàng)建用戶 [root@backup ~] id rsync
uid=1001(rsync) gid=1001(rsync) 組=1001(rsync)
[root@backup ~]mkdir -p /backup <===創(chuàng)建目錄 [root@backup ~] chown -R rsync.rsync /backup/ <===修改用戶和用戶組
[root@backup ~]$ ls -ld /backup/
drwxr-xr-x 2 rsync rsync 6 4月 15 12:12 /backup/

1.8.1.3 啟動和檢查rsyncd服務
啟動:
c6及以前:
rsync --daemon
c7:
systemctl start rsyncd <===開啟服務
systemctl enable rsyncd <===開啟開機自啟動
systemctl status rsyncd <===檢查服務狀態(tài)

檢查進程和端口:
[root@backup ~]ps -ef|grep sync|grep -v grep <===檢查進程 root 7521 1 0 11:39 ? 00:00:00 /usr/bin/rsync --daemon --no-detach [root@backup ~] netstat -lntup|grep 873 <===檢查端口
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7521/rsync
tcp6 0 0 :::873 :::* LISTEN 7521/rsync
[root@backup ~]$ lsof -i :873 <===檢查端口
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 7521 root 3u IPv4 41439 0t0 TCP *:rsync (LISTEN)
rsync 7521 root 5u IPv6 41440 0t0 TCP *:rsync (LISTEN)

1.8.1.4 配置密碼文件
[root@backup ~]echo "rsync_backup:oldboy" > /etc/rsync.password [root@backup ~] chmod 600 /etc/rsync.password
[root@backup ~]cat /etc/rsync.password rsync_backup:oldboy [root@backup ~] ll /etc/rsync.password
-rw------- 1 root root 20 4月 15 11:52 /etc/rsync.password

到這里rsync服務端已配置完成
1.8.2 以下操作在客戶端服務器
在客戶端認證密碼,有兩種方法:(可以二選一)
方法1:認證密碼文件
[root@nfs01 ~]echo "oldboy" > /etc/rsync.password [root@nfs01 ~] chmod 600 /etc/rsync.password
[root@nfs01 ~]cat /etc/rsync.password oldboy [root@nfs01 ~] ll /etc/rsync.password
-rw------- 1 root root 7 4月 15 11:55 /etc/rsync.password

方法2:配置特殊變量RSYNC_PASSWORD [root@nfs01 ~] echo ' export RSYNC_PASSWORD=oldboy' >>/etc/bashrc
[root@nfs01 ~]tail -1 /etc/bashrc export RSYNC_PASSWORD=oldboy [root@nfs01 ~]4 . /etc/bashrc [root@nfs01 ~] echo $RSYNC_PASSWORD
oldboy

到這里rsync客戶端 nfs01 配置完成
1.8.3 守護進程模式,客戶端rsync的命令語法
配置服務器端守護進程,實現(xiàn)數(shù)據(jù)傳輸:

服務器端守護進程。
客戶端執(zhí)行命令。

1.8.3.1 Pull(拉):從遠端拉取到本地。
語法1(常用):

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

rsync命令
參數(shù)選項
[虛擬用戶]@[主機地址]::[模塊名]
本地路徑

語法2:

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

rsync命令
參數(shù)選項
rsync://[虛擬用戶]@[主機地址]/[模塊名]
本地路徑

1.8.3.2 Push(推):從本地推到遠端。
語法1(常用):

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

rsync命令
參數(shù)選項
本地路徑
[虛擬用戶]@[主機地址]::[模塊名]

語法2:

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

rsync命令
參數(shù)選項
本地路徑
rsync://[虛擬用戶]@[主機地址]/[模塊名]

1.8.4 測試成果與報錯解決方法
報錯1:
[root@nfs01 ~]$ rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
@ERROR: invalid uid rsync
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]

原因分析:無效的UID:rsync,需要添加用戶rsync,并且發(fā)現(xiàn)沒有/backup目錄,需要創(chuàng)建目錄,并將用戶和用戶組都改為rsync。
解答:
[root@backup ~]useradd rsync [root@backup ~] id rsync
uid=1001(rsync) gid=1001(rsync) 組=1001(rsync)
[root@backup ~]mkdir -p /backup [root@backup ~] chown -R rsync.rsync /backup/
[root@backup ~]$ ls -ld /backup/
drwxr-xr-x 2 rsync rsync 6 4月 15 12:12 /backup/

報錯2:
[root@nfs01 ~]$ rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts
rsync: chgrp ".hosts.YDuTjO" (in backup) failed: Operation not permitted (1)

sent 223 bytes received 124 bytes 694.00 bytes/sec
total size is 332 speedup is 0.96
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]

原因分析:/etc/rsyncd.conf文件內(nèi)缺少參數(shù),導致文件的存儲屬性不完整。
解答:增加如下參數(shù)到/etc/rsyncd.conf
fake super = yes <===增加的參數(shù):不用root用戶也可以存儲文件的完整屬性。
This allows the full attributes of a file to be stored without having to have the daemon actually running as root.
[root@backup ~]grep fake /etc/rsyncd.conf fake super = yes 改完配置,要重啟服務: [root@backup ~] systemctl restart rsyncd

參數(shù)添加完后再測試:結果成功,沒有報錯
[root@nfs01 ~]$ rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts

sent 89 bytes received 49 bytes 276.00 bytes/sec
total size is 332 speedup is 2.41
服務端檢查結果:
[root@backup ~]$ ls /backup/
hosts

如果客戶端按照環(huán)境變量的方式配置,則可以忽略--password-file=/etc/rsync.password參數(shù)。
[root@nfs01 ~]$ rsync -avz /etc rsync_backup@172.16.1.41::backup
sending incremental file list

sent 52,071 bytes received 644 bytes 105,430.00 bytes/sec
total size is 31,244,350 speedup is 592.70

測試增量
[root@nfs01 ~]touch /etc/oldboy.txt [root@nfs01 ~] rsync -avz /etc rsync_backup@172.16.1.41::backup
sending incremental file list
etc/oldboy.txt

sent 52,098 bytes received 655 bytes 105,506.00 bytes/sec
total size is 31,244,350 speedup is 592.28
第二種語法:
[root@nfs01 ~]$ rsync -avz /etc rsync://rsync_backup@172.16.1.41/backup
sending incremental file list

sent 52,070 bytes received 644 bytes 105,428.00 bytes/sec
total size is 31,244,350 speedup is 592.71
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。copy的。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容