部署概述图如下,为方便演示,部署在一台机器上,以端口号区分。
说明:
a:一共启动10个服务(分片复制集Share-a:3+分片复制集Share-b:3+配置复制集:3+路由服务器:1)
b:端口如上所示
Step 1:
分别启动复制集Shared-a
mongod --dbpath=../dbs/share-a-1 --logpath=../logs/share-a-1.log --shardsvr --fork --port 30000 --replSet=share-a
mongod --dbpath=../dbs/share-a-1 --logpath=../logs/share-a-2.log --shardsvr --fork --port 30001 --replSet=share-a
mongod --dbpath=../dbs/share-a-1 --logpath=../logs/share-a-3.log --shardsvr --fork --port 30002 --replSet=share-a
初始化复制集Shared-a
登录:./mongo --port 30000
运行:rs.initiate() #当前服务器作为复制集的主节点
rs.add("localhost:30001,localhost:30002"); #把这两台加入到复制集
注意:加入复制集的时候,用localhost可能会报错,这是运行db.isMaster(),查看hosts配置,hosts必须和主节点一致。
分别启动复制集Shared-b
mongod --dbpath=../dbs/share-b-1 --logpath=../logs/share-b-1.log --shardsvr --fork --port 30100 --replSet=share-b
mongod --dbpath=../dbs/share-b-1 --logpath=../logs/share-b-2.log --shardsvr --fork --port 30101 --replSet=share-b
mongod --dbpath=../dbs/share-b-1 --logpath=../logs/share-b-3.log --shardsvr --fork --port 30102 --replSet=share-b
初始化复制集Shared-b
登录:./mongo -port 30100
运行:rs.initiate() #当前服务器作为复制集的主节点
rs.add("localhost:30101,localhost:30102"); #把这两台加入到复制集
注意:加入复制集的时候,用localhost可能会报错,这是运行db.isMaster(),查看hosts配置,hosts必须和主节点一致。
分别启动配置复制集dbconfig
mongod --logpath=../logs/share-b-1.log --configsvr --fork --port 27019--replSet=dbconfig
mongod --logpath=../logs/share-b-2.log --configsvr --fork --port 27020--replSet=dbconfig
mongod --logpath=../logs/share-b-3.log --configsvr --fork --port 27021--replSet=dbconfig
初始化复制集dbconfig
登录:./mongo -port 27019
运行:rs.initiate() #当前服务器作为复制集的主节点
rs.add("localhost:27020,localhost:27021"); #把这两台加入到复制集
注意:加入复制集的时候,用localhost可能会报错,这是运行db.isMaster(),查看hosts配置,hosts必须和主节点一致。
Step 2:
启动mongos进程
./mongos --fork --configdb dbconfig/localhost:27019,localhost:27020,localhost:27021 --port 40000 --logpath=../logs/mongos --logappend
注意:dbconfig为配置复制集的replSetName
Step 3:
配置分片集群。
登录:./mongo -port 40000
加入分片集合:
sh.addShard("share-a/localhost:30000,localhost:30001,localhost:30002");
sh.addShard("share-b/localhost:30100,localhost:30101,localhost:30102");
设置分片数据库:
sh.enableSharding("cloud-docs")
设置分片集合,定义分片键:
sh.shardCollection("cloud-docs.spreadsheets",{username:1,_id:1})
Step 4:
测试:
连接mongos:./mongo -port 40000
切换到cloud-docs数据库:use cloud-docs
插入2000个文档:for(i=0;i<2000;i++){db.spreadsheets.insert({"username":"name"+i,count:i})}
Step 5:
检查分片:
./mongo -port 40000
use config; #切换到config数据库
db.chunks.find().pretty();#查看分片情况,如下