負(fù)載均衡服務(wù)命名為mongo-svc-a用27017暴露端口。該服務(wù)通過pod的標(biāo)簽匹配正確的服務(wù)到對應(yīng)的pod上,對外暴露的ip和端口給應(yīng)用程序使用,同時用于冗余備份集合中各節(jié)點的通信。雖然每個容器擁有內(nèi)部ip,但是當(dāng)容器被重啟或者移動之后它們會變更,因此不能用于冗余備份集合之間的通信。
下圖展示了冗余備份及中的另一個成員信息:

90%的配置是相同的,只有幾處不同:
硬盤和卷的名字必須是唯一的,于是采用mongodb-disk2和mongo-persisitent-storage2
Pod分配到j(luò)ane實例,同時節(jié)點命名為mongo-node2,用于區(qū)分新服務(wù)與圖1中的Pod
冗余控制命名為mongo-rc2
服務(wù)命名為mongo-svc-b,并獲取一個不同的外部IP地址(本例子中,Kubernets分配為104.1.4.5)
第三個冗余備份成員的配置仿照上述的模式進(jìn)行,下圖展示了完整的冗余配置集合:

注意,即使配置如圖3一樣,在一個三個或者多個節(jié)點的Kubernetes集群上,Kubernetes可能會調(diào)度兩個或者多個MongoDB冗余備份成員在同一個宿主機上。這是因為Kubernetes將三個pod視為三個獨立的服務(wù)。
為了增加冗余,需要創(chuàng)建一個額外的headless服務(wù)。該服務(wù)不具備提供外部服務(wù)的能力,甚至沒有外部IP地址,但是它用于通知Kubernetes這三個MongoDB Pod是屬于同一個服務(wù),于是Kubernetes會將它們調(diào)度在不同的節(jié)點上。

具體的配置文件和相關(guān)操作命令可以從《啟動微服務(wù):容器&調(diào)度說明白皮書》中找到。其中包含了三個特殊的步驟確保合并三個MongoDB到一個功能中,即本文中描述的冗余備份。
多個可用區(qū)域MongoDB冗余集合
所有冗余部件均運行在同一個GCE集群上時具有很高的風(fēng)險,在同一個zone的集群也一樣。如果發(fā)生一個重大事件導(dǎo)致可用zone離線,那么MongoDB冗余集合也就不可用。如果需要地理上的冗余備份,那么三個pod需要運行在不同的zone內(nèi)。
只需要很少的改動就可以創(chuàng)建這樣一個冗余備份集合。每一個集群需要獨自的Kubernetes YAML文件來定義pod、冗余控制器和服務(wù)。然后,就可以完成一個zone的集群創(chuàng)建、持久化存儲和MongoDB節(jié)點。
下圖展示了運行在不同zone上的冗余結(jié)合:
