web-dev-qa-db-ja.com

shardIdentityドキュメントがない-MongoDB

問題なく良好な年に稼働している本番環境にシャーディングされたクラスターがあること。すべては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_を通過した
  • 本番クラスターを再確認しましたが、shardIdentityはありません。

それでは、shardIdentifyを適用または生成する方法を教えてください。そんなものが見つからなかったのでどうやって「シャード名」を見つけますか?そして、まあ、なぜsh.status()は適切な結果を与えるが、その断片を現在のデータに関連付けることができないのでしょうか?

おかげで、

1
Pobe

最初は管理データベースをいじりたくありませんでしたが、それが唯一の方法だと思われました。

情報を収集する

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 を参照してください。

  • すべてのレプリカセットメンバーを再起動する
0
Pobe