【Mongo】單節點升級為複製集再升級為分片加複製集

小亮520cl發表於2018-05-17
1.單節點配置如下
  1. [root@ip-10-1-2-32 etc]# more shard1.conf
  2. logpath=/usr/local/mongodb/logs/mongo_shard1.log
  3. logappend=true # need logrotae scripts
  4. fork=true
  5. journal=true
  6. port=27019
  7. dbpath=/usr/local/mongodb/shard1
  8. pidfilepath=/usr/local/mongodb/logs/mongo_shard1.pid
  9. bind_ip=10.1.2.32
  10. wiredTigerCacheSizeGB=4


單節點升級為複製集

  1. 1.關閉mongo
  2. 2.配置檔案加上覆制通道replSet=shard1
  3. 3.重啟
  4. 4.其它節點也以replSet=shard1的方式啟動
  5. 5.搭建複製叢集
  6. 參考:


複製集升級為分片加複製集
  1. 1 重啟second節點以--shardsvr模式啟動,在配置檔案加上shardsvr=true就好了

  1. 2.主節點降級
  2. rs.stepDown()

  1. 3.重啟主節點以shardsvr模式

  1. 4.搭建config的複製集模式

  1. 5.所有節點啟動mongos


  2. 6.主節點mongos新增shard1的分片叢集
  3. db.runCommand({ addshard: 'shard1/10.1.2.68:27019,10.1.2.32:27019,10.1.2.175:27019'})


  4. 7.新的分片搭建複製集


  1. 8.主節點mongos加上新的分片叢集
  2. db.runCommand({ addshard: 'newshard/10.1.2.32:27018,10.1.2.68:27018,10.1.2.175:27018'})


  3. 9.開啟目標db可分片
  4. mongos> sh.enableSharding( "test" )


  5. 10.將目標文件進行分片
  6. mongos> db.test_collection.createIndex( { number : 1 } )
  7. mongos> sh.shardCollection( "test.test_collection", { "number" : 1 } )

主體流程如上,具體可參考官方文件:
上面的78步驟可以在9.10步驟之後的,先將資料shard到一個節點,然後新加節點,然後在平衡資料就好了


新增分片報錯的解決辦法
  1. #重新新增剛才刪除的分片,將遇到以下錯誤,提示test資料庫已經存在
  2. db.runCommand({addShard:"172.16.127.130:27017"})
  3. {
  4.   "code" : 96,
  5.   "ok" : 0,
  6.   "errmsg" : "can't add shard '172.16.127.130:27017'
  7.   "because a local database 'test' exists in another shard0001"
  8. }
  9. #這時,就需要透過MongoDB shell連線到shard01例項,刪除test資料庫,然後重新新增
  10. use test
  11. db.dropDatabase()
  12. #回到mongos節點
  13. use admin
  14. mongos> sh.addShard('172.16.127.130:27017')
  15. {
  16.         "code" : 11000,
  17.         "ok" : 0,
  18.         "errmsg" : "E11000 duplicate key error collection:
  19.             "admin.system.version index: _id_ dup key: { : \"shardIdentity\" }"
  20. }
  21. #這時候再連線到shard01節點,刪除admin.system.version集合中記錄
  22. db.system.version.remove({})
  23. db.system.version.remove({"_id":"shardIdentity"})
  24. WriteResult({
  25.         "nRemoved" : 0,
  26.         "writeError" : {
  27.                 "code" : 40070,
  28.                 "errmsg" : "cannot delete shardIdentity document while in --shardsvr mode"
  29.         }
  30. })
  31. #刪除時報錯,意思是說不能在分片模式下刪除這張表中的這條記錄,然後我們關閉shard01,然後以非shardsvr的方式啟動,刪除這條記錄後,再以shardsvr方式啟動
  32. db.shutdownServer()
  33. mongodb-3.4.4/bin/mongod -f mongodb-3.4.4/conf/mongod.conf
  34. use admin
  35. db.system.version.remove({})
  36. db.shutdownServer()
  37. mongodb-3.4.4/bin/mongod -f mongodb-3.4.4/conf/mongod.conf --shardsvr
  38. #最後新增之前被刪除的分片shard01,大功告成
  39. db.runCommand({addShard:"172.16.127.130:27017"})
  40. { "shardAdded" : "shard0002", "ok" : 1 }



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2154616/,如需轉載,請註明出處,否則將追究法律責任。

相關文章