近期网站访问量比较大,阿里云服务器的CPU被mongo.exe用完了,准备使用Mongodb分片技术,把数据库分在两个阿里云服务器上,网上搜了一些教程,配置过程比较顺利,但是最后写入的时候,只写入了其中一个分片,没用到另一个分片,请大家帮忙看一下,配置信息如下:
启用两个副本集:
mongod --shardsvr --replSet shard-a --dbpath "C:\mongo\data\rs-a-1" --port 3000 --logpath "C:\mongo\log\rs-a-1.log" --nojournal --serviceName "mongodb_rs_1" --serviceDisplayName "mongodb_rs_1" --install mongod --shardsvr --replSet shard-a --dbpath "C:\mongo\data\rs-a-2" --port 3001 --logpath "C:\mongo\log\rs-a-2.log" --nojournal --serviceName "mongodb_rs_2" --serviceDisplayName "mongodb_rs_2" --install mongod --shardsvr --replSet shard-a --dbpath "C:\mongo\data\rs-a-3" --port 3002 --logpath "C:\mongo\log\rs-a-3.log" --nojournal --serviceName "mongodb_rs_3" --serviceDisplayName "mongodb_rs_3" --install 连接3000,初始化副本集配置,命令如下: mongo 127.0.0.1:3000 config = { _id:"shard-a", members:[ {_id:0,host:"localhost:3000"}, {_id:1,host:"localhost:3001"}, {_id:2,host:"localhost:3002",arbiterOnly:true} ] } rs.initiate(config);
mongod --shardsvr --replSet shard-b --dbpath "C:\mongo\data\rs-b-2" --port 30101 --logpath "C:\mongo\log\rs-b-2.log" --nojournal --serviceName "mongodb_rs_b2" --serviceDisplayName "mongodb_rs_b2" --install mongod --shardsvr --replSet shard-b --dbpath "C:\mongo\data\rs-b-3" --port 30102 --logpath "C:\mongo\log\rs-b-3.log" --nojournal --serviceName "mongodb_rs_b3" --serviceDisplayName "mongodb_rs_b3" --install 连接30100,初始化副本集配置,命令如下: mongo 127.0.0.1:30100 config = { _id:"shard-b", members:[ {_id:0,host:"localhost:30100"}, {_id:1,host:"localhost:30101"}, {_id:2,host:"localhost:30102",arbiterOnly:true} ] } rs.initiate(config);
启用配置服务器:
mongod --configsvr --replSet config-a --dbpath "C:\mongo\data\config-1" --port 27019 --logpath "C:\mongo\log\config-1.log" --serviceName "mongodb_config_1" --serviceDisplayName "mongodb_config_1" --install mongod --configsvr --replSet config-a --dbpath "C:\mongo\data\config-2" --port 27020 --logpath "C:\mongo\log\config-2.log" --serviceName "mongodb_config_2" --serviceDisplayName "mongodb_config_2" --install mongod --configsvr --replSet config-a --dbpath "C:\mongo\data\config-3" --port 27021 --logpath "C:\mongo\log\config-3.log" --serviceName "mongodb_config_3" --serviceDisplayName "mongodb_config_3" --install 连接27019,初始化副本集配置,命令如下: mongo 127.0.0.1: 27019 rs.initiate( { _id: "config-a", configsvr: true, members: [ { _id : 0, host : "127.0.0.1:27019" }, { _id : 1, host : "127.0.0.1:27020" }, { _id : 2, host : "127.0.0.1:27021" } ] } )
开启Mongos
mongos --configdb config-a/127.0.0.1:27019,localhost:27020,localhost:27021 --logpath "C:\mongo\log\mongos.log" --port 40005 --serviceName "mongos-a" --serviceDisplayName "mongos-a" --install
配置Sharding
连接40005,命令如下: mongo 127.0.0.1: 40005 sh.addShard( "shard-a/localhost:3000") sh.addShard( "shard-b/localhost:30100") #查看分片服务器的配置 db.runCommand( { listshards : 1 } ); #内容输出 { "shards" : [ { "_id" : "shard-a", "host" : "shard-a/localhost:3000,localhost:3001", "state" : 1 }, { "_id" : "shard-b", "host" : "shard-b/localhost:30100,localhost:30101", "state" : 1 } ], "ok" : 1 }
指定数据库分片
#指定testliu分片生效 sh.enableSharding("testliu") #指定数据库里需要分片的集合和片键 sh.shardCollection("testliu.accounts", {"name":1} ) 我们设置testliu的accounts表需要分片,根据 id 自动分片到 shard-a ,shard-b 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片! #插入测试数据 use testliu for (var i = 1; i <= 100000; i++)db.accounts.insert({name:i,"test1":"testval1"});
查看分片结果:只分到了shard-a
命令查看:db.accounts.stats();
这个配置发现是没有问题的,造成这个问题的原因是因为数据量比较小,测了一下1000000数据,这个配置是起作用的。
大家帮忙看一下~~
– 伊辛伊忆 6年前有没有人帮忙看一下???
– 伊辛伊忆 6年前