MongoDB高可用架构集群管理(一)
MongoDB数据库核心的两个特点:第一个特点是副本集的自动切换,保证数据的高可靠、服务的高可用;第二个特点是自动分片、服务的横向扩展能力。
(一)副本集架构
MongoDB的副本集是一组保持相同数据集的mongod进程,副本集提供冗余和高可用性,这两个特性是所有生产部署的基础。
1、复制:复制提供了冗余并增加了数据可用性;提供了一定的容错能力,以防数据库服务器的丢失;在某些场景下提高了读取容量;副本增加了分布式应用程序的数据本地化和可用性。
2、副本集:
- 副本集是一组保持相同数据集的mongod实例。
- 副本集包含多个数据承载节点和一个可选的仲裁节点。
- 在数据承载节点中只有一个成员是主节点,而其它的都是从节点。
- 主节点接收所有的写入操作,也就是说一个副本集中只能有一个主节点响应应用的{w:"majority"}write concern。
- 主节点会通过oplog记录所有在主节点让数据发生改变的操作。
- 一个基本的3节点副本集架构如下图所示:
Secondary节点会复制主节点的oplog日志信息,并在自己的节点上应用这些oplog,类似MySQL从库。如果主库出现无法访问的情况,则从库会发起投票,选举出一个新的Primary节点。
- 副本集之间的复制模式和心跳检测如下图所示:
复制过程是主库到从库之间的复制,心跳检测是从库之间的交互过程。
- 仲裁节点Arbiter
可以将一个mongod实例作为仲裁节点添加到副本集中,仲裁节点不维护数据集,它的目的是响应其它副本成员的心跳和选举请求。仲裁节点不需要太好的硬件资源,已在新版中不再推荐使用它了。
主及节点、从节点和仲裁节点的简单示意图如下:
在生产环境中不建议使用仲裁节点,仲裁节点永远是仲裁节点,主节点可能会降为从节点,从节点可以通过投票变为新的主节点。
阅读是一种修养,分享是一种美德。