您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關MongoDB服務如何配置的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數(shù)據(jù)存儲解決方案。
想在筆記本電腦上嘗試 MongoDB?只需執(zhí)行一個命令,你就會有一個輕量級的、獨立的沙箱。完成后可以刪除你所做的所有痕跡。
想在多個環(huán)境中使用相同的程序棧application stack副本?構建你自己的容器鏡像,讓你的開發(fā)、測試、運維和支持團隊使用相同的環(huán)境克隆。
容器正在徹底改變整個軟件生命周期:從最早的技術性實驗和概念證明,貫穿了開發(fā)、測試、部署和支持。
編排工具用來管理如何創(chuàng)建、升級多個容器,并使之高可用。編排還控制容器如何連接,以從多個微服務容器構建復雜的應用程序。
豐富的功能、簡單的工具和強大的 API 使容器和編排功能成為 DevOps 團隊的首選,將其集成到連續(xù)集成(CI) 和連續(xù)交付 (CD) 的工作流程中。
這篇文章探討了在容器中運行和編排 MongoDB 時遇到的額外挑戰(zhàn),并說明了如何克服這些挑戰(zhàn)。
使用容器和編排運行 MongoDB 有一些額外的注意事項:
MongoDB 數(shù)據(jù)庫節(jié)點是有狀態(tài)的。如果容器發(fā)生故障并被重新編排,數(shù)據(jù)則會丟失(能夠從副本集的其他節(jié)點恢復,但這需要時間),這是不合需要的。為了解決這個問題,可以使用諸如 Kubernetes 中的數(shù)據(jù)卷volume 抽象等功能來將容器中臨時的 MongoDB 數(shù)據(jù)目錄映射到持久位置,以便數(shù)據(jù)在容器故障和重新編排過程中存留。一個副本集中的 MongoDB 數(shù)據(jù)庫節(jié)點必須能夠相互通信 – 包括重新編排后。副本集中的所有節(jié)點必須知道其所有對等節(jié)點的地址,但是當重新編排容器時,可能會使用不同的 IP 地址重新啟動。例如,Kubernetes Pod 中的所有容器共享一個 IP 地址,當重新編排 pod 時,IP 地址會發(fā)生變化。使用 Kubernetes,可以通過將 Kubernetes 服務與每個 MongoDB 節(jié)點相關聯(lián)來處理,該節(jié)點使用 Kubernetes DNS 服務提供“主機名”,以保持服務在重新編排中保持不變。一旦每個單獨的 MongoDB 節(jié)點運行起來(每個都在自己的容器中),則必須初始化副本集,并添加每個節(jié)點到其中。這可能需要在編排工具之外提供一些額外的處理。具體來說,必須使用目標副本集中的一個 MongoDB 節(jié)點來執(zhí)行 rs.initiate 和 rs.add 命令。如果編排框架提供了容器的自動化重新編排(如 Kubernetes),那么這將增加 MongoDB 的彈性,因為這可以自動重新創(chuàng)建失敗的副本集成員,從而在沒有人為干預的情況下恢復完全的冗余級別。應該注意的是,雖然編排框架可能監(jiān)控容器的狀態(tài),但是不太可能監(jiān)視容器內(nèi)運行的應用程序或備份其數(shù)據(jù)。這意味著使用 MongoDB Enterprise Advanced 和 MongoDB Professional 中包含的 MongoDB Cloud Manager 等強大的監(jiān)控和備份解決方案非常重要??梢钥紤]創(chuàng)建自己的鏡像,其中包含你首選的 MongoDB 版本和 MongoDB Automation Agent。
如上節(jié)所述,分布式數(shù)據(jù)庫(如 MongoDB)在使用編排框架(如 Kubernetes)進行部署時,需要稍加注意。本節(jié)將介紹詳細介紹如何實現(xiàn)。
我們首先在單個 Kubernetes 集群中創(chuàng)建整個 MongoDB 副本集(通常在一個數(shù)據(jù)中心內(nèi),這顯然不能提供地理冗余)。實際上,很少有必要改變成跨多個集群運行,這些步驟將在后面描述。
副本集的每個成員將作為自己的 pod 運行,并提供一個公開 IP 地址和端口的服務。這個“固定”的 IP 地址非常重要,因為外部應用程序和其他副本集成員都可以依賴于它在重新編排 pod 的情況下保持不變。
下圖說明了其中一個 pod 以及相關的復制控制器和服務。
圖 1:MongoDB 副本集成員被配置為 Kubernetes Pod 并作為服務公開圖 1:MongoDB 副本集成員被配置為 Kubernetes Pod 并作為服務公開逐步介紹該配置中描述的資源:
從核心開始,有一個名為 mongo-node1 的容器。mongo-node1 包含一個名為 mongo 的鏡像,這是一個在 Docker Hub 上托管的一個公開可用的 MongoDB 容器鏡像。容器在集群中暴露端口 27107。Kubernetes 的數(shù)據(jù)卷功能用于將連接器中的 /data/db 目錄映射到名為 mongo-persistent-storage1 的永久存儲上,這又被映射到在 Google Cloud 中創(chuàng)建的名為 mongodb-disk1 的磁盤中。這是 MongoDB 存儲其數(shù)據(jù)的地方,這樣它可以在容器重新編排后保留。容器保存在一個 pod 中,該 pod 中有標簽命名為 mongo-node,并提供一個名為 rod 的(任意)示例。配置 mongo-node1 復制控制器以確保 mongo-node1 pod 的單個實例始終運行。名為 mongo-svc-a 的 負載均衡 服務給外部開放了一個 IP 地址以及 27017 端口,它被映射到容器相同的端口號上。該服務使用選擇器來匹配 pod 標簽來確定正確的 pod。外部 IP 地址和端口將用于應用程序以及副本集成員之間的通信。每個容器也有本地 IP 地址,但是當容器移動或重新啟動時,這些 IP 地址會變化,因此不會用于副本集。下一個圖顯示了副本集的第二個成員的配置。
圖 2:第二個 MongoDB 副本集成員配置為 Kubernetes Pod圖 2:第二個 MongoDB 副本集成員配置為 Kubernetes Pod90% 的配置是一樣的,只有這些變化:
磁盤和卷名必須是唯一的,因此使用的是 mongodb-disk2 和 mongo-persistent-storage2Pod 被分配了一個 instance: jane 和 name: mongo-node2 的標簽,以便新的服務可以使用選擇器與圖 1 所示的 rod Pod 相區(qū)分。復制控制器命名為 mongo-rc2該服務名為mongo-svc-b,并獲得了一個唯一的外部 IP 地址(在這種情況下,Kubernetes 分配了 104.1.4.5)第三個副本成員的配置遵循相同的模式,下圖展示了完整的副本集:
圖 3:配置為 Kubernetes 服務的完整副本集成員圖 3:配置為 Kubernetes 服務的完整副本集成員請注意,即使在三個或更多節(jié)點的 Kubernetes 群集上運行圖 3 所示的配置,Kubernetes 可能(并且經(jīng)常會)在同一主機上編排兩個或多個 MongoDB 副本集成員。這是因為 Kubernetes 將三個 pod 視為屬于三個獨立的服務。
為了在區(qū)域內(nèi)增加冗余,可以創(chuàng)建一個附加的 headless 服務。新服務不向外界提供任何功能(甚至不會有 IP 地址),但是它可以讓 Kubernetes 通知三個 MongoDB pod 形成一個服務,所以 Kubernetes 會嘗試在不同的節(jié)點上編排它們。
圖 4:避免同一 MongoDB 副本集成員的 Headless 服務圖 4:避免同一 MongoDB 副本集成員的 Headless 服務配置和啟動 MongoDB 副本集所需的實際配置文件和命令可以在白皮書《啟用微服務:闡述容器和編排》中找到。特別的是,需要一些本文中描述的特殊步驟來將三個 MongoDB 實例組合成具備功能的、健壯的副本集。
上面創(chuàng)建的副本集存在風險,因為所有內(nèi)容都在相同的 GCE 集群中運行,因此都在相同的可用區(qū)availability zone中。如果有一個重大事件使可用區(qū)離線,那么 MongoDB 副本集將不可用。如果需要地理冗余,則三個 pod 應該在三個不同的可用區(qū)或地區(qū)中運行。
令人驚奇的是,為了創(chuàng)建在三個區(qū)域之間分割的類似的副本集(需要三個集群),幾乎不需要改變。每個集群都需要自己的 Kubernetes YAML 文件,該文件僅為該副本集中的一個成員定義了 pod、復制控制器和服務。那么為每個區(qū)域創(chuàng)建一個集群,永久存儲和 MongoDB 節(jié)點是一件很簡單的事情。
圖 5:在多個可用區(qū)域上運行的副本集圖 5:在多個可用區(qū)域上運行的副本集下一步要了解有關容器和編排的更多信息 – 所涉及的技術和所提供的業(yè)務優(yōu)勢 – 請閱讀白皮書《啟用微服務:闡述容器和編排》。該文件提供了獲取本文中描述的副本集,并在 Google Container Engine 中的 Docker 和 Kubernetes 上運行的完整的說明。
感謝各位的閱讀!關于“MongoDB服務如何配置”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。