rsync: - a fast, versatile, remote (and local) file-copying tool
rsync:是一種快速,多功能,遠程和本地文件拷貝的工具
rsync --version:查看rsync軟件版本
備份服務重要性: 企業中全部要進行操做的數據文件,必定操做前備份。
企業備份數據方法:重要數據須要保存在專門備份服務器上 第三方網盤存儲。
算法
全量:將主機A的數據所有傳送給主機B
增量:將主機A新增的數據傳送給主機B
數據庫
方式一: 對源數據和目標目錄中的數據進行比對屬性信息
在同步備份數據時,默認狀況下,Rsync經過其獨特的「quick check」算法,它僅同步大小或者最後修改時間發生變化的文件或目錄,固然也可根據權限,屬主等屬性的變化同步,但須要指定相應的參數,甚至能夠實現只同步一個文件裏有變化的內容部分,因此,能夠實現快速的同步備份數據。
方式二: 利用文件指紋進行判斷文件是否相同
md5運算生成校驗數值信息(指紋信息)驗證文件是否改變
將生成的md5值發送給目標主機,目標主機驗證接收的md5值是否與本機文件所產生的md5相同,如何不相同。則進行傳輸。
安全
rsync便是軟件也是命令。服務器
相似於 cp 命令 | 實現本地備份傳輸數據 | |
---|---|---|
相似於scp 命令 | 遠程備份傳輸數據 | |
相似於 rm 命令 | 實現無差別同步備份 | |
相似於 ls 命令 | 本地文件信息查看 |
備份文件:rsync /etc/hosts /tmp 備份目錄:rsync -a /aaa /tmp
scp:遠程傳輸數據app
傳輸文件:scp /etc/hosts root@172.16.1.41:/tmp 傳輸目錄:scp -rp /aaa root@172.16.1.41:/tmp
rsync運維
備份文件:rsync /etc/hosts root@172.16.1.41:/tmp 備份目錄:rsync -rp /aaa root@172.16.1.41:/tmp
利用rsync傳輸目錄數據
目錄數據後面有/ /aaa/ 將目錄下面的數據內容進行傳輸
** 目錄數據後面沒/ /aaa 將目錄自己和目錄下面的數據內容進行傳輸**
ssh
快速清空數據socket
mkdir null #建立一個空目錄 rsync -avz --delete /null/ /test
註釋:--delete 無差別同步參數 將兩個目錄中的數據保持高度一致。
能夠理解爲我(/null)有的東西,你也有。我(/null)沒有的東西,你也不能有。null是個空目錄,--delete保證了無差別同步,因此test目錄的內容被清空。
tcp
查看文件:rsync /etc/hosts 查看目錄:rsync /test
(1)支持拷貝普通文件與特殊文件如連接文件,設備等。
(2)能夠有排除指定文件或目錄同步的功能,至關於打包命令tar的排除功能。
#tar zcvf backup_1.tar.gz /opt/data -exclude=clsn
說明:在打包/opt/data時就排除了clsn命名的目錄和文件。
(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)支持匿名的或認證(無需系統用戶)的進程模式傳輸,可實現方便安全的進行數據備份及鏡像。
本地複製備份文件 == cp Local: rsync [OPTION...] SRC... [DEST] SRC:要備份的數據 Dest:要備份到什麼路徑中 語法:rsync /etc/hosts /tmp
推送,拉取都是在客戶端操做
Access via remote shell:遠程數據備份文件 Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]====客戶端將遠程主機數據拉取到本地主機 Pull: 拉取 [USER@]: 指定以什麼用戶身份登陸到遠程主機(默認是當前系統用戶) HOST: 遠程主機IP地址或者主機名稱 SRC: 遠程要拉取的數據信息 DEST: 保存到本地路徑信息 語法:rsync root@10.0.0.41:/tmp/test.txt /aaa #將10.0.0.41主機的test.txt文件拉取到本地主機
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST====客戶端將本地主機數據推送到遠端主機 [USER@]: 指定以什麼用戶身份登陸到遠程主機(默認是當前系統用戶) Push: 推送 HOST: 遠程主機IP地址或者主機名稱 SRC: 本地要推送的數據信息 DEST: 保存到遠程路徑信息 語法: rsync /etc/hosts root@172.16.1.41:/tmp #將hosts文件推送給10.0.0.41主機/tmp目錄
Access via rsync daemon====利用守護進程方式備份數據 Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] Push: 客戶端驗證rsync方式 (1)rsync [OPTION...] SRC... [USER@]HOST::DEST src: 本地要推送的數據信息 [USER@] 認證用戶名稱信息 HOST: 備份服務器IP地址或者主機名稱,host後面須要有兩個冒號 DEST: 指定模塊信息的名字backup 語法: rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup (2)rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST #不經常使用,理解便可 PORT:端口是以前默認的能夠不寫,但若是改變要加上端口 DEST:備份的路徑
守護進程方式做用:
(1)控制備份傳輸數據鏈接數
(2)能夠實現免交互傳輸數據
(3)能夠實現認證訪問功能
(4)能夠實現安全訪問控制
文字說明:
(1)客戶端:發送要傳輸數據的請求
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
(2)服務端:接收到傳輸數據請求,進行用戶認證操做。
服務端確認用戶信息是否正確,確認客戶端輸入的用戶 == 服務端配置文件裏的用戶
服務端確認用戶密碼是否正確,確認客戶端輸入的密碼 == 服務端相應用戶的密碼信息
在進行用戶認證時,須要判斷兩個文件的權限是不是600
(3)客戶端:將數據傳輸到服務端,會轉換傳輸的身份,將數據信息權限改動 rsync
(4)服務端:若是想讓數據正確保存,修改備份目錄屬主屬組爲rsync.rsync
yum install -y rsync #安裝rsync軟件 rpm -qa rsync #查看rsync軟件版本 rsync-3.1.2-4.el7.x86_64 #3.1.2版本
vi /etc/rsyncd.conf #rsync_config #created by HQ at 2017 ##rsyncd.conf start## uid = rsync #虛擬用戶rsync,管理備份目錄 gid = rsync #虛擬用戶組rsync,管理備份目錄 port = 873 #服務默認端口號873 fake super = yes #假裝管理員功能開啓 便於能夠執行chgrp命令 use chroot = no #安全配置 max connections = 200 #最大鏈接數 同時支持200個客戶端鏈接 timeout = 300 #鏈接超時時間 單位:秒 pid file = /var/run/rsyncd.pid #進程信息文件,便於獲取進程號中止進程,判斷服務是否啓動,避免反覆啓動 lock file = /var/run/rsync.lock #鎖文件:在最大鏈接數達到200時,會進行限制鏈接操做 log file = /var/log/rsyncd.log #服務運行時日誌文件 ignore errors #忽略傳輸過程當中一些小的問題 read only = false #指定備份目錄的權限爲可讀可寫 false:假 list = false #改成true,客戶端能夠列表顯示服務端模塊詳細信息 hosts allow = 172.16.1.0/24 #安全策略配置,設置一個白名單,只容許172.16.1這個網段進行訪問 hosts deny = 0.0.0.0/32 #安全策略配置 設置一個黑名單,不容許哪一個網段進行訪問 auth users = rsync_backup #定義認證用戶 rsync_backup爲認證用戶 secrets file = /etc/rsync.password #密碼文件 用戶密碼信息 格式:rsync_backup:oldboy123 [backup] #模塊的名稱(能夠任意起名) comment = "backup dir by oldboy" #模塊註釋說明信息 path = /backup #備份的目錄
以上爲rsync配置文件的說明,如需配置請下載rsyncd.zip或者將說明中#號註釋的所有刪掉。
id rsync #查看如下是否有rsync這個用戶 useradd rsync -M -s /sbin/nologin #建立rsync虛擬用戶
echo "rsync_backup:oldboy123" >/etc/rsync.password chmod 600 /etc/rsync.password #只能root用戶才能查看密碼
mkdir /backup chown rsync.rsync /backup
systemctl start rsyncd systemctl restart rsyncd systemctl enable rsyncd
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
執行命令後顯示以下圖,則證實服務端部署成功。在這裏注意的是輸入的密碼是3.1.4步驟中的密碼。
echo oldboy123 >/etc/rsync.password #將3.1.4步驟中的密碼寫入到rsync.password(可任意起名) chmod 600 /etc/rsync.password #修改權限只能root查看密碼
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
-avz | 經常使用參數 | |
---|---|---|
-a | 屬於一個歸檔參數,等於直接使用 -rlptgoD 的參數效果 | |
-v | 顯示數據傳輸過程信息 | |
-z | 傳輸文件時,對文件進行壓縮處理(提升傳輸效率 節省帶寬) | |
-r | 遞歸備份傳輸數據 | |
-l | 保持連接文件屬性不變 | |
-p | 保持普通文件屬性權限不變 | |
-t | 保持文件時間信息不被改變(mtime修改時間) | |
-g | 保持文件屬組信息不變 | |
-o | 保持文件屬主信息不變 | |
-D | 保持設備文件屬性信息不變 | |
--delete | 實現無差別同步參數 讓服務器目錄中數據信息和備份目錄中的數據信息保持高度一致 |
|
--exclude=PATTERN | 指定排除不須要傳輸的文件信息 | |
--exclude-from=file | 文件名所在目錄文件,便可以實現排除多個文件 | |
--bwlimit=RATE | 限速功能,單位爲M | |
--daemon | daemon表示以守護進程的方式啓動rsync服務 |
環境條件:
人員 | 模塊 | 模塊對應備份目錄 |
---|---|---|
開發人員 | devop | /devop |
運維人員 | sa | /sa |
數據庫人員 | dba | /dba |
第一步:修改配置文件
vi /etc/rsyncd.conf
[sa] comment = "backup dir by sa" path = /sa [devop] comment = "backup dir by devop" path = /devop [dba] comment = "backup dir by dba" path = /dba
第二步:建立並修改備份目錄
mkdir /{sa,dev,dba} -p chown rsync.rsync /{sa,dev,dba} ll -d /{sa,dev,dba} drwxr-xr-x 2 rsync rsync 6 Jul 15 16:24 /dba drwxr-xr-x 6 rsync rsync 140 Jul 15 16:23 /dev drwxr-xr-x 2 rsync rsync 6 Jul 15 16:24 /sa
補充擴展:若是統一將數據存儲在一個目錄中,如何進行區分不一樣數據是哪一個用戶存儲的?又或者如何保持推送的數據屬主屬組不變?
要推送的數據:
[root@yang home]#ll 5.txt -rw-r--r-- 1 oldgirl oldgirl 0 Jul 14 11:42 5.txt
修改配置文件:
uid = root gid = root #fake super = yes
修改備份目錄權限
chown root.root /backup/
環境準備:
mkdir /oldboy/{a..c} -p touch /oldboy/{a..c}/oldboy{01..03}.txt [root@yang oldboy]#tree . ├── a │ ├── oldboy01.txt │ ├── oldboy02.txt │ └── oldboy03.txt ├── b │ ├── oldboy01.txt │ ├── oldboy02.txt │ └── oldboy03.txt └── c ├── oldboy01.txt ├── oldboy02.txt └── oldboy03.txt
參數:
--exclude: 排除指定單個數據信息
--exclude-from: 排除指定多個數據信息
要求1:備份/oldboy整個數據,排除b目錄不要同步備份 排除c目錄中oldboy03.txt文件不要備份
[root@yang /]#rsync -avz /oldboy/ --exclude=b --exclude=c/oldboy03.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list ./ a/ a/oldboy01.txt a/oldboy02.txt a/oldboy03.txt c/ c/oldboy01.txt c/oldboy02.txt sent 385 bytes received 134 bytes 1,038.00 bytes/sec total size is 0 speedup is 0.00
PS:--exclude指定排除數據信息,目錄結構必須是相對路徑,相對於傳輸的目錄而言
要求2:備份/oldboy整個數據,排除b目錄中01.txt ,02.txt c目錄中 01.txt, 02 .txt
exclude-from=file 要建立一個文件
vi /oldboy/exclude.txt #編輯exclude.txt b/oldboy01.txt #寫入要排除的 b/oldboy02.txt c/oldboy01.txt c/oldboy02.txt
執行命令:
[root@yang oldboy]#rsync -avz /oldboy/ --exclude-from=/oldboy/exclude.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list ./ exclude.txt a/ a/oldboy01.txt a/oldboy02.txt a/oldboy03.txt b/ b/oldboy03.txt c/ c/oldboy03.txt sent 514 bytes received 161 bytes 1,350.00 bytes/sec total size is 60 speedup is 0.09
rsync -avz /oldboy/ rsync_backup@172.16.1.41::backup/sa/ --password-file=/etc/rsync.password
ps:模塊目錄下建立目錄是一級一級建立,不能一次性建立多級目錄
hosts allow = 172.16.1.0/24 --- 容許172.16.1.0網段主機存儲數據
hosts deny = 0.0.0.0/32 --- 阻止0.0.0.0地址主機存儲數據
備份服務配置文件中:全局配置 局部配置
全局配置:在模塊之上配置都是全局配置 能夠影響全部模塊
局部配置:在模塊中的配置都是局部配置 能夠影響指定模塊
PS:局部配置優先於全局配置,白名單優先於黑名單
list = false --- 若是改成true,客戶端能夠列表顯示服務端詳細模塊信息
list=true
[root@backup ~]#rsync -avz rsync_backup@172.16.1.41:: backup "backup dir by oldboy" sa "backup dir by sa" devop "backup dir by devop" dba "backup dir by dba"
--delete:保證客戶端和服務端數據高度一致
清空數據目錄:rsync -avz --delete /null/ 172.16.1.41:/test #null爲空目錄 清空數據文件:rsync -avz --delete /aaa.txt /test/test.txt #aaa.txt爲空文件 rsync -avz --delete /aaa.txt 172.16.1.41:/bbb/bbb.txt
補充:傳輸大的文件,如何顯示傳輸過程 (-P)
[root@yang ~]# rsync -avzP /tmp/500M rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list 500M 524,288,000 100% 115.28MB/s 0:00:04 (xfr#1, to-chk=0/1) sent 509,967 bytes received 43 bytes 68,001.33 bytes/sec total size is 524,288,000 speedup is 1,027.00
服務端端口號發生改變 --port 端口號
[root@yang ~]# rsync -avzP /tmp/500M rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password --port 874 sending incremental file list sent 47 bytes received 20 bytes 134.00 bytes/sec total size is 524,288,000 speedup is 7,825,194.03
若是rsyncd.conf配置文件不在/etc目錄下,而是在/tmp下,該如何啓動rsync服務
[root@yang ~]# rsync --daemon --config=/tmp/rsync.conf [root@yang ~]# netstat -lntup|grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 9933/rsync tcp6 0 0 :::873 :::* LISTEN 9933/rsync
[root@yang ~]# rsync --daemon --address=172.16.1.41 [root@yang ~]# netstat -lntup |grep 873 tcp 0 0 172.16.1.41:873 0.0.0.0:* LISTEN 2583/rsync
--daemond的參數
daemon啓動擴展參數 | ||
---|---|---|
--daemon | daemon表示以守護進程的方式啓動rsync服務。 | |
--address | 綁定指定IP地址提供服務。 | |
--config=FILE | 更改配置文件路徑,而不是默認的/etc/rsyncd.conf | |
--port=PORT | 更改其它端口提供服務,而不是已經改變的873端口 |
優勢:實現增量備份數據 缺點:在同步大量小文件,容易形成數據丟失 (能夠將目錄進行壓縮處理,而後進行同步) 在同步大文件數據,容易形成數據傳輸中斷,斷點續傳功能不強。(能夠用FTP進行同步)