やりたいこと
レプリケーションの不具合にてSecoundaryのMongoDBしかいない状況でコマンドを通してPrimaryに変更したい。
環境情報
- Mongo v4.0
やり方
以下のようにコマンドにforce:true
を付与すると
rs0:SECONDARY> rs.reconfig(cfg,{"force":true})
書き込みができないセカンダリーのMongoDBでも設定変更が可能となるので、再度configを読み直すことで強制的にプライマリーに変更する。
以下、補足です。
補足
PrimaryのMongoDBがある状態で切り替えるのであればPrimaryを落とせば自動的に切り替わります。
一方で不具合によってレプリケーションが機能していない時に、どのMongoDBサーバもPrimaryにならないことがあります。
そうなった場合は以下のようにrs.confを再適用しますが、Primaryでないと書き込み権限がないためエラーとなります。
var cfg = rs.conf();cfg.members[0].host="XX";rs.reconfig(cfg)
よって上記で記載した通りで強制的に変更を行えば以下のように再ログインせずにプライマリーとなりました。
rs0:SECONDARY> rs.reconfig(cfg,{"force":true}) ... rs0:PRIMARY>
また、ログには「replSetReconfig」という文言が記載されていました。
xx I REPL [conn1892] replSetReconfig admin command received from client; new config: { _id: "rs0", version: xx, protocolVersion: 1, writeConcernMajorityJournalDefault: true, members: [ { _id: 0, host: "mongo:27017", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 1.0, tags: {}, slaveDelay: 0, votes: 1 }...
以上、ご参考になれば幸いです。