《OpenStack高可用集群(下册):部署与运维》—11.4.6 MongoDB非关系数据库高可用部署

举报
华章计算机 发表于 2019/05/29 21:43:33 2019/05/29
【摘要】 本书摘自《OpenStack高可用集群(下册):部署与运维》一书中的第11章,第11.4.6节,作者是山金孝。

11.4.6 MongoDB非关系数据库高可用部署

MongoDB是使用较为广泛的非关系型数据库,其在OpenStack集群中主要用于存储Ceilometer服务监控到的云平台参数信息,即MongoDB的主要访问客户端为OpenStack的Ceilometer服务。关于MongoDB更多的工作原理及配置使用方法请参考第7章集群数据库系统相关的内容,本节重点介绍MongoDB在Pacemaker集群中的高可用部署实现。MongoDB集群的高可用通过其自带的Replication Set功能来实现,在本节介绍的OpenStack高可用配置方案中,MongoDB集群仍然部署在三个控制节点上。此外,MongoDB以资源Clone的形式运行在三个控制节点上,而高可用集群功能通过MongoDB自带的Replication Set来配置。要配置MongoDB资源,首选需要在各个控制节点上安装MongoDB和MongoDB-Server软件包,具体如下:

yum -y install mongodb mongodb-server

对MongoDB的配置文件/etc/mongodb.conf进行自定义设置,包括指定MongoDB服务绑定的IP和ReplSet名称等,具体如下:

echo "bind_ip = 0.0.0.0" >> /etc/mongod.conf

echo "replSet = ceilometer" >> /etc/mongod.conf

echo "smallfiles = true" >> /etc/mongod.conf

对MongoDB服务进行手动启停,验证其可以正常启动,具体如下:

systemctl start mongod.service

systemctl stop mongod.service

在Pacemaker集群中创建MongoDB资源,资源以Clone形式运行在三个控制节点上,资源创建命令如下:

pcs resource create mongodb systemd:mongod op start timeout=300s --clone

MongoDB资源创建完成后,在Pacemaker集群中可以查看MongoDB资源运行情况。正常情况下,MongoDB应该同时运行在三个控制节点上,具体如下:

[root@controller1-vm ~]# pcs resource

……

Master/Slave Set: galera-master [galera]

    Masters: [ controller1-vm controller2-vm controller3-vm ]

Clone Set: memcached-clone [memcached]

    Started: [ controller1-vm controller2-vm controller3-vm ]

Master/Slave Set: rabbitmq-cluster-master [rabbitmq-cluster]

    Masters: [ controller3-vm ]

    Slaves: [ controller1-vm controller2-vm ]

Clone Set: mongodb-clone [mongodb]

    Started: [ controller1-vm controller2-vm controller3-vm ]

MongoDB在三个控制节点正常运行后,即可进行MongoDB的ReplSet集群配置,其配置过程就是创建一个ReplSet集群并将三个控制节点分别加入集群中。这里Repl Set集群的名称已经在/etc/mongd.conf中配置为ceilometer,此处仅需对ReplSet进行初始化并添加节点即可。具体过程参考如下代码段:

cat > /root/mongo_replica_setup.js << EOF

rs.initiate()

sleep(10000)

EOF

//为Repl Set集群添加节点

for node in $ha_node1 $ha_node2 $ha_node3; do

cat >> /root/mongo_replica_setup.js << EOF

    rs.add("$node");

EOF

done

//执行mongo脚本

mongo /root/mongo_replica_setup.js

成功执行上述程序段后,MongoDB的ReplSet集群便配置完成了。在MongoDB的ReplSet集群中,仅有一个Primary节点,其余节点均为Secondary节点。要查看MongoDB的ReplSet集群状态,可以进入mongo交互式命令行后运行rs.status()命令,具体如下:

[root@controller1-vm ~]# mongo

MongoDB shell version: 2.6.9

connecting to: test

Server has startup warnings: 

……

ceilometer:PRIMARY> rs.status()

{

    "set" : "ceilometer",

    "date" : ISODate("2016-11-30T07:09:08Z"),

    "myState" : 1,

    "members" : [

        {

            "_id" : 0,

            "name" : "controller1-vm:27017",

            "health" : 1,

            "state" : 1,

            "stateStr" : "PRIMARY",

            "uptime" : 458,

            "optime" : Timestamp(1480489714, 2),

            "optimeDate" : ISODate("2016-11-30T07:08:34Z"),

            "electionTime" : Timestamp(1480489704, 2),

            "electionDate" : ISODate("2016-11-30T07:08:24Z"),

            "self" : true

        },

        {

            "_id" : 1,

            "name" : "controller2-vm:27017",

            "health" : 1,

            "state" : 2,

            "stateStr" : "SECONDARY",

            "uptime" : 34,

            "optime" : Timestamp(1480489714, 2),

            "optimeDate" : ISODate("2016-11-30T07:08:34Z"),

            "lastHeartbeat" : ISODate("2016-11-30T07:09:08Z"),

            "lastHeartbeatRecv" : ISODate("2016-11-30T07:09:07Z"),

            "pingMs" : 5,

            "syncingTo" : "controller1-vm:27017"

        },

        {

            "_id" : 2,

            "name" : "controller3-vm:27017",

            "health" : 1,

            "state" : 2,

            "stateStr" : "SECONDARY",

            "uptime" : 34,

            "optime" : Timestamp(1480489714, 2),

            "optimeDate" : ISODate("2016-11-30T07:08:34Z"),

            "lastHeartbeat" : ISODate("2016-11-30T07:09:08Z"),

            "lastHeartbeatRecv" : ISODate("2016-11-30T07:09:08Z"),

            "pingMs" : 3,

            "syncingTo" : "controller1-vm:27017"

        }

    ],

    "ok" : 1

}

ceilometer:PRIMARY>

可以看到,ReplSet名称为ceilometer,Primary节点为controller1-vm,而controller2-vm和controller3-vm均为Secondary节点。至此,MongoDB的高可用集群已经配置完成,而且MongoDB服务由Pacemaker集群资源管理器自动管理,任何节点上的Mongod服务故障停止后,Pacemaker均会自动重新启动该服务。同时,由于MongoDB集群通过ReplSet实现了节点之间的数据同步,因此任意节点上的Mongd服务故障均不会影响OpenStack集群中的MongoDB数据库服务。本节介绍的MongoDB高可用部署源代码可参考笔者位于Github上的开源项目(https://github.com/ynwssjx/Openstack-HA-Deployment),对应的部署脚本为6_create_mongodb_resource_on_pacemaker。


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。