每家公司都需要為所有重要系統(tǒng)制定災(zāi)難恢復(fù)計(jì)劃。從像在某個(gè)容器中運(yùn)行的單個(gè)進(jìn)程這樣的小單元到最大的分布式架構(gòu)都是如此。特別是對(duì)于數(shù)據(jù)庫(kù),這通常涉及容錯(cuò)、冗余、定期備份和應(yīng)急計(jì)劃的混合。數(shù)據(jù)存儲(chǔ)越大,制定好的策略就越困難。
因此,希望能夠在一個(gè)數(shù)據(jù)中心運(yùn)行分布式數(shù)據(jù)庫(kù),并以某種方式將所有事務(wù)復(fù)制到另一個(gè)數(shù)據(jù)中心。通常,事務(wù)日志通過網(wǎng)絡(luò)傳送,以便在另一個(gè)數(shù)據(jù)中心的另一個(gè)相同系統(tǒng)中復(fù)制所有內(nèi)容。一些分布式數(shù)據(jù)存儲(chǔ)具有對(duì)多數(shù)據(jù)中心感知的內(nèi)置支持,并且可以以全自動(dòng)方式在數(shù)據(jù)中心之間復(fù)制。
ArangoDB3.3通過引入多數(shù)據(jù)中心支持向前邁出了進(jìn)化的一步,即數(shù)據(jù)中心到數(shù)據(jù)中心的復(fù)制。我們的解決方案是異步的,并且可以擴(kuò)展到任意集群大小,前提是您的數(shù)據(jù)中心之間的網(wǎng)絡(luò)鏈接有足夠的帶寬。它是容錯(cuò)的,沒有單點(diǎn)故障,并且包含許多用于在生產(chǎn)場(chǎng)景中監(jiān)控的指標(biāo)。
它能做什么
此功能允許您在兩個(gè)不同的數(shù)據(jù)中心A和B中運(yùn)行兩個(gè)ArangoDB集群,并設(shè)置從A到B的異步復(fù)制。這意味著數(shù)據(jù)中心A中的集群A可以照常用于讀取和寫入操作,所有更改為數(shù)據(jù)通過網(wǎng)絡(luò)復(fù)制到數(shù)據(jù)中心B中的另一個(gè)集群B。復(fù)制是異步的,也就是說,更改會(huì)在短暫的延遲后出現(xiàn)在另一端,通常在幾秒鐘內(nèi)。
在數(shù)據(jù)中心A發(fā)生災(zāi)難(例如網(wǎng)絡(luò)連接完全中斷)的情況下,可以快速停止復(fù)制并開始使用數(shù)據(jù)中心B中的集群B作為集群A的替代品。稍后,當(dāng)災(zāi)難結(jié)束時(shí),可以要么使用集群A作為集群B的異步副本,要么切換回A并繼續(xù)復(fù)制到集群A。
挑戰(zhàn)
在本節(jié)中,我們不想讓您厭煩技術(shù)細(xì)節(jié),我們將在適當(dāng)?shù)臅r(shí)候發(fā)布一份白皮書。相反,我們想強(qiáng)調(diào)這種方法的挑戰(zhàn),并概述我們?yōu)榭朔@些挑戰(zhàn)而采取的措施。
單個(gè)ArangoDB集群是一個(gè)具有良好水平可擴(kuò)展性的分布式系統(tǒng)。數(shù)據(jù)容量和查詢性能(讀取和寫入)都與使用的服務(wù)器數(shù)量呈線性關(guān)系。自動(dòng)分片導(dǎo)致數(shù)據(jù)的實(shí)際更改同時(shí)發(fā)生在所有服務(wù)器的各處。特別是,這意味著——按照設(shè)計(jì)——沒有一個(gè)地方可以建立所有變化的總順序。也就是說,我們正在處理大量數(shù)據(jù)同時(shí)發(fā)生更新的分布式混亂。變化率可能會(huì)有很大差異,我們將不得不處理大量的寫入突發(fā)。
同時(shí),ArangoDB集群是容錯(cuò)的。例如,如果數(shù)據(jù)中心中的單個(gè)服務(wù)器發(fā)生故障,ArangoDB集群可以輕松容忍這種損失,并且假設(shè)用戶已將復(fù)制因子設(shè)置為至少2,既不會(huì)丟失任何數(shù)據(jù),也不會(huì)損失可用性. 系統(tǒng)只需切換到使用另一臺(tái)服務(wù)器,重新分配數(shù)據(jù)并繼續(xù)前進(jìn),而不會(huì)影響查詢性能。因此,任何適當(dāng)?shù)膹?fù)制解決方案都必須滿足集群A中的這些透明故障轉(zhuǎn)移。
另一方面,安全問題和防火墻維護(hù)意味著我們不能輕易地讓許多不同的進(jìn)程與另一個(gè)數(shù)據(jù)中心中的許多不同進(jìn)程通信,但同樣,我們也不能輕易地通過兩個(gè)進(jìn)程之間的單個(gè)網(wǎng)絡(luò)連接的瓶頸移動(dòng)所有更新在不同的數(shù)據(jù)中心。
顯然,整個(gè)復(fù)制系統(tǒng)是分布式系統(tǒng)的分布式系統(tǒng),因此必須具有可擴(kuò)展性和容錯(cuò)性,沒有單點(diǎn)故障。
所有這些挑戰(zhàn)都決定并影響了我們解決方案的設(shè)計(jì)。
怎么運(yùn)行的
在數(shù)據(jù)中心A中,ArangoDB集群A照常運(yùn)行,無(wú)需修改其代碼庫(kù)和API,并提供其通常的負(fù)載。同樣,在數(shù)據(jù)中心B中,第二個(gè)ArangoDB集群B已部署,但最初處于空閑狀態(tài)。
在這兩個(gè)數(shù)據(jù)中心中,我們部署了一個(gè)Kafka消息代理,這是一個(gè)標(biāo)準(zhǔn)的高性能和容錯(cuò)隊(duì)列系統(tǒng),能夠在其消息隊(duì)列中緩沖大量數(shù)據(jù)。單個(gè)隊(duì)列在Kafka中稱為“主題”。這些主題可能會(huì)從其他數(shù)據(jù)中心消費(fèi)。Kafka有一定的保證,因此在出現(xiàn)網(wǎng)絡(luò)問題、個(gè)別中斷等情況時(shí),不會(huì)丟失任何消息,并且遠(yuǎn)程數(shù)據(jù)中心將始終保持一致的狀態(tài)。
此外,在每個(gè)數(shù)據(jù)中心,都有幾個(gè)名為“ArangoDBSyncMaster”的程序?qū)嵗T诿總€(gè)數(shù)據(jù)中心,SyncMasters選舉一個(gè)領(lǐng)導(dǎo)者,該領(lǐng)導(dǎo)者與另一個(gè)數(shù)據(jù)中心的SyncMaster對(duì)話以組織復(fù)制?!敖M織”在這里意味著它計(jì)劃必須在兩個(gè)數(shù)據(jù)中心中執(zhí)行的單個(gè)任務(wù)以進(jìn)行復(fù)制。本質(zhì)上,必須復(fù)制元信息,例如存在哪些數(shù)據(jù)庫(kù)、集合和用戶,以及分片集合中的實(shí)際數(shù)據(jù)。
在每個(gè)數(shù)據(jù)中心,領(lǐng)先的SyncMaster指揮一小群SyncWorker,它們執(zhí)行實(shí)際的復(fù)制任務(wù)。例如,對(duì)于一個(gè)集合的每個(gè)分片,在數(shù)據(jù)中心A中有一個(gè)“發(fā)送分片”任務(wù),在數(shù)據(jù)中心B有一個(gè)“接收分片”任務(wù),所有這些分片都由SyncMaster分配給某個(gè)SyncWorker。
這些任務(wù)負(fù)責(zé)初始增量同步階段(運(yùn)行我們?cè)贏rangoDB中已有的現(xiàn)有分片同步協(xié)議),以及后期更新階段,其中對(duì)分片的所有更新都復(fù)制到另一個(gè)數(shù)據(jù)中心(使用WALtailing in數(shù)據(jù)中心A)。
數(shù)據(jù)流如下:它從ArangoDB集群的某個(gè)DBserver開始,到達(dá)數(shù)據(jù)中心A中的一個(gè)SyncWorker,然后進(jìn)入數(shù)據(jù)中心A中的Kafka。從那里它將被寫入它的數(shù)據(jù)中心B的SyncWorker使用進(jìn)入數(shù)據(jù)中心B中的協(xié)調(diào)器。顯然,有一些控制消息以相反的方向流動(dòng)。這些控制消息將由數(shù)據(jù)中心A從數(shù)據(jù)中心B的Kafka服務(wù)器中獲取。
這對(duì)管理員來(lái)說意味著,在初始部署后,只需告訴數(shù)據(jù)中心B中的SyncMaster它應(yīng)該開始跟隨數(shù)據(jù)中心A中的集群A,就可以使用一個(gè)命令設(shè)置異步復(fù)制。從那時(shí)起,一切都是全自動(dòng)的,所有數(shù)據(jù)庫(kù)、集合、用戶和權(quán)限都會(huì)自動(dòng)復(fù)制到另一個(gè)數(shù)據(jù)中心。顯然,有監(jiān)控和配置工具,但本質(zhì)上就是這樣。
限制
這是邁向多數(shù)據(jù)中心意識(shí)的第一步,因此自然會(huì)受到限制。首先,復(fù)制是異步的,所以它總是落后于DatacenterA中的實(shí)際事件。通常情況下,連接性好,寫入速率小于跨數(shù)據(jù)中心鏈路的容量,這個(gè)延遲非常小. 然而,應(yīng)該注意,在復(fù)制突然停止并手動(dòng)切換到集群B的情況下,一些最近寫入的更新可能會(huì)丟失。
整個(gè)設(shè)置是手動(dòng)配置的,并在兩個(gè)數(shù)據(jù)中心之間工作。此階段不允許寫入副本集群。然而,一個(gè)副本集群可以同時(shí)是另一個(gè)數(shù)據(jù)中心的源,一個(gè)源集群可以有多個(gè)副本。也就是說,您可以形成數(shù)據(jù)中心樹。
最后,關(guān)閉復(fù)制并開始使用副本到目前為止是一項(xiàng)手動(dòng)操作,需要管理員做出決定和采取行動(dòng)。
責(zé)任編輯:彭菁
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9303瀏覽量
86059 -
數(shù)據(jù)中心
+關(guān)注
關(guān)注
16文章
4858瀏覽量
72380 -
網(wǎng)絡(luò)連接
+關(guān)注
關(guān)注
0文章
90瀏覽量
10927
原文標(biāo)題:ArangoDB Enterprise:數(shù)據(jù)中心到數(shù)據(jù)中心的復(fù)制
文章出處:【微信號(hào):哲想軟件,微信公眾號(hào):哲想軟件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論