mongodb 分片集群中加入新的config servers

<-> 切换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进程,但是执行数据查询无效,那么问题在哪里呢?又该如何解决呢?

发布了634 篇原创文章 · 获赞 130 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/csdnhsh/article/details/95755919