mongodb集群节点故障的切换方法

当MongoDB集群中主节点出现故障时,可以通过自动或手动方式进行切换。自动切换依赖于选举TimeoutMillis设置,副本集成员会选举新的主节点。若主节点无法恢复,可手动在副本节点执行rs.reconfig,移除旧主节点并强制设置为新主节点。通过监控rs.status()和db.isMaster()来确定节点状态。在切换Config Server的replica set时,同样适用此方法。
摘要由CSDN通过智能技术生成

官方文档https://docs.mongodb.com/v3.6/tutorial/configure-a-non-voting-replica-set-member/


主节点全部失败了,涉及Config Server、Shard Server,这个时候,通过mongos可以连接到副节点,但是执行操作时会报错, 说连不上shard2的primay主节点

"errmsg" : "Could not find host matching read preference { mode: \"primary\", tags: [ {} ] } for set shard2"



处理方法

方法1、一般会自动切换,如果shard是由3个节点组成的replica set,主节无法连接到另外两个副节点时,和rs.conf()里面的electionTimeoutMillis值相关默认是10秒,两个副节点自动会有选择一个节点成为主节点;如果shard是由2个节点组成的replica set,把主节点启动后该主节点自动变成了副节点,原副节点自动变成了新的主节点

方法2、如果主节点机器完全无法使用了,需要对某个shard的副本节点执行切换,切换到primay状态,mongo命令进入这个shard的辅助节点,查看rs.conf()配置信息,并查看rs.status()状态,看到主节点无法连接,使用rs.reconfig()重新配置,rs.reconfig括号里面的内容参考rs.conf()的信息,去掉primay节点的信息,并添加{ "force": true }。之后退出重新登录这个shard,发现副本切换到了primay状态,重新登录mongos发现正常了



使用mongo登录mongod实例执行rs.status()或db.isMaster()可以看到谁是主节点,谁是副节点

mongos实例执行rs.status()会报错replSetGetStatus is not supported through mongos

mongos实例执行db.isMaster()正常,默认连接到主节点




实验案例


1、切换到TDB6执行show tables报错,说这个数据库对应的shard的primay节点无法找到

mongo --host 172.22.138.157 --port 27001

mongos> use TDB6

mongos> show tables

2019-06-20T00:16:17.935-0700 E QUERY    [thread1] Error: listCollections failed: {

        "ok" : 0,

        "errmsg" : "Could not find host matching read preference { mode: \"primary\", tags: [ {} ] } for set shard28003",




2、只能进入这个shard的辅助节点,查看rs.conf()配置信息,并查看rs.status()状态,看到主节点无法连接,使用rs.reconfig()重新配置,rs.reconfig括号里面的内容参考rs.conf()的信息,去掉primay节点的信息,并添加{ "force": true }

mongo --host 172.22.138.157 --port 28003

shard28003:SECONDARY>rs.conf()

{

        "_id" : "shard28003",

        "version" : 1,

        "protocolVersion" : NumberLong(1),

        "members" : [

                {

                        "_id" : 0,

                        "host" : "172.22.138.157:28003",

                        "arbiterOnly" : false,

                        "buildIndexes" : true,

                        "hidden" : false,

                        "priority" : 1,

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值