運維同步rsync

Rsync(remote? rynchronization)是一款開源的、快速的、多功能的、可實現全量以及增量的本地或者遠程數據同步的備份的優秀工具,可使本地主機不同分區或目錄之間及本地和遠程兩臺主機之間的數據快速同步鏡像,遠程備份等功能同時它在同步文件的同時可以保持原來文件的權限、時間、軟硬鏈接等附加信息。可以再本地不同分區以及目錄之間全量以及增量的復制數據,不是加密的,可以實現刪除文件和目錄的功能。在同步備份數據時,通過其獨特的quick check算法,僅同步大小或者最后的修改時間發生變化的文件或者目錄,當然也可以根據權限、屬主等屬性的變化同步,但需指定相應的參數,甚至可以實現只同步一個文件里面變化的部分,實現數據的差異化備份,所以可以實現快速的同步備份數據

一、Rsync大致使用三種主要的傳輸數據方式。

本地傳輸(local)

?

當SRC和DES路徑信息都不包含有單個冒號”:”分隔符時就啟動這種工作模式

rsync -a /data /backup

rsync -b --suffix=.bak2 --backup-dir=/tmp/ /etc/passwd /home/passwd.bak

--suffix=xxx 指定舊備份文件的后綴名 --backup-dir=xxxx 指定將舊備份文件移動到哪個位置下

遠程通道

傳輸 remote shell

?

利用ssh實現數據的遠程傳輸,類似于 scp

rsync默認也是基于ssh來實現的,如果目標主機的ssh端口不是22,那么在用rsync的必須用-e選項
rsync通常都需要首先做密鑰分發
rsync在遠程傳輸文件的時候,僅僅會傳輸新文件
在進行文件傳輸過程中,必須使用對方主機上的一個用戶,還必須知道其密碼,而且該用戶還要有權限
?

拉取:rsync -v -e "ssh -p 22" root@192.168.31.201:/home/passwd /tmp/
推送:rsync -v /root/c.sh root@192.168.31.201:/home/

?

守護進程傳輸rsync的配置文件: /etc/rsyncd.conf(默認不存在)?

本地傳輸、遠程通道傳輸的本質是通過管道通信,即使是遠程shell。而守護進程傳輸則是讓遠程主機上運行rsync服務,使其監聽在一個端口上,等待客戶端的連接。

但是,通過遠程shell也能臨時啟動一個rsync daemon,這不同于守護進程傳輸,它不要求遠程主機上事先啟動rsync服務,而是臨時派生出rsync daemon,它是單用途的一次性daemon,僅用于臨時讀取daemon的配置文件,當此次rsync同步完成,遠程shell啟動的rsync daemon進程也會自動消逝。此通信方式的命令行語法格式同"Access via rsync daemon",但要求options部分必須明確指定"--rsh"選項或其短選項"-e"。

遠程shell連接的兩端是通過管道完成通信和數據傳輸的,即使連接的一端是遠程主機,當連接到目標端時,將在目標端上根據遠程shell進程fork出rsync進程使其成為rsync server。而rsync daemon是事先在server端上運行好的rsync后臺進程(根據啟動選項,也可以設置為非后臺進程),它監聽套接字等待client端的連接,連接建立后所有通信方式都是通過套接字完成的。

注意,rsync中的server的概念從來就不代表是rsync daemon,server在rsync中只是一種通用稱呼,只要不是發起rsync請求的client端,就是server端,你可以認為rsync daemon是一種特殊的server,其實daemon更應該稱之為service

二、選項說明:

-v:顯示rsync過程中詳細信息。可以使用"-vvvv"獲取更詳細信息。
-P:顯示文件傳輸的進度信息。(實際上"-P"="--partial --progress",其中的"--progress"才是顯示進度?
? ? 信息的)。
-n --dry-run :僅測試傳輸,而不實際傳輸。常和"-vvvv"配合使用來查看rsync是如何工作的。
-a --archive :歸檔模式,表示遞歸傳輸并保持文件屬性。等同于"-rtopgDl"。
-r --recursive:遞歸到目錄中去。
-t --times:保持mtime屬性。強烈建議任何時候都加上"-t",否則目標文件mtime會設置為系統時間,導致下?
? ? ? ? ? ? 次更新檢查出mtime不同從而導致增量傳輸無效。
-o --owner:保持owner屬性(屬主)。
-g --group:保持group屬性(屬組)。
-p --perms:保持perms屬性(權限,不包括特殊權限)。
-D :是"--device --specials"選項的組合,即也拷貝設備文件和特殊文件。
-l --links:如果文件是軟鏈接文件,則拷貝軟鏈接本身而非軟鏈接所指向的對象。
-z :-compress??傳輸時進行壓縮以提高傳輸效率 --compress-level=num可按級別壓縮。
-R --relative:使用相對路徑。意味著將命令行中指定的全路徑而非路徑最尾部的文件名發送給服務端,包括?
? ? ? ? ? ? ? ?它們的屬性。用法見下文示例。
--size-only :默認算法是檢查文件大小和mtime不同的文件,使用此選項將只檢查文件大小。
-u --update :僅在源mtime比目標已存在文件的mtime新時才拷貝。注意,該選項是接收端判斷的,不會影響?
? ? ? ? ? ? ? 刪除行為。
-d --dirs :以不遞歸的方式拷貝目錄本身。默認遞歸時,如果源為"dir1/file1",則不會拷貝dir1目錄,使?
? ? ? ? ? ? 用該選項將拷貝dir1但不拷貝file1。
--max-size :限制rsync傳輸的最大文件大小。可以使用單位后綴,還可以是一個小數值(例如:"--max-
? ? ? ? ? ? ?size=1.5m")
--min-size :限制rsync傳輸的最小文件大小。這可以用于禁止傳輸小文件或那些垃圾文件。
--exclude :指定排除規則來排除不需要傳輸的文件。
?? ? ? ? ? ?排除單個文件:–exclude=5.txt
? ? ? ? ? ? 排除多個文件:–exclude={5.txt, 7.txt}
? ? ? ? ? ? 基于通配符做排除:–exclude=*txt
--delete :接收端的rsync會先刪除目標目錄下已經存在,但源端目錄不存在的文件。以SRC為主,對DEST進?
? ? ? ? ? ?行同步。多則刪 之,少則補之。注意"--delete"是在接收端執行的,所以它exclude/include?
? ? ? ? ? ?規則生效之后才執行的。
-b --backup :對目標上已存在的文件做一個備份,備份的文件名后默認使用"~"做后綴。
--backup-dir:指定備份文件的保存路徑。不指定時默認和待備份文件保存在同一目錄下。
-e :指定所要使用的遠程shell程序,默認為ssh。
--port :連接daemon時使用的端口號,默認為873端口。
--password-file:daemon模式時的密碼文件,可以從中讀取密碼實現非交互式。注意,這不是遠程shell認證?
? ? ? ? ? ? ? ? ?的密碼,而是rsync模塊認證的密碼。
-W --whole-file:rsync將不再使用增量傳輸,而是全量傳輸。在網絡帶寬高于磁盤帶寬時,該選項比增量傳?
? ? ? ? ? ? ? ? ?輸更高效。
--existing :要求只更新目標端已存在的文件,目標端還不存在的文件不傳輸。注意,使用相對路徑時如果上?
? ? ? ? ? ? ?層目錄不存在也不會傳輸。
--ignore-existing:要求只更新目標端不存在的文件。和"--existing"結合使用有特殊功能,見下文示例。
--remove-source-files:要求刪除源端已經成功傳輸的文件

三、配置文件

port=888    # 指定rsync端口。默認873
uid = rsync # rsync服務的運行用戶,默認是nobody,文件傳輸成功后屬主將是這個uid
gid = rsync # rsync服務的運行組,默認是nobody,文件傳輸成功后屬組將是這個gid
use chroot = no # rsync daemon在傳輸前是否切換到指定的path目錄下,并將其監禁在內
max connections = 200 # 指定最大連接數量,0表示沒有限制
timeout = 300         # 確保rsync服務器不會永遠等待一個崩潰的客戶端,0表示永遠等待
motd file = /var/rsyncd/rsync.motd   # 客戶端連接過來顯示的消息
pid file = /var/run/rsyncd.pid       # 指定rsync daemon的pid文件
lock file = /var/run/rsync.lock      # 指定鎖文件
log file = /var/log/rsyncd.log       # 指定rsync的日志文件,而不把日志發送給syslog
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2  # 指定哪些文件不用進行壓縮傳輸###########下面指定模塊,并設定模塊配置參數,可以創建多個模塊###########
[longshuai]        # 模塊ID
path = /longshuai/ # 指定該模塊的路徑,該參數必須指定。啟動rsync服務前該目錄必須存在。rsync請求訪問模塊本質就是訪問該路徑。
ignore errors      # 忽略某些IO錯誤信息
read only = false  # 指定該模塊是否可讀寫,即能否上傳文件,false表示可讀寫,true表示可讀不可寫。所有模塊默認不可上傳
write only = false # 指定該模式是否支持下載,設置為true表示客戶端不能下載。所有模塊默認可下載
list = false       # 客戶端請求顯示模塊列表時,該模塊是否顯示出來,設置為false則該模塊為隱藏模塊。默認true
hosts allow = 10.0.0.0/24 # 指定允許連接到該模塊的機器,多個ip用空格隔開或者設置區間
hosts deny = 0.0.0.0/32   # 指定不允許連接到該模塊的機器
auth users = rsync_backup # 指定連接到該模塊的用戶列表,只有列表里的用戶才能連接到模塊,用戶名和對應密碼保存在secrts file中,# 這里使用的不是系統用戶,而是虛擬用戶。不設置時,默認所有用戶都能連接,但使用的是匿名連接
secrets file = /etc/rsyncd.passwd # 保存auth users用戶列表的用戶名和密碼,每行包含一個username:passwd。由于"strict modes"# 默認為true,所以此文件要求非rsync daemon用戶不可讀寫。只有啟用了auth users該選項才有效。
[xiaofang]    # 以下定義的是第二個模塊
path=/xiaofang/
read only = false
ignore errors
comment = anyone can access#客戶端推到服務端時,文件的屬主和屬組是配置文件中指定的uid和gid。但是客戶端從服務端拉的時候,#文件的屬主和屬組是客戶端正在操作rsync的用戶身份,因為執行rsync程序的用戶為當前用戶。#auth users和secrets file這兩行不是一定需要的,省略它們時將默認使用匿名連接。但是如果使用了#它們,則secrets file的權限必須是600。客戶端的密碼文件也必須是600。#關于secrets file的權限,實際上并非一定是600,只要滿足除了運行rsync daemon的用戶可讀即可。##是否檢查權限的設定是通過選項strict mode設置的,如果設置為false,則無需關注文件的權限。但默認是#yes,即需要設置權限。#配置完后,再就是提供模塊相關目錄、身份驗證文件等

?四、Inotify介紹

? ? ? ?Inotify可用于檢測單個文件,也可以檢測整個目錄。當檢測的對象是一個目錄的時候,目錄本身和目錄里的內容都會成為檢? ? ? ? ? ?測的對象。

? ? ? ?參數:

-e: 事件? ? ? -d:后臺運行? ? ? ?-m:始終保持事件監聽狀態? ? ? ?-q:打印很少的信息,僅僅打印監控事件的信息 安靜狀態

-r :遞歸查詢目錄? ? ? ? ? ? ? ? ? ? ?-timefmt:指定時間輸出的格式? ? ? -excluder:排除文件或者目錄的時候不區分大小寫

? ? ??

注解:

當發送端敲出rsync命令后,rsync將立即掃描命令行中給定的文件和目錄(掃描過程中還會按照目錄進行排序,將同一個目錄的文件放在相鄰的位置),這稱為拷貝樹(copy tree),掃描完成后將待傳輸的文件或目錄記錄到文件列表中,然后將文件列表傳輸給接收端。而篩選規則的作用時刻是在掃描拷貝樹時,所以會根據規則來匹配并決定文件是否記錄到文件列表中(嚴格地說是會記錄到文件列表中的,只不過排除的文件會被標記為hide隱藏起來),只有記錄到了文件列表中的文件或目錄才是真正需要傳輸的內容。換句話說,篩選規則的生效時間在rsync整個同步過程中是非常靠前的,它會影響很多選項的操作對象,最典型的如"--delete",實際上,排除規則和包含規則都只是"--filter"篩選規則的兩種特殊規則。"--filter"比較復雜,它有自己的規則語法和匹配模式

以下是rsync中的規則種類,不解之處請結合下文的"--delete"分析:

(1).exclude規則:即排除規則,只作用于發送端,被排除的文件不會進入文件列表(實際上是加上隱藏規則進行隱藏)。

(2).include規則:即包含規則,也稱為傳輸規則,只作用于發送端,被包含的文件將明確記錄到文件列表中。

(3).hide規則:即隱藏規則,只作用于發送端,隱藏后的文件對于接收端來說是看不見的,也就是說接收端會認為它不存在于源端。

(4).show規則:即顯示規則,只作用于發送端,是隱藏規則的反向規則。

(5).protect規則:即保護規則,該規則只作用于接收端,被保護的文件不會被刪除掉。

(6).risk規則:即取消保護規則。是protect的反向規則。

除此之外,還有一種規則是"clear規則",作用是刪除include/exclude規則列表,如果將"--delete"選項和"--exlcude"選項一起使用,則被排除的文件不會被刪除。

在發送端將文件列表發送給接收端后,接收端的generator(要是不知道,你認為是某個就好了)進程會掃描每個文件列表中的信息,然后對列表中的每個信息條目都計算數據塊校驗碼,最后將數據庫校驗碼發給發送端,發送端通過校驗碼來匹配哪些數據塊是需要傳輸的,這樣就實現了增量傳輸的功能——只傳輸改變的部分,不會傳輸整個文件。而delete刪除的時間點是generator進程處理每個文件列表時、生成校驗碼之前進行的,先將目標上存在但源上不存在的多余文件刪除,這樣就無需為多余的文件生成校驗碼。

所以,delete動作是比"--exclude"規則更晚執行的,被"--exlcude"規則排除的文件不會進入文件列表中,在執行了delete時會認為該文件不存在于源端,從而導致目標端將這些文件刪除。但這是想當然的,盡管理論上確實是這樣的,但是rsync為了防止眾多誤刪除情況,提供了兩種規則:保護規則(protect)和取消保護規則(risk)。默認情況下,"--delete"和"--exclude"一起使用時,雖然發送端的exclude規則將文件標記為隱藏,使得接收端認為這些被排除文件在源端不存在,但rsync會將這些隱藏文件標記為保護文件,使得它們不受delete行為的影響,這樣delete就刪除不了這些被排除的文件。如果還是想要強行刪除被exclude排除的文件,可以使用"--delete-excluded"選項強制取消保護,這樣即使被排除的文件也會被刪除。

那么現在,是否理解了網上的言論"exclude排除的文件不會被刪除"?

除了"--delete",相關的選項還有"--delete-before"、"--delete-during"、"--delete-delay"等,它們都隱含了"--delete"選項,它們分別表示generator處理各個文件列表之前一次性全部刪除待刪除文件、處理文件列表時處理到哪個文件列表就刪除該文件列表中的待刪除文件,以及同步完所有數據后一次性刪除所有待刪除文件。

舉個例子,假如源端要傳輸3個目錄a、b、c,在目標端a目錄中有a1、a2、a3共3個文件需要被刪除,b目錄中有b1、b2、b3需要刪除,同理c目錄也一樣c1、c2、c3需要被刪除。

如果是"--delete-before",則在目標端rsync剛啟動時,就會把a1-a3、b1-b3、c1-c3一次性刪除,然后才會處理文件列表中的a目錄,處理完a后處理b,再是c。

如果是"--delete-during",則在目標端rsync剛啟動時,先處理文件列表中的a目錄,處理a目錄時發現此目錄中有待刪除文件a1-a3,順手就刪除它們,然后完成a目錄的相關操作,再處理文件列表中的b目錄,發現也有待刪除文件b1-b3,順手刪除它們,同理c1-c3也如此。

如果是"--delete-delay",則同步完文件列表中的a/b/c目錄后,最后一次性刪除a1-a3、b1-b3、c1-c3。

其實"--delete"選項大多數情況下默認采用的就是"--delete-during"

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535562.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535562.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535562.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spark初識-什么是Spark

Spark是一個基于內存的開源計算框架,于2009年誕生于加州大學伯克利分校AMPLab(AMP:Algorithms,Machines,People),它最初屬于伯克利大學的研究性項目,后來在2010年正式開源&#xff0…

系統優化

1、關閉selinux sed -i ‘s/SELINUXenforcing/SELINUXdisabled’ setenforce 0 2.精簡開機服務 ntsysv setup system service

Spark初識-Spark與Hadoop的比較

Spark,是分布式計算平臺,是一個用scala語言編寫的計算框架,基于內存的快速、通用、可擴展的大數據分析引擎 Hadoop,是分布式管理、存儲、計算的生態系統;包括HDFS(存儲)、MapReduce(…

Spark初識-Spark基本架構概覽使用

當需要處理的數據量超過了單機尺度(比如我們的計算機有4GB的內存,而我們需要處理100GB以上的數據)這時我們可以選擇spark集群進行計算,有時我們可能需要處理的數據量并不大,但是計算很復雜,需要大量的時間,這時我們也可…

Spark初識-彈性分布式數據集RDD

Spark 的核心是建立在統一的抽象彈性分布式數據集(Resiliennt Distributed Datasets,RDD)之上的,這使得 Spark 的各個組件可以無縫地進行集成,能夠在同一個應用程序中完成大數據處理。 一、RDD概念 RDD 是 Spark 提供…

nmon

1).采集數據: #nmon -s10 -c60 -f -m /home/ 參數解釋: -s10 每 10 秒采集一次數據。 -c60 采集 60 次,即為采集十分鐘的數據。 -f 生成的數據文件名中包含文件創建的時間。 -m 生成的數據文件的存放目錄。 這樣就會生成一個 nmon 文件&…

Spark入門- Spark運行Local本地模式

一、Spark單機模式部署 Spark版本 : spark-2.4.7-bin-hadoop2.7 1、安裝配置JDK環境 2、下載Spark 官網下載http://spark.apache.org/ 然后上傳到LInux服務器上 3、解壓 tar -zxvf spark-2.4.7-bin-hadoop2.7.tgz解壓目錄說明 bin 可執行腳本 conf …

Spark入門-了解Spark核心概念

在本文中我們將從Spark集群角度和程序應用的角度來對相關概念進行了解 一. 站在集群角度 1.1 Master Spark 特有資源調度系統的 Leader。掌管著整個集群的資源信息,類似于 Yarn 框架中的 ResourceManager,主要功能: 監聽 Worker&#xff0…

Spark運行standalone集群模式

spark的集群主要有三種運行模式standalone、yarn、mesos,其中常被使用的是standalone和yarn,本文了解一下什么是standalone運行模式,并嘗試搭建一個standalone集群 一、standalone模式 standalone模式,是spark自己實現的&#xf…

docker原理

a.更快速的支付和部署:開發者可以使用一個標準的鏡像來構建一套開發容器 ,開發完成之后,運維人員可以直接使用這個容器來部署代碼。 b.更高效的虛擬化: Docker容器的運行不需要額外的hypervisor支持,它是內核級的虛擬化,因此 可以實現更高的性能和效。 I 0c更輕松的遷移和擴展…

創造型模式——工廠模式

工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。 在工廠模式中,我們在創建對象時不會對客戶端暴露創建邏輯,并且是通過使用一個共同的…

創造型模式——抽象工廠模式

抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠創建其他工廠。該超級工廠又稱為其他工廠的工廠。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。 在抽象工廠模式中,接口是負責創建一個相關對象的…

Iptables防火墻原理

一、IPTABLES概念 iptables是隔離主機以及網絡的工具,通過自己設定的規則以及處理動作對數據報文進行檢測以及處理。從設備上分類,防火墻分為軟件防火墻、硬件防火墻、芯片級防火墻。從技術上分類,防火墻分為數據包過濾型防火墻、應用代理型防火墻。這是因為四層模型的每一…

創造型模式——單例模式

單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。 這種模式涉及到一個單一的類,該類負責創建自己的對象,同時確保只有單個對象被創建…

trap命令

trap命令用于指定在接收到信號后將要采取的行動,信號的信息前面已經提到。 trap 命令的一種常見用途是在腳本程序被中斷時完成清理工作。 歷史上,shell 總是用數字來代表信號,而新的腳本程字應該使用信號的名字,它們保存在用#include命令包含進來的signal.h頭文件中,在使用…

創造型模式——建造者模式

建造者模式(Builder Pattern)使用多個簡單的對象一步一步構建成一個復雜的對象。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。 一個 Builder 類會一步一步構造最終的對象。該 Builder 類是獨立于其他對象的。 一、介紹…

shell知識點

靜態語言是編譯型語言,強類型的語言 如C,C++,java(面向對象),C#, 動態語言是解釋型語言,弱類型的語言,邊解釋邊執行 ,需要解釋器,解釋器是用靜態語言開發的如shell(面向過程), perl,asp,asp.net,php,python(面向對象) 腳本執行 1.…

創造性模式——原型模式

原型模式(Prototype Pattern)是用于創建重復的對象,同時又能保證性能。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。 這種模式是實現了一個原型接口,該接口用于創建當前對象的克隆。當直接創建…

Consider defining a bean of type ‘java.lang.String‘ in your configuration

Consider defining a bean of type ‘java.lang.String’ in your configuration 總結了網上的幾種解決方案: 1、多余的autowired 2、待實例化的類里必須有默認的構造方法(即沒有參數的那種) Consider defining a bean of type ‘XXXX’ …

SpringBoot-探索回顧Spring框架本質

自始至終,SpringBoot框架都是為了能夠幫助使用Spring框架的開發 快速高效地構建 一個個基于Spring框架以及Spring生態體系的應用解決方案。要深刻理解SpringBoot框架,首先我們需要深刻理解Spring框架。 一、Spring 中的 IoC、DI 和 DL 部分Java開發者對…