使用Kubernetes ReplicationController
在GCE环境中使用Kubernetes和持久存储构建单个节点的副本集:
在公司的私有环境中,选择Ceph RBD作为永久性存储是个好的选择。
使用yaml文件定义一个单节点的MongoDB副本集:
图一展示了一个Pod、ReplicationController和Service之间的关系:
- 最重要是先启动一个叫mongo-node-1的容器,它的镜像采用Docker Hub上的官方镜像。容器暴露27017端口用于外部访问
- Kubernetes的副本控制器(ReplicationController) mongo-node-1使用Ceph RBD作为永久数据存储。 容器中的”/data/db”会被挂载在被称为“mongo-node-1″的一个RBD的块设备上,它的文件系统被格式化为ext4。如果mongo的容器被重新调度,新的容器会重新挂载上”mongo-node-1”这个块设备,数据不会丢失。
- 负载均衡器(LoadBalancer)暴露了一个固定的IP地址用于外部访问,这个固定IP的27017端口已经被映射到那些mongo的容器的27017端口上了。负载均衡服务可以通过选择器(Selector)来自动选择那些合适的pod。
使用Kubernetes的Service组件作为一个负载均衡器
通过一个yaml文件定义“mongo—svc-1”服务:
创建一个块设备并使用它
在您只用rbd命令之前,您需要安装一个ceph的集群在您的计算集群中。
创建一个10GB大小的RBD Image,并将它挂载:
使用ext4来格式化块设备:
mkfs.ext4/dev/rbd0
卸载这个块设备:
rbd unmap /dev/rbd0
按照这种方式,分别创建另外两个块设备mongo-node-2和mongo-node-3
创建对应RC和Service:
kubect1 create -f mongo-rc -rbd-1.yam1 kubect1 create -f mongo -svc -1.yam1
图二显示了如何配置另外一个replica set的成员:
图三显示了整个目标集群的示意图:
创建三个节点的Replica Set:
kubect1 create -f mongo -rc -rbd -1.yam1
kubect1 create -f mongo -rc -rbd -2.yam1
kubect1 create -f mongo -rc -rbd -3.yam1
为每个mongodb的容器节点创建一个对应的服务:
kubect1 create -f mongo -svc -1.yaml
kubect1 create -f mongo -svc -2.yaml
kubect1 create -f mongo -svc -3.yaml
还可以创建一个统一的服务,让用户使用起来更加方便:
kubectl creat -f mongo -svc.yaml
得到统一服务(Service)的IP地址:
还可以通过如下命令添加或删除已经加入replica set集群的节点
rs.add("172.16.7.3") rs.remove("172.16.7.3:27017")
- A MongoDB White Paper: <Enabling Microservices Containers & Orchestration Explained March 2016>
- Thanks to Sandeep Dinesh(@SandeepDinesh) and his article
本文原标题:使用容器云快速部署MongoDB高可用集群
评论前必须登录!
注册