《OpenStack高可用集群(下册):部署与运维》—11.4.6 MongoDB非关系数据库高可用部署
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。
- 点赞
- 收藏
- 关注作者
评论(0)