MongoDB副本详解

  • 概念

    • MongoDB副本集是一组维护相同数据集的mongod服务,可以提供冗余和高可用,是所有生产部署的基础;
  • mysql主从复制和mongodb副本集的区别

    • 主从复制的主从是固定的,副本集是不固定的,可以自动切换
  • 副本集角色

    • 主节点: 可读可写,主要连接点
    • 副本成员(辅助、从、Secondaries, Replicate):数据冗余备份,可读(需要配置)、可选举、不可写,不可操作;是默认的从节点类型
    • 仲裁者(Arbiter):不保留任何数据的副本,只有投票和选举作用; 也可以将仲裁服务器维护为副本集的一部分,即同时副本和仲裁;

  • 成员属性

    • priority:
      • 通过该属性值控制选举的优先级
      • 取值0-1000(arbiters只能是0或者1),值越大选举为主的优先级越高
      • 0则不可能被选为主,也不能主动发起选举;多数据中心时使用.
    • hidden:
      • 隐藏节点,同步数据,但对客户端不可见
      • mongo shell执行db.isMaster()也不会展示该节点
      • 隐藏节点必须priority 为0
      • 如果有配置选举的话可以参与选举,但不会选中
      • 一般用来做备份数据或者执行定时任务
    • slaveDelay
      • 延时一定时间同步主库数据
      • 作用: 为了防止误删,用做兜底功能
    • tags
      • 支持对副本成员打标签,查询的时候会用到
      • 通过打标的方式区分不同的副本,可以让特定的服务访问特定副本;
      • 如果某个副本宕机,不会影响其他副本
    • votes
      • 是否有权参与选举,最大可以支持7个副本节点参与选举;
  • 副本配置

    • 1, 准备3台mongodb Server, 1M 2S,可以试一台Server使用3个端口;
    • 2, 启动服务
      • nohup mongod --port 27018 --dbpath /export/data/rs0-1 --replSet rs0 --smallfiles --oplogSize 128 &启动 rs0是副本集的名字,3个服务必须同名
    • 3, 对3个实例进行初始化副本集:rs.initiate()
    • 4,查看副本集成员: rs.conf()
    • 5, 在主节点上执行添加副本操作:rs.add(host,arbiterOnly)
      • arbiterOnly: 可选,如果为true则添加的主机是仲裁节点
      • rs.add("11.127.33.226:27017")
      • rs.add("localhost:27018")
    • 6, 添加仲裁节点: rs.addArb("11.127.33.226:27018")

    • 其他操作
      • slave开启从库可读: rs.slaveOk(), rs.slaveOk(true)
      • slave关闭可读功能: rs.slaveOk(false)
  • 主节点选举原则

    • 触发原则
      • 主节点故障
      • 主节点网络不可达(默认心跳10s)
      • 人工干预: rs.stepDown(600)
    • 选举规则
      • 票数最高,过半的票数(优先级高、票高)
      • 如果票数相当,则数据新的获胜,通过oplog对比
      • 可以通过调高优先级的方式来使某个节点作为下个主节点
    • 故障情况
      • 如果仲裁节点和主节点故障,则从节点无法写入数据;不满足选举条件
      • 如果副本和仲裁都挂了,只剩下的主节点,则主节点会自动降为副本节点,无法写入;
  • 管理副本集

    • rs.status() 查看副本成员状态,health哪个挂了
    • 删除副本节点:rs.remove("192.168.62.155:17018")
    • 添加 rs.add({"host":"localhost:27018","priority":10,"hidden":false,"votes":1})
    • 重新配置副本集:rs.reconfig()
    • 查看主从关系: rs.isMaster(),同 db.serverStatus().repl
    • 把主节点降为备节点: rs.stepDown()
    • 对主节点维护100s,且其他节点不能成为主节点: rs.freeze(100000)
    • 从节点开启查询服务,退出shell后失效:db.setSlaveOk()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值