問題なく良好な年に稼働している本番環境にシャーディングされたクラスターがあること。すべては4.0、クラシック3-3 config)+ 2モンゴにあります。
私たちのバックアップ戦略を再考しながら、私は---(このステップ に悩みました。
私はすべてのノード(mongos、primaries、secondaries)でその値を見つけようとしましたが、どれにもshardIdentityがありません。
_mongos> db.system.version.find()
{ "_id" : "featureCompatibilityVersion", "version" : "4.0" }
{ "_id" : "authSchema", "currentVersion" : 5 }
_
これは重要に見え、_STARTUP2
_フェーズの一部です。
バックアップをテストして文書化するために、「 Restore Sharded Cluster 」のドキュメントのすべての手順を実行しました。それの終わりに:
sh.status()
は見栄えがよく、シャードが見えますrs.status()
も良いmongod
を使用すると、復元されたデータに関する適切な統計情報が得られますmongod
出力は問題ないようです。しかしdb.coll.stats()
は次のように失敗します:
_{
"ok" : 0,
"errmsg" : "Cannot accept sharding commands if sharding state has not been initialized with a shardIdentity document",
"code" : 203,
"codeName" : "ShardingStateNotInitialized",
"operationTime" : Timestamp(1548184216, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1548184216, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
_
そして、私はmongod
からこのエラーを見ることができます:
_I CONTROL [LogicalSessionCacheReap] Sessions collection is not set up; waiting until next sessions reap interval: sharding state is not yet initialized
_
これまでのところ、私は試しました:
sh.enableSharding()
はtrue(1)を返しますが、何も変更しませんhttps://github.com/mongodb/mongo/wiki/Sharding-Internals#sharding-component-initialization
_を通過したそれでは、shardIdentifyを適用または生成する方法を教えてください。そんなものが見つからなかったのでどうやって「シャード名」を見つけますか?そして、まあ、なぜsh.status()
は適切な結果を与えるが、その断片を現在のデータに関連付けることができないのでしょうか?
おかげで、
最初は管理データベースをいじりたくありませんでしたが、それが唯一の方法だと思われました。
mongosのsh.status()
は、必要なシャード名とシャードクラスターIDを提供します。そんな感じ:
"clusterId" : ObjectId("3b743bf3134df1f277980ard")
...
shards:
{ "_id" : "shardname1", "Host" : "[Host:port]", "state" : 1 }
{ "_id" : "shardname2", "Host" : "[Host:port]", "state" : 1 }
次に:
db.system.version.insert({
"_id" : "shardIdentity",
"clusterId" : ObjectId("3b743bf3134df1f277980ard"),
"shardName" : "REPLICA_SHARD_NAME",
"configsvrConnectionString" : "conf/[Host]"
})
Shard Aware を参照してください。