副本集的主要功能
副本集是 MongoDB 高可用的基础, 其主要作用 归纳为以下几点:
(1)高可用, 防止设备 (服务器, 网络) 故障. 提供自动 FailOver 功能.
(2)无需配置高可用性虚拟节点; 无论是 SQL Server 的 AlwaysOn 还是 MySQL 的 MHA 方案 都需要有可用性组 或集群的虚拟 IP, 要求程序连接使用这个虚拟 IP. 但是 MongoDB 副本集不需要 配置虚拟 IP, 而是当我们在连接字符串中指定 replicaSet 参数设置 后, 会自动识别查找 master 节点. 这样 可以省去 DBA 对虚拟高可用 IP 的配置和管理. 另外, 还有一点 可以保证 主节点, 辅助节点切换 对程序的影响, 比如丢数据的影响. 就是 程序驱动到每个几点都预先建立了一个连接, 这个连接 会实时监控节点状态. 当主节点切换时, 会很快就识别出, 这种机制保证了切换对程序的影响.
(3)灾难恢复, 当发生故障时, 可以从其它节点快速恢复.
(4)功能隔离, 用于分析, 报表, 数据挖掘, 系统任务等. 用于备份.
副本集节点属性介绍
复制集成员最多 50 个. 参与 Primary 选举投票的成员最多 7 个, 其他成员的 votes 属性必须设置为 0, 即不参与投票.
下面我们对副本集的节点做下梳理.
一般而言, 副本集节点有 3 中类型, 主节点(Primary), 辅助节点(Secondary), 见证节点(Arbiter).
主节点(Primary)
这个节点也比较容易理解. 和其他数据库上的主节点一样, 可以提供读写. 再次不再赘述.
见证节点(Arbiter)
没有数据副本, 不会成为 Primary 节点, 主要用来选举投票.
当副本集的节点数据为偶数时, 可以考虑添加一个见证节点.
见证节点因为没有数据, 只是投票, 所以见证节点需要的资源很小, 可以和其他应用公用一台服务器, 但是不建议将见证节点部署在副本集的主节点或辅助节点节点上.
辅助节点(Secondary)
辅助节点也基本上和其他类型数据库的辅助节点一样, 可以充当备胎. 我们在此主要讲一讲 辅助节点可以设置的几个属性.
设置为优先级为 0 的节点
优先级为 0 的节点的特点
1)不会升级为主节点. 但是却可以投票.
2)此节点正常参与 Primary 产生的 oplog 的读取, 进行数据备份和命令执行.
3)此节点可正常参与客户端对于数据的读取, 进行担当负载均衡的工作.
4)在 write concern 设置中, 此节点是可见的, 在决定 w : <number>. 时, 是有用节点. 与属性 =0 不同.
Priority=0 在 MongoDB 中的解释就是一个 Standby, 可投票不可参选, 又干活又负载. 对于 Priority 为 0 节点的情况, 通常作为一个 standby, 或由于硬件配置较差, 设置为 0 以使用不可能成为主.
此节点在数据多中心时很有用. 可以将异地的数据节点添加这种属性.
隐藏节点(Hidden)
字面上来说, 隐藏. 这个隐藏式对客户端的隐藏, 客户端如果要读取 Secondary 的数据, 永远无法读取 Hidden 节点的数据, 因为设置了 Hidden 的这个节点对于客户端是透明的, 不可见. 但是, 对于自己的 Secondary 的群体和 Primary 来说都是可见的, 所以, Hidden 依然可以投票, 依然要按照 oplog 进行命令的复制, 只是, 不参与负载了.
Hidden 属性的前提是必须是一个 Priority=0 的节点, 所以会具备一些优先级 = 0 的特点.
1)Hidden 节点不能被选为主(Priority 为 0), 并且对 Driver 不可见.
2)但在 Hidden 节点上, 可做一些数据备份, 离线计算的任务, 不会影响复制集的服务
3)隐藏节点成员建议总是将其优先级设置为 0(priority 0)
4)由于对 Driver 不可见, 因此不会作为 read preference 节点, 隐藏节点可以作为投票节点
5)在分片集群当中, mongos 不会同隐藏节点交互.
延迟节点(Delayed)
延迟比较容易理解, 代表此节点的数据与 Primary 的数据有一定的迟延, 通过设定一个迟延的属性来确定.
1)此节点必须是一个 Priority=0 且为 Hidden 的节点.
2)此节点虽然又迟延又 Hidden, 但是还是可以投票.
3)延迟单位设置为秒.
节点属性如下:
- {
- "_id" : <num>,
- "host" : <hostname:port>,
- "priority" : 0,
- "slaveDelay" : <seconds>,
- "hidden" : true
- }
非投票节点(votes:0)
我们在前面已经接受了, 一个副本集最多有 7 个投票节点, 如果还有其它的节点, 需要设置为非投票节点.
非投票节点拥有数据副本, 但是不参与投票. 另外, 非投票节点, 其 priority 必须设置为 0.
来源: https://www.cnblogs.com/xuliuzai/p/9683889.html