迅达云成(SpeedyCloud)的首席技术官董伟在会上做了主题为《云平台上的NoSQL集群的自动化扩展》的演讲。为小伙伴们演示了在云主机上创建并初始化NoSQL集群的方法;以及如何通过监控系统发现主机故障,并且自动调用云端API进行故障设备替换的过程,最后还展示了如何通过命令行的方式销毁主机的整个过程。
但是因为时间仓促,没有给小伙伴们留出太多时间进行问题解答和难点的详细介绍,所以董伟在会后将大家比较关注的一些问题整合起来,并分析了在搭建的过程中碰到的一些难点问题及解决方案,以下是他整理出来的关于这部分的内容:
大家好,很荣幸作为主讲嘉宾,在会上做了分享。不过由于时间仓促,未和大家做充分交流,所以会后我想通过该文章来解答一些大家关注的问题,并且介绍一些我们在搭建的过程中碰到的一些难点及解决方案。
在这之前,我先给大家介绍一下我们在构建过程中使用到的这款NoSQL数据库MongoDB集群的架构以及它的一些特性。
我们要构建的集群是MongoDB的复制集(Replica Set, 可以参考官方文档), 集群的结构类似于下图这样(在会上我们演示时用了1个主,4个副的结构,但原理都一样)。
在这个集群中有一个主(Primary)节点,用来接收写入操作,剩下的都是副(Secondary)节点,他们会从主节点通过同步Oplog过来,并应用到本地数据来实现数据的同步,而且集群中各个节点之间都有心跳(Heartbeat)探测,以确保集群之间的互通性。
当该集群中的主节点不可用后,剩下的节点会自动通过选举的方式产生一个新的主节点,这个过程是MongoDB集群的特性,过程如下图所示:
我当时为大家演示了三个场景:
第一个,MongoDB集群的初始化过程。我们先调用了SpeedyCloud云端的API完成了云主机的创建及启动单个MongoDB实例,当分别确认完毕数据库状态之后,通过执行一段初始化代码完成了整个集群的初始化。
第二个,MongoDB集群故障设备替换。为了模拟集群中设备故障,我们手工关闭了一台主机,然后通过监控系统的侦测,自动发现故障设备,并且调用云主机创建过程,然后调用添加成员过程实现了集群中故障设备的自动替换。
第三个,销毁整个集群。当整个集群的生命周期结束后,通过调用SpeedyCloud云端API,传入云主机的ID号来实现云主机的自动销毁过程。
在整个过程中涉及到了四个方面的技术应用:SpeedyCloud云端API的调用、Puppet配置管理系统的使用、MongoDB集群的维护以及Zabbix监控系统的使用。
我们通过在云主机中内置Puppet Agent的方式,让它和Puppet Master进行交互,实现了密码修改以及一些配置文件的管理等;通过Zabbix Agent来实现了设备到监控系统的自动注册,及监控数据的上报功能;同时又通过Zabbix Server的Trigger实现了对故障主机的发现,以及发现故障后的处理脚本调用。这套系统的整体结构图如下所示: