副本集的主要功能
副本集是MongoDB高可用的基础,其主要作用 归纳为以下几点:
- 高可用,防止设备(服务器、网络)故障。提供自动FailOver功能
- 无需配置高可用性虚拟节点;无论是SQL Server 的AlwaysOn 还是 MySQL 的 MHA方案 都需要有可用性组 或集群的虚拟IP,要求程序连接使用这个虚拟IP。但是MongoDB 副本集不需要 配置虚拟IP,而是当我们在连接字符串中指定replicaSet 参数设置 后,会自动识别查找master节点。这样 可以省去 DBA 对虚拟高可用IP的配置和管理。另外,还有一点 可以保证 主节点、辅助节点切换 对程序的影响,比如丢数据的影响。就是 程序驱动到每个几点都预先建立了一个连接,这个连接 会实时监控节点状态。当主节点切换时,会很快就识别出,这种机制保证了切换对程序的影响
- 灾难恢复,当发生故障时,可以从其它节点快速恢复
- 功能隔离,用于分析、报表,数据挖掘,系统任务等。用于备份。
副本集节点介绍
复制集成员最多50个。参与Primary选举投票的成员最多7个,其他成员的votes属性必须设置为0,即不参与投票
一般而言,副本集节点有3中类型,主节点(Primary)、辅助节点(Secondary)、见证节点(Arbiter)。
主节点(Primary)
这个节点也比较容易理解。和其他数据库上的主节点一样,可以提供读写。再次不再赘述。
见证节点(Arbiter)
没有数据副本,不会成为Primary节点,主要用来选举投票。
当副本集的节点数据为偶数时,可以考虑添加一个见证节点。
见证节点因为没有数据,只是投票,所以见证节点需要的资源很小,可以和其他应用公用一台服务器,但是不建议将见证节点部署在副本集的主节点或辅助节点节点上。
辅助节点(Secondary)
辅助节点也基本上和其他类型数据库的辅助节点一样,可以充当备胎。我们在此主要讲一讲 辅助节点可以设置的几个属性。
隐藏节点(Hidden)
字面上来说,隐藏。这个隐藏式对客户端的隐藏,客户端如果要读取Secondary的数据,永远无法读取Hidden节点的数据,因为设置了Hidden的这个节点对于客户端是透明的,不可见。但是,对于自己的Secondary的群体和Primary来说都是可见的,所以,Hidden依然可以投票,依然要按照oplog进行命令的复制,只是,不参与负载了。
延迟节点(Delayed)
延迟比较容易理解,代表此节点的数据与Primary的数据有一定的迟延,通过设定一个迟延的属性来确定。
Mongodb副本集原理
概念:
副本集中数据同步过程:Primary节点写入数据,Secondary通过读取Primary的oplog得到复制信息,开始复制数据并且将复制信息写入到自己的oplog。如果某个操作失败,则备份节点停止从当前数据源复制数据。如果某个备份节点由于某些原因挂掉了,当重新启动后,就会自动从oplog的最后一个操作开始同步,同步完成后,将信息写入自己的oplog,由于复制操作是先复制数据,复制完成后再写入oplog,有可能相同的操作会同步两份,不过MongoDB在设计之初就考虑到这个问题,将oplog的同一个操作执行多次,与执行一次的效果是一样的。简单的说就是:
当Primary节点完成数据操作后,Secondary会做出一系列的动作保证数据的同步:
1:检查自己local库的oplo