MongoDB复制系统:副本集基础概念

MongoDB复制系统:副本集

副本集概念

如果只在一台服务器上部署了mongo数据库,一旦服务器宕机了,整个应用将变得不可用;为了解决这个问题,mongo支持将数据副本保存到多台服务器,这一组服务器就是副本集。
副本集有一个主服务器,多个备份服务器,如果主服务器宕机了,会从副本集中的选一个新的主服务器;
需要注意的内容:

  1. 主节点在整个副本集中只能有一个;
  2. 主节点可以执行读写等请求;备份节点只能通过复制功能写入数据,不接受客户端的写入请求;
  3. 客户端不能从备份节点中读取数据,需要显示在副本节点上执行setSlaveOk后才能读取数据;
  4. 可以通过rs辅助函数查看副本集配置,例如rs.config();

选举制度

副本集中有一个很重要的概念"大多数",是指副本集中一半以上的成员;选取主节点时得到大多数支持时就能成为主节点,写入操作被复制到大多数成员时这个写操作就是安全的;因此在配置上应该尽量配置奇数节点,将大多数节点配置在同一个数据中心;
每一个节点都可以申请成为主节点的候选人,但是不能推荐其他成员成为候选人;节点成员候选人的条件:

  1. 无法连通主节点;
  2. 节点自身的数据更新为最新的;
  3. 没有其他更高优先级的成员可以被选举为主节点;
    当节点发起申请成为主节点时,它只要得到大多数成员的投票就为成员主节点,即时大多数成员中只有一个否决了本次选举,选举就被取消。

成员配置选项

mongodb针对副本集提供了很多可选配置项,可以为副本集中每个成员设定不同的配置;

选举仲裁者

当副本成员比较少时,例如只有2个副本成员时,这将在任何情况下都不能满足“大多数”的条件,mongo支持了一种特殊类型的成员仲裁者解决以上问题。仲裁者在副本集中的唯一作用就是参与选举,投出决定胜负关键的一票。

  1. 设置仲裁者的2种方式:
    • 使用rs.addArb()辅助函数
    • 通过在在成员中指定配置可选项arbiterOnly,例如rs.add("_id":4,"host":"", "arbiterOnly":true)
  2. 仲裁者的特点:
    • 一个副本集最多只能有一个仲裁者;
    • 仲裁者不保存数据且不为客户端提供服务;
    • 只有当副本集节点数量为偶数时才需要配置仲裁者(包含仲裁者本身计算在内);
    • 节点一旦变为仲裁者,将不可逆;
优先级

mongo支持设置副本集节点的优先级使得节点有优先权被选为主节点;优先级数值范围为[0,100],默认为1,数值越大对应的优先级更高;当设置为0时,说明节点永远不能成为主节点;

  1. 通过配置可选项priority设置优先级,例如rs.add("_id":4,"host":"", "priority":1.5)
  2. 对已有的副本集不在在一次reconfig操作中将当前主节点的优先级设置为0,也不能对所有成员优先级都为0的副本集执行reconfig;因为新的配置必须要发送给在新配置中可能成员主节点(优先级非0)的成员;
隐藏成员

如果想把一些节点仅仅用作备份服,不接受客户端读请求时,可以通过把可选配置项hidden设置为true隐藏起来;可以通过rs.status()或者rs.config()查看有哪些隐藏成员。例如可以把性能比较差的服务器设置为隐藏成员,以降低成本等;

延迟备份节点

可以通过配置项slaveDelay设置一个延迟备份节点,可选项的值值是延迟的时间(秒),延迟备份节点作用之一为避免数据遭受破坏;需要注意的是,延迟备份节点的优先级是0;

创建索引

对于一些仅用作备份的节点如隐藏节点是不会用到索引的,可以把可选配置项buildIndexs设置为false,使得节点不会创建索引,同样设置为false后将不可逆;另外,这类节点的优先级要求为0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值