MongoDB on Kubernetes技術(shù)解決方案_第1頁(yè)
MongoDB on Kubernetes技術(shù)解決方案_第2頁(yè)
MongoDB on Kubernetes技術(shù)解決方案_第3頁(yè)
MongoDB on Kubernetes技術(shù)解決方案_第4頁(yè)
MongoDB on Kubernetes技術(shù)解決方案_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、MongoDB on Kubernetes技術(shù)解決方案AgendaMongoDB在kubernetes中的架構(gòu)如何在kubernetes中快速部署各種規(guī)格的MongoDB實(shí)踐過(guò)程中遇到的問(wèn)題為什么選擇Kubernetes?傳統(tǒng)方式:腳本 + 物理機(jī) 虛擬機(jī)方式:腳本 + 虛擬機(jī)docker方式:腳本 + docker而Kubernetes的目標(biāo)是讓部署docker化的應(yīng)用簡(jiǎn)單并且高效,Kubernetes提供了強(qiáng)大的API,可以出色的完成各式 各樣的調(diào)度、配置、管理、監(jiān)控。為我們MongoDB的快速部署、靈活調(diào)整、監(jiān)控管理提供了堅(jiān)實(shí)的基礎(chǔ)。Kubernetes中傳統(tǒng)部署部署MongoDB準(zhǔn)備M

2、ongoDB的docker image使用helm/k8s格式y(tǒng)aml的方式進(jìn)行創(chuàng)建配置。這種部署方式是當(dāng)前主流的部署方式,但是中間有著大量的腳本開(kāi)發(fā)成本,而且一旦遇到復(fù)雜結(jié)構(gòu)的集群則無(wú)法靈 活調(diào)整處理,同時(shí)只負(fù)責(zé)創(chuàng)建,不會(huì)兼顧到整個(gè)生命周期。Kubernetes中Operator部署部署MongoDB準(zhǔn)備MongoDB的docker image使用operator自定義格式y(tǒng)aml的方式進(jìn)行創(chuàng)建配置。什么是Operator?Operator 是 Kubernetes 的擴(kuò)展軟件,它利用定制資源管理應(yīng)用及其組件。Operator遵循Kubernetes的理念, 特別是在控制器方面。Operat

3、or將大量重復(fù)重復(fù)性的任務(wù)按照我們編寫的任務(wù)自動(dòng)代碼化,同時(shí)Operator會(huì)獲得很多Kubernetes內(nèi)置 的自動(dòng)化功能,優(yōu)異的Operator甚至能優(yōu)化Kubernetes自身。可以直觀的理解Operator是Kubernetes API的客戶端!什么是MongoDB Enterprise Kubernetes Opeartor?將創(chuàng)建MongoDB實(shí)例的一系列人工操作轉(zhuǎn)化為可擴(kuò)展,可重復(fù)和標(biāo)準(zhǔn)化的方法。MongoDB全生命周期的管理。管理MongoDB集群規(guī)格,通過(guò)Kubernetes api完成資源配置、網(wǎng)絡(luò)配置以及存儲(chǔ)持久化 4.與Ops manager/cloud manager

4、一同使用,實(shí)現(xiàn)MongoDB的監(jiān)控與管理。MongoDB+ MongoDB ops + MongoDB operator + kubernetes的架構(gòu),以及各組件的功能及關(guān)系當(dāng)ops部署在kubernetes內(nèi)部的時(shí)候架構(gòu)如 左圖所示,此時(shí)ops為kubernetes中的pod 之一,這樣做的優(yōu)勢(shì)在于在進(jìn)行動(dòng)態(tài)擴(kuò)容以 及高可用方面比較方便。同時(shí)也易于統(tǒng)一管 理,但是缺點(diǎn)在于Ops的穩(wěn)定性依賴于 kubernetes的穩(wěn)定性。MongoDB+ MongoDB ops + MongoDB operator + kubernetes的架構(gòu),以及各組件的功能及關(guān)系當(dāng)ops部署在kubernetes外

5、部的時(shí)候架構(gòu)如 左圖所示,此時(shí)ops跟我們平時(shí)使用的ops一 樣,沒(méi)有任何區(qū)別,只是會(huì)接受Operator的 調(diào)度,這種架構(gòu)下,優(yōu)勢(shì)在于在管理上跟我 們平時(shí)操作沒(méi)有任何差異,資源均獨(dú)立管理。 同時(shí)可以O(shè)ps部分可以使用MongoDBCloud Manager,進(jìn)一步減少運(yùn)維成本。MongoDB+ MongoDB ops + MongoDB operator + kubernetes的架構(gòu),以及各組件的功能及關(guān)系Operator:根據(jù)我們提供的信息,告知kubernetes我們需要的資源,并調(diào)度kubernetes生成符合我們規(guī)格需求的pod,申請(qǐng)持久化存儲(chǔ), 并配置好各個(gè)pod的網(wǎng)絡(luò)。Kube

6、rnetes:在接收到Operator傳輸過(guò)來(lái)的信息后,在Kubernetes集群中按照規(guī)格申請(qǐng)配置 對(duì)應(yīng)的pod。MongoDB Ops manager:在接收到Operator傳輸過(guò)來(lái)的信息后,向Kubernetes生成的pod中 推送automation Agent,通過(guò)Agent來(lái)配置不同 類型的MongoDB。MongoDB在kubernetes中的架構(gòu)如何在kubernetes中快速部署各種規(guī)格的MongoDB實(shí)踐過(guò)程中遇到的問(wèn)題目錄在Kubernetes中創(chuàng)建MongoDB前,我們需要準(zhǔn)備一些東西:完成operator的部署。需要一個(gè)Ops/Cloud Manager。生成Ops

7、/Cloud Manager中的用戶以及public API key,同時(shí)基于這個(gè)用戶以及public API key生成Kubernetes 中 的 secret:kubectl -n mongodb create secret generic local-cert -from-literal=user=test -from- literal=publicApiKey=xadj42c9-900d-41b3-ac00-063ff4ff0603configMap:Kubernetes中的一類資源,用于指向我們的Ops/Cloud Manager中的一個(gè)project。configMap的樣式:如

8、何創(chuàng)建Standalone,ReplicaSet,ShardedCluster?在Kubernetes中我們通過(guò)yaml文件來(lái)完成Standalone,ReplicaSet,ShardedCluster的配置。在yaml文件中,我們可以控制MongoDB的規(guī)格,cpu/內(nèi)存,存儲(chǔ)大小,參數(shù)配置等關(guān)鍵項(xiàng)。Standalone的yaml示例:space: 我們需要?jiǎng)?chuàng)建MongoDB在Kubernetes中的namespace。spec.version:我們需要?jiǎng)?chuàng)建MongoDB的版本,注意,這里必須寫入完整的版本號(hào),如3.6.19spec.opsManager.confi

9、gMap R:我們需要?jiǎng)?chuàng)建MongoDB對(duì)應(yīng) 的configMapspec.type:我們需要?jiǎng)?chuàng)建MongoDB的類型,如Standalonespec.credentials:記錄ops/cloud manager的 public API key的secretspec.podSpec.cpu/memory/persistence.storage: 配置pod的cpu/內(nèi)存/持久化存儲(chǔ)大小spec.security.authentication.enabled/modes: 啟動(dòng)默認(rèn)鑒權(quán)以及設(shè)置鑒權(quán)模式spec.additionalMongodconfig: 配置MongoDB的初始化參數(shù)spe

10、c.additionalMongodconfig.setParmeter: 配置MongoDB動(dòng)態(tài)參數(shù)ReplicaSet的yaml示例:spec.member: 副本集中的成員數(shù)spec.type:配置副本集時(shí)此參數(shù)為ReplicaSetShardedCluster的yaml示例:spec.shardCount/mo ngosCount/mongodsPerShardC ount/ configServerCount: 分片集群的數(shù)量規(guī)格spec.shard.additionalMongoDConfig:Mongos的參數(shù)設(shè)置spec.mongos. additionalMongoDConf

11、ig Mongos的參數(shù)設(shè)置spec.configSrvPodSp ec:單個(gè)config server 的規(guī)格spec.mongosPodSpe c:單個(gè)mongos的規(guī)格spec.ShardPodSpec:單個(gè)mongos的規(guī)格如何調(diào)整參數(shù)?在operator + ops/cloud manager + Kubernetes的架構(gòu)下,對(duì)MongoDB控制的優(yōu)先級(jí)為:operator ops/cloud manager 命令行。在這種情況下,如果我們?cè)诿钚屑?jí)或者ops/cloud manager做的部分操作,會(huì)被operator中的配 置覆蓋!最直觀就是參數(shù)部分,operator會(huì)嚴(yán)格按照

12、yaml文件創(chuàng)建出來(lái)的StatefulSets來(lái)配置整個(gè)MongoDB, 所以如果需要修改參數(shù),需要直接修改創(chuàng)建這個(gè)MongoDB的yaml文件,并再次apply。如何創(chuàng)建用戶?MongoDB中的用戶也是由operator來(lái)管理,所以創(chuàng)建一個(gè)MongoDB用戶需要進(jìn)行下列配置: 1.數(shù)據(jù)庫(kù)開(kāi)啟了密碼鑒權(quán)。準(zhǔn)備一份secret文件,保存MongoDB用戶的密碼,可用base64加密。創(chuàng)建用戶的yaml文件,里面包含用戶持有的權(quán)限以及鑒權(quán)的DB。 例:secret:創(chuàng)建用戶的yaml:MongoDB在kubernetes中的架構(gòu)如何在kubernetes中快速部署各種規(guī)格的MongoDB實(shí)踐過(guò)程中

13、遇到的問(wèn)題目錄存儲(chǔ)的選擇 考量在Kubernetes中支持的持久化存儲(chǔ)類型多達(dá)十余種,如何選擇適合自己場(chǎng)景的存儲(chǔ)呢?這需要從這 幾個(gè)方面考慮。是否需要?jiǎng)討B(tài)申領(lǐng)(即yaml中寫需要多少存儲(chǔ)就分配多少);是否需要?jiǎng)討B(tài)擴(kuò)容;是否需要極致的性能;配置是否方便;是否在生產(chǎn)中使用。存儲(chǔ)的選擇 類型性能:local類型的存儲(chǔ)為首選,因?yàn)檫@是本地存儲(chǔ),并且是直接使用,其中沒(méi)有網(wǎng)絡(luò)等消耗,但是問(wèn) 題也是非常明顯,它不能在各個(gè)節(jié)點(diǎn)間飄移。動(dòng)態(tài)申領(lǐng):awsElasticBlockStore,azureDisk,azureFile,cephfs,cinder,csi,fc,flexVolume, flocker,gc

14、ePersistentDisk,glusterfs,hostPath,iscsi,local,nfs,photonPersistentDisk, portworxVolume,quobyte,rbd,scaleIO,storageos,vsphereVolume動(dòng)態(tài)擴(kuò)容:gcePersistentDisk,awsElasticBlockStore,Cinder,glusterfs,rbd,Azure File, Azure Disk,Portworx,F(xiàn)lexVolumes,CSI這部分需要根據(jù)自身實(shí)際情況進(jìn)行存儲(chǔ)的選型。更多存儲(chǔ)的相關(guān)知識(shí)參考:https:/kubernetes.io/doc

15、s/concepts/storage/persistent-volumes/ReplicaSet horizons在 完 成 副 本 集 配 置 后 , 我 們 一 般 會(huì) 使 用 高 可 用 連 接 串 : 例 如 :mongo mongodb:/root:mongo81:30641,81:30879,81:32008/admin?replicaSet=test-rs&authSource=admin來(lái)進(jìn)行連接。這樣的連接方法會(huì)由driver來(lái)自動(dòng)選擇訪問(wèn)主節(jié)點(diǎn),當(dāng)時(shí)這里我們需要注意的是:81:30641,81:30879,81:32008這樣的IP+端口必須是在初始化集群時(shí)就在初始化參數(shù)中

16、,如:如果連接串的IP/主機(jī)名跟配置的不一致,在連接時(shí)會(huì)出現(xiàn)driver無(wú)法正確的找到主節(jié)點(diǎn)的問(wèn)題。 這時(shí)候我們就需要replicaSet horizons來(lái)解決這個(gè)問(wèn)題。ReplicaSet horizons在完成副本集配置后,因?yàn)镵ubernetes均通過(guò)自身內(nèi)網(wǎng)端口以及自身dns進(jìn)行初始化的配置,所以我們需要設(shè)置horizons來(lái)映射對(duì)應(yīng)對(duì)外的dns以及端口。這樣即完成配置,然后等待Ops進(jìn)行ssl狀態(tài)的update,等所有的pod/MongoDB的狀態(tài)正常后。通過(guò)mongo -host /testhorip1:30072,testhorip2:32340,testhorip3:3042

17、3 -ssl -sslAllowInvalidCertificates進(jìn)行連接。參數(shù)轉(zhuǎn)化為科學(xué)技術(shù)法問(wèn)題在測(cè)試過(guò)程,發(fā)現(xiàn)當(dāng)修改一些最大值較大的參數(shù)時(shí),進(jìn)行最大邊界測(cè)試的情況下,會(huì)出現(xiàn)automation agent輸入 參數(shù)使用科學(xué)記數(shù)法的問(wèn)題。例:參數(shù)cursorTimeoutMillis設(shè)置為10000000時(shí)候,automation agent會(huì)記錄成數(shù)字類型,最終在啟動(dòng)時(shí)會(huì) 報(bào)錯(cuò):cursorTimeoutMillis: Bad digit e while parsing 1e+07解決方案,使用api去get automation agent config,再用post的方式輸入字符

18、串類型:改成:后續(xù)發(fā)現(xiàn)如果初始化為數(shù)字,后續(xù)值過(guò)大會(huì)觸發(fā)進(jìn)入科學(xué)計(jì)數(shù)法,如果初始化為字符串,后續(xù)乃至最大值仍然為 字符串。同一個(gè)project中出現(xiàn)兩個(gè)cluster這是一種極端場(chǎng)景。絕對(duì)災(zāi)難級(jí)異常,因?yàn)閛perator對(duì)實(shí)例的管理是project級(jí)別的,一旦project中 出現(xiàn)多個(gè)cluster時(shí)候operator+ops的體系對(duì)該實(shí)例就去失去絕對(duì)的控制權(quán)。此時(shí)Ops會(huì)嘗試進(jìn)行自己進(jìn)行修復(fù),如果成功,會(huì)重新合并到一個(gè)cluster,如果失敗,就一直處于 異常狀態(tài)(分裂成兩個(gè)集群),無(wú)法自修復(fù)已知的觸發(fā)場(chǎng)景僅有一個(gè):創(chuàng)建集群。進(jìn)行壓力測(cè)試,測(cè)試過(guò)程中把磁盤壓滿。進(jìn)行存儲(chǔ)擴(kuò)容。擴(kuò)容過(guò)程中遇到c

19、eph報(bào)錯(cuò),中間磁盤擴(kuò)容被堵塞大概1小時(shí)。ceph恢復(fù)后,存儲(chǔ)擴(kuò)容成功。 6.此時(shí)cluster分裂成兩個(gè)。解決方案:把備份全停止(terminate),在Kubernetes中直接刪除該MongoDB,切記不要?jiǎng)h除pvc, 然后在om中把project中所有的cluster移除,最后通過(guò)后臺(tái)保存的json,重新創(chuàng)建該MongoDB。MongoDB在kubernetes中的架構(gòu)如何在kubernetes中快速部署各種規(guī)格的MongoDB實(shí)踐過(guò)程中遇到的問(wèn)題我們正在做的事情基于MongoDB的實(shí)時(shí)數(shù)據(jù)服務(wù)平臺(tái)產(chǎn)品ConnectorMongoDB 私有云管理平臺(tái)K8S+ Ops Manager鈦 鉑 A P I發(fā) 布APIPodbin logredo log鈦 鉑 實(shí) 時(shí) 異 構(gòu) 同 步PodPodPodPodMongoDB私有云管理平臺(tái)特點(diǎn)只需點(diǎn)擊幾下或調(diào)用 API 即可彈 性伸縮自助服務(wù) + 彈性基于Kubernetes企業(yè)級(jí)安全性 & SLAs通過(guò)一流的操作自動(dòng)化按需部署、 修改和升級(jí)自動(dòng)化數(shù)據(jù)庫(kù)維護(hù)數(shù)據(jù)庫(kù)和基礎(chǔ)設(shè)施可

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論