参考http://scholar.blog.51cto.com/9985645/1673939
一、环境
mongodb-1 192.168.3.31 mongos
mongodb-2 192.168.3.32 shard1
mongodb-3 192.168.3.33 shard2
mongodb-4 192.168.3.34 config server
二、配置过程清理数据(我这里是之前做过mongodb的其它实验)
[root@mongodb-2 ~]# /etc/init.d/mongod stop Stopping mongod: [ OK ] [root@mongodb-2 ~]# rm -rf /usr/local/mongodb/data/*
1.config server配置
#修改配置文件mongodb.conf [root@mongodb-4 ~]# cat /usr/local/mongodb/conf/mongodb.conf #bind_ip=0.0.0.0 #port=27017 configsvr=true #开启config server dbpath=/usr/local/mongodb/data logpath=/usr/local/mongodb/log/mongodb.log pidfilepath=/usr/local/mongodb/log/mongodb.pid directoryperdb=true logappend=true oplogSize=1000 fork=true rest=true #noprealloc=true #master=true
启动服务
[root@mongodb-4 ~]# /etc/init.d/mongodb start Starting mongod: [ OK ] #默认监听在27019,28019上 [root@mongodb-4 ~]# netstat -tunlp |grep mongo tcp 0 0 0.0.0.0:27019 0.0.0.0:* LISTEN 1493/mongod tcp 0 0 0.0.0.0:28019 0.0.0.0:* LISTEN 1493/mongod
2.mongos配置
[root@mongodb-1 ~]# mongos --configdb=192.168.3.34 --fork --logpath=/tmp/mongos.log 2015-08-07T08:22:56.955+0800 W SHARDING running with 1 config server should be done only for testing purposes and is not recommended for production about to fork child process, waiting until server is ready for connections. forked process: 1644 child process started successfully, parent exiting [root@mongodb-1 ~]# netstat -tunlp |grep mongo tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1644/mongos
3.shard1配置
#修改配置文件mongodb.conf [root@mongodb-2 ~]# cat /usr/local/mongodb/conf/mongodb.conf #bind_ip=0.0.0.0 #port=27017 dbpath=/usr/local/mongodb/data logpath=/usr/local/mongodb/log/mongodb.log pidfilepath=/usr/local/mongodb/log/mongodb.pid directoryperdb=true logappend=true oplogSize=1000 fork=true #noprealloc=true #master=true #replSet=testrs0
启动服务
[root@mongodb-2 ~]# /etc/init.d/mongod start Starting mongod: [ OK ] [root@mongodb-2 ~]# netstat -tunlp |grep mon tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1729/mongod
4.shard2配置
#修改配置文件mongodb.conf [root@mongodb-3 ~]# cat /usr/local/mongodb/conf/mongodb.conf #bind_ip=0.0.0.0 #port=27017 dbpath=/usr/local/mongodb/data logpath=/usr/local/mongodb/log/mongodb.log pidfilepath=/usr/local/mongodb/log/mongodb.pid directoryperdb=true logappend=true oplogSize=1000 fork=true #noprealloc=true #master=true #replSet=testrs0
启动服务
[root@mongodb-3 ~]# /etc/init.d/mongod start Starting mongod: [ OK ] [root@mongodb-3 ~]# netstat -tunlp |grep mon tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 2161/mongod
5.在mongos上添加shard节点
[root@mongodb-1 ~]# mongo --host 192.168.3.31 MongoDB shell version: 3.0.5 connecting to: 192.168.3.31:27017/test Server has startup warnings: mongos> sh.addShard("192.168.3.32") #添加节点1 { "shardAdded" : "shard0000", "ok" : 1 } mongos> sh.addShard("192.168.3.33") #添加节点2 { "shardAdded" : "shard0001", "ok" : 1 } mongos> sh.status() #查看状态 --- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, "clusterId" : ObjectId("55c3fa618addd3d263602205") } shards: { "_id" : "shard0000", "host" : "192.168.3.32:27017" } { "_id" : "shard0001", "host" : "192.168.3.33:27017" } balancer: Currently enabled: yes 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" }
对所需对象启用分片功能
#对数据库启用sharding功能 mongos> sh.enableSharding("testdb") { "ok" : 1 } mongos> sh.status() --- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, "clusterId" : ObjectId("55c3fa618addd3d263602205") } shards: { "_id" : "shard0000", "host" : "192.168.3.32:27017" } { "_id" : "shard0001", "host" : "192.168.3.33:27017" } balancer: Currently enabled: yes 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" : "test", "partitioned" : false, "primary" : "shard0000" } { "_id" : "testdb", "partitioned" : true, "primary" : "shard0000" } #已生效 #指定需要分片的Collection及索引 mongos> sh.shardCollection("testdb.students",{"age":1}) { "collectionsharded" : "testdb.students", "ok" : 1 } mongos> sh.status() --- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, "clusterId" : ObjectId("55c3fa618addd3d263602205") } shards: { "_id" : "shard0000", "host" : "192.168.3.32:27017" } { "_id" : "shard0001", "host" : "192.168.3.33:27017" } balancer: Currently enabled: yes 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" : "test", "partitioned" : false, "primary" : "shard0000" } { "_id" : "testdb", "partitioned" : true, "primary" : "shard0000" } testdb.students shard key: { "age" : 1 } chunks: shard0000 1 { "age" : { "$minKey" : 1 } } -->> { "age" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 0)
分片功能已开启,接下来我们手动创建数据来验证是否会分片
mongos> for (i=1;i<=100000;i++) db.students.insert({name:"student"+i,age:(i%120),address:"China"}) WriteResult({ "nInserted" : 1 }) mongos> db.students.find().count() 100000 mongos> sh.status() --- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, "clusterId" : ObjectId("55c3fa618addd3d263602205") } shards: { "_id" : "shard0000", "host" : "192.168.3.32:27017" } { "_id" : "shard0001", "host" : "192.168.3.33:27017" } balancer: Currently enabled: yes Currently running: no Failed balancer rounds in last 5 attempts: 0 Migration Results for the last 24 hours: 1 : Success databases: { "_id" : "admin", "partitioned" : false, "primary" : "config" } { "_id" : "test", "partitioned" : false, "primary" : "shard0000" } { "_id" : "testdb", "partitioned" : true, "primary" : "shard0000" } testdb.students shard key: { "age" : 1 } chunks: shard0000 2 #2个分片 shard0001 1 #1个分片 { "age" : { "$minKey" : 1 } } -->> { "age" : 2 } on : shard0000 Timestamp(2, 1) { "age" : 2 } -->> { "age" : 10 } on : shard0000 Timestamp(1, 2) { "age" : 10 } -->> { "age" : { "$maxKey" : 1 } } on : shard0001 Timestamp(2, 0)