<-> 切换config servers
这里准备做的事情就是替换configdb:大家知道在mongodb分片集群里面,需要用mongos来与应用程序做交互,而且启动mongos的时候一般会起1或者3个configdb,二configdb就是启用的config server进程,这里的config sever进程也选用了3个configdb,它们是:--configdbmongodb2:20001,mongodb2:20002,mongodb2:20003,,现在有一个mognodb2:20003已经坏了,所以准备新建一个mongodb2:20004来替代,下面就准备实施这个过程。
1、准备新的config server 20004
# 建立新数据目录 mkdir -p /data/mongodb/config20004 # 启动config server /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongod --configsvr --dbpath /data/mongodb/config20004 --port 20004 --logpath /data/mongodb/logs/configsvr_20004.log --logappend –fork |
2、停止原来的mongos服务
# 查看以前的mongos [mongodb@hch_test_dbm1_121_63 ~]$ ps -eaf|grep mongos mongodb 23091 1 0 16:01 ? 00:00:02 /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongos --configdb mongodb2:20001,mongodb2:20002,mongodb2:20003 --port 30000 --chunkSize 64 --logpath /data/mongodb/logs/mongos40004.log --logappend --fork mongodb 24070 22036 0 16:19 pts/0 00:00:00 grep mongos [mongodb@hch_test_dbm1_121_63 ~]$ # kill 掉原来的进程mongos kill -9 23091 |
3、加入新的config server启动mongos server
# 加入新的config server启动: [mongodb@hch_test_dbm1_121_63 ~]$ /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongos --configdb mongodb2:20001,mongodb2:20002,mongodb2:20004 --port 30000 --chunkSize 64 --logpath /data/mongodb/logs/mongos40005.log --logappend --fork about to fork child process, waiting until server is ready for connections. forked process: 24345 ERROR: child process failed, exited with error number 1 [mongodb@hch_test_dbm1_121_63 ~]$ |
# 启动失败,报错信息: [mongodb@hch_test_dbm1_121_63 ~]$ more /data/mongodb/logs/mongos40005.log 2016-07-15T16:23:54.886+0800 I SHARDING [mongosMain] MongoS version 3.0.3 starting: pid=24345 port=40000 64-bit host=hch_test_dbm1_121_63 (--help for usage) 2016-07-15T16:23:54.886+0800 I CONTROL [mongosMain] db version v3.0.3 2016-07-15T16:23:54.886+0800 I CONTROL [mongosMain] git version: b40106b36eecd1b4407eb1ad1af6bc60593c6105 2016-07-15T16:23:54.886+0800 I CONTROL [mongosMain] build info: Linux build14.nj1.10gen.cc 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 BOOST_LIB_VERSION=1_49 2016-07-15T16:23:54.886+0800 I CONTROL [mongosMain] allocator: tcmalloc 2016-07-15T16:23:54.886+0800 I CONTROL [mongosMain] options: { net: { port: 30000 }, processManagement: { fork: true }, sharding: { chunkSize: 64, configDB: "mongodb2:20001,mongodb2:20002,mo ngodb2:20004" }, systemLog: { destination: "file", logAppend: true, path: "/data/mongodb/logs/mongos40005.log" } } 2016-07-15T16:23:54.892+0800 W SHARDING [mongosMain] config servers mongodb2:20001 and mongodb2:20004 differ 2016-07-15T16:23:54.893+0800 W SHARDING [mongosMain] config servers mongodb2:20001 and mongodb2:20004 differ 2016-07-15T16:23:54.894+0800 W SHARDING [mongosMain] config servers mongodb2:20001 and mongodb2:20004 differ 2016-07-15T16:23:54.895+0800 W SHARDING [mongosMain] config servers mongodb2:20001 and mongodb2:20004 differ 2016-07-15T16:23:54.895+0800 E SHARDING [mongosMain] could not verify that config servers are in sync :: caused by :: config servers mongodb2:20001 and mongodb2:20004 differ: { chunks: "d41d8 cd98f00b204e9800998ecf8427e", databases: "7c40c1a20188c87df8176a21ee2067e4", shards: "fa588bf7d5fca7ea425f0cba9d48c048", version: "ea08abdddc1148a6a0f120b381a934cf" } vs {} 2016-07-15T16:23:54.895+0800 I - [mongosMain] configServer connection startup check failed [mongodb@hch_test_dbm1_121_63 ~]$ |
2016-07-15T16:23:54.894+0800 W SHARDING [mongosMain] config serversmongodb2:20001 and mongodb2:20004 differ
看到了mongodb2:20001和mongodb:20004 differ,也就意味着20001端口的config server和20004端口的config server是不一样的,也就是说新的20004的配置库和旧的20001配置库不同步,所以可以考虑将20001端口的config servers数据导入到20004端口的config servers试试看。
4、迁移config配置库数据到新的configservers
备份20001端口:
/usr/local/mongodb-linux-x86_64-3.0.3/bin/mongodump--host mongodb2:20001 -d config -o /home/mongodb/config
备份20002端口:
/usr/local/mongodb-linux-x86_64-3.0.3/bin/mongodump--host mongodb2:20002 -d config -o /home/mongodb/config2
以下是执行20001端口过程:
[mongodb@hch_test_dbm1_121_63 ~]$ /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongodump --host mongodb2:20001 -d config -o /home/mongodb/config 2016-07-15T16:34:05.271+0800 writing config.system.indexes to /home/mongodb/config/config/system.indexes.bson 2016-07-15T16:34:05.272+0800 writing config.databases to /home/mongodb/config/config/databases.bson 2016-07-15T16:34:05.273+0800 writing config.locks to /home/mongodb/config/config/locks.bson 2016-07-15T16:34:05.273+0800 writing config.version to /home/mongodb/config/config/version.bson 2016-07-15T16:34:05.273+0800 writing config.chunks to /home/mongodb/config/config/chunks.bson 2016-07-15T16:34:05.273+0800 writing config.tags to /home/mongodb/config/config/tags.bson 2016-07-15T16:34:05.273+0800 writing config.changelog to /home/mongodb/config/config/changelog.bson 2016-07-15T16:34:05.273+0800 writing config.shards to /home/mongodb/config/config/shards.bson 2016-07-15T16:34:05.273+0800 writing config.actionlog to /home/mongodb/config/config/actionlog.bson 2016-07-15T16:34:05.274+0800 writing config.mongos to /home/mongodb/config/config/mongos.bson 2016-07-15T16:34:05.274+0800 writing config.lockpings to /home/mongodb/config/config/lockpings.bson 2016-07-15T16:34:05.275+0800 writing config.databases metadata to /home/mongodb/config/config/databases.metadata.json 2016-07-15T16:34:05.275+0800 writing config.settings to /home/mongodb/config/config/settings.bson 2016-07-15T16:34:05.275+0800 writing config.chunks metadata to /home/mongodb/config/config/chunks.metadata.json 2016-07-15T16:34:05.275+0800 writing config.version metadata to /home/mongodb/config/config/version.metadata.json 2016-07-15T16:34:05.275+0800 writing config.locks metadata to /home/mongodb/config/config/locks.metadata.json 2016-07-15T16:34:05.276+0800 writing config.shards metadata to /home/mongodb/config/config/shards.metadata.json 2016-07-15T16:34:05.276+0800 writing config.tags metadata to /home/mongodb/config/config/tags.metadata.json 2016-07-15T16:34:05.276+0800 writing config.settings metadata to /home/mongodb/config/config/settings.metadata.json 2016-07-15T16:34:05.277+0800 writing config.lockpings metadata to /home/mongodb/config/config/lockpings.metadata.json 2016-07-15T16:34:05.277+0800 writing config.mongos metadata to /home/mongodb/config/config/mongos.metadata.json 2016-07-15T16:34:05.278+0800 writing config.changelog metadata to /home/mongodb/config/config/changelog.metadata.json 2016-07-15T16:34:05.278+0800 done dumping config.version 2016-07-15T16:34:05.278+0800 done dumping config.shards 2016-07-15T16:34:05.278+0800 done dumping config.databases 2016-07-15T16:34:05.278+0800 done dumping config.locks 2016-07-15T16:34:05.278+0800 done dumping config.settings 2016-07-15T16:34:05.278+0800 done dumping config.chunks 2016-07-15T16:34:05.278+0800 done dumping config.lockpings 2016-07-15T16:34:05.279+0800 done dumping config.mongos 2016-07-15T16:34:05.279+0800 done dumping config.changelog 2016-07-15T16:34:05.279+0800 done dumping config.tags 2016-07-15T16:34:05.380+0800 writing config.actionlog metadata to /home/mongodb/config/config/actionlog.metadata.json 2016-07-15T16:34:05.381+0800 done dumping config.actionlog [mongodb@hch_test_dbm1_121_63 ~]$ |
导入到20004的新config servers里面去,命令:
导入20001端口的config库:
/usr/local/mongodb-linux-x86_64-3.0.3/bin/mongorestore-hmongodb2 --port 20004 -d config /home/mongodb/config/config
导入20002端口的config库:
/usr/local/mongodb-linux-x86_64-3.0.3/bin/mongorestore-hmongodb2 --port 20004 -d config /home/mongodb/config2/config
# 执行过程如下 [mongodb@hch_test_dbm1_121_63 ~]$ /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongorestore -hmongodb2 --port 20004 -d config /home/mongodb/config/config 2016-07-15T16:39:37.741+0800 building a list of collections to restore from /home/mongodb/config/config dir 2016-07-15T16:39:37.743+0800 reading metadata file from /home/mongodb/config/config/actionlog.metadata.json 2016-07-15T16:39:37.744+0800 reading metadata file from /home/mongodb/config/config/changelog.metadata.json 2016-07-15T16:39:37.744+0800 reading metadata file from /home/mongodb/config/config/locks.metadata.json 2016-07-15T16:39:37.745+0800 restoring config.locks from file /home/mongodb/config/config/locks.bson 2016-07-15T16:39:37.802+0800 restoring config.changelog from file /home/mongodb/config/config/changelog.bson 2016-07-15T16:39:37.803+0800 restoring config.actionlog from file /home/mongodb/config/config/actionlog.bson 2016-07-15T16:39:37.804+0800 reading metadata file from /home/mongodb/config/config/databases.metadata.json 2016-07-15T16:39:37.804+0800 restoring config.databases from file /home/mongodb/config/config/databases.bson 2016-07-15T16:39:37.804+0800 restoring indexes for collection config.locks from metadata 2016-07-15T16:39:37.805+0800 restoring indexes for collection config.changelog from metadata 2016-07-15T16:39:37.808+0800 finished restoring config.locks 2016-07-15T16:39:37.808+0800 finished restoring config.changelog 2016-07-15T16:39:37.808+0800 reading metadata file from /home/mongodb/config/config/lockpings.metadata.json 2016-07-15T16:39:37.808+0800 reading metadata file from /home/mongodb/config/config/mongos.metadata.json 2016-07-15T16:39:37.809+0800 restoring config.mongos from file /home/mongodb/config/config/mongos.bson 2016-07-15T16:39:37.809+0800 restoring config.lockpings from file /home/mongodb/config/config/lockpings.bson 2016-07-15T16:39:37.810+0800 restoring indexes for collection config.databases from metadata 2016-07-15T16:39:37.811+0800 restoring indexes for collection config.mongos from metadata 2016-07-15T16:39:37.811+0800 finished restoring config.databases 2016-07-15T16:39:37.811+0800 reading metadata file from /home/mongodb/config/config/shards.metadata.json 2016-07-15T16:39:37.811+0800 restoring config.shards from file /home/mongodb/config/config/shards.bson 2016-07-15T16:39:37.812+0800 finished restoring config.mongos 2016-07-15T16:39:37.812+0800 restoring indexes for collection config.lockpings from metadata 2016-07-15T16:39:37.812+0800 reading metadata file from /home/mongodb/config/config/version.metadata.json 2016-07-15T16:39:37.812+0800 restoring config.version from file /home/mongodb/config/config/version.bson 2016-07-15T16:39:37.813+0800 finished restoring config.lockpings 2016-07-15T16:39:37.813+0800 reading metadata file from /home/mongodb/config/config/settings.metadata.json 2016-07-15T16:39:37.813+0800 restoring config.settings from file /home/mongodb/config/config/settings.bson 2016-07-15T16:39:37.816+0800 restoring indexes for collection config.settings from metadata 2016-07-15T16:39:37.817+0800 finished restoring config.settings 2016-07-15T16:39:37.817+0800 reading metadata file from /home/mongodb/config/config/chunks.metadata.json 2016-07-15T16:39:37.818+0800 restoring config.chunks from file /home/mongodb/config/config/chunks.bson 2016-07-15T16:39:37.821+0800 restoring indexes for collection config.chunks from metadata 2016-07-15T16:39:37.822+0800 restoring indexes for collection config.version from metadata 2016-07-15T16:39:37.822+0800 restoring indexes for collection config.shards from metadata 2016-07-15T16:39:37.825+0800 finished restoring config.chunks 2016-07-15T16:39:37.825+0800 reading metadata file from /home/mongodb/config/config/tags.metadata.json 2016-07-15T16:39:37.825+0800 finished restoring config.version 2016-07-15T16:39:37.826+0800 restoring config.tags from file /home/mongodb/config/config/tags.bson 2016-07-15T16:39:37.826+0800 finished restoring config.shards 2016-07-15T16:39:37.833+0800 restoring indexes for collection config.tags from metadata 2016-07-15T16:39:37.835+0800 finished restoring config.tags 2016-07-15T16:39:38.309+0800 restoring indexes for collection config.actionlog from metadata 2016-07-15T16:39:38.310+0800 finished restoring config.actionlog 2016-07-15T16:39:38.310+0800 done [mongodb@hch_test_dbm1_121_63 ~]$ |
5、再次加入新的config启动mongos服务
再次启动启动成功了:
# 加入新的20004端口的config,启动mongos服务 [mongodb@hch_test_dbm1_121_63 ~]$ /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongos --configdb mongodb2:20001,mongodb2:20002,mongodb2:20004 --port 30000 --chunkSize 64 --logpath /data/mongodb/logs/mongos30001.log --logappend --fork about to fork child process, waiting until server is ready for connections. forked process: 26026 child process started successfully, parent exiting [mongodb@hch_test_dbm1_121_63 ~]$ # 查看后台的30000端口进程,果然启动成功 [mongodb@hch_test_dbm1_121_63 ~]$ ps -eaf|grep 30000 mongodb 26026 1 2 16:50 ? 00:00:00 /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongos --configdb mongodb2:20001,mongodb2:20002,mongodb2:20004 --port 30000 --chunkSize 64 --logpath /data/mongodb/logs/mongos30001.log --logappend --fork mongodb 26080 22036 0 16:50 pts/0 00:00:00 grep 30000 [mongodb@hch_test_dbm1_121_63 ~]$ # 登录新的mongos服务,查看状态 [mongodb@hch_test_dbm1_121_63 ~]$ /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongo mongodb2:30000 MongoDB shell version: 3.0.3 connecting to: mongodb2:30000/test mongos> show dbs; admin (empty) bg 0.078GB config 0.016GB pv 0.078GB mongos> |
6、mongos查询数据报错
[mongodb@hch_test_dbm1_121_63 ~]$ /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongo mongodb2:30000 MongoDB shell version: 3.0.3 connecting to: mongodb2:30000/test mongos> use bg; switched to db bg mongos> db.card.find(); Error: error: { "$err" : "setShardVersion failed shard: shard1:shard1/mongodb2:37017,mongodb2:37027 { configdb: { stored: \"mongodb2:20001,mongodb2:20002,mongodb2:20003\", given: \"mongodb2:20001,mongodb2:20002,mongodb2:20004\" }, ok: 0.0, errmsg: \"mongos specified a different config database string : stored : mongodb2:20001,mongodb2:20002,mongodb2:20003 vs given : mongodb2:20001,mongodb2:20002,m...\", $gleStats: { lastOpTime: Timestamp 0|0, electionId: ObjectId('578895b159e81ce944a60bc4') } }", "code" : 10429, "shard" : "shard1" } mongos> |
这里执行db.shards.find();报错了,还是记录原来的mongodb2:20003的配置信息,看来仅仅导入config配置库能起来mongos进程,但是执行数据查询无效,那么问题在哪里呢?又该如何解决呢?