IT Notebook

とあるエンジニアの備忘録

MongoDB - エラー「code: 13298」の対処方法について

shard構築後の動作確認をするために、insert・findした時にエラーが発生したのでメモ

環境

  • OS: Ubuntu14.04
  • MongoDB: 3.0.4

shard構成

mongos> sh.status()
--- Sharding Status ---
  sharding version: {
    "_id" : 1,
    "minCompatibleVersion" : 5,
    "currentVersion" : 6,
    "clusterId" : ObjectId("55a74b5850ca953287ad16e0")
}
  shards:
    {  "_id" : "set01",  "host" : "set01/mongod11.example.com:27018,mongod12.example.com:27018" }
    {  "_id" : "set02",  "host" : "set02/mongod21.example.com:27018,mongod82.example.com:27018" }
  balancer:
    Currently enabled:  no
    Currently running:  no
    Failed balancer rounds in last 5 attempts:  0
    Migration Results for the last 24 hours:
        No recent migrations
  databases:
    {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }
    {  "_id" : "testdb",  "partitioned" : true,  "primary" : "set01" }
        testdb.collectiontest
            shard key: { "skey" : 1 }
            chunks:
                set01   1
            { "skey" : { "$minKey" : 1 } } -->> { "skey" : { "$maxKey" : 1 } } on : set01 Timestamp(1, 0)
    {  "_id" : "collectiontest",  "partitioned" : false,  "primary" : "set02" }
mongos>

エラーメッセージ

まずテストデータをinsertしたら以下のエラーメッセージ

mongos> use testdb
mongos> db.collectiontest.insert({skey:1, name:"yamada"})
WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 82,
        "errmsg" : "no progress was made executing batch write op in testdb.collectiontest after 5 rounds (0 ops completed in 6 rounds total)"
    }
})
mongos>

そしてfindしたら以下のエラーメッセージ

mongos> use testdb
mongos> db.collectiontest.find();
Error: error: {
    "$err" : "setShardVersion failed shard: set01:set01/mongod11.example.com:27018,mongod12.example.com:27018 { errmsg: \"exception: remote client 10.0.22.71:56638 tried to initialize this host (set01/mongod11.example.com:27018,mongod12.te...\", code: 13298, ok: 0.0, $gleStats: { lastOpTime: Timestamp 0|0, electionId: ObjectId('55a7277a6037b3179737b77b') } }",
    "code" : 10429,
    "shard" : "set01"
mongos>

対応

mongodを再起動すると復旧するとのこと 早速mongodと念のためmongos再起動して実行した結果がこちら

mongos> use testdb
mongos> db.collectiontest.insert({skey:1, name:"yamada"})
WriteResult({ "nInserted" : 1 })
mongos> db.collectiontest.find()
{ "_id" : ObjectId("55a7650fa2708fabb9475021"), "skey" : 1, "name" : "yamada" }

原因はよくわからなかったので、ご存じの方がおりましたら教えて下さい

参考

http://stackoverflow.com/questions/21959365/mongodb-sharded-collection-query-failed-setshardversion-failed-host