# Mongodb分片

# 架构

节点:localhost(使用单机多端口实现)

架构说明(数字为端口):

27018:config server(master)

27019:config server(slave)

27020:shard_master

27021:shard_slave

27022:shard_arbiter

27023:shard2

27024:router

# configServer配置

# 编写配置文件

directoryperdb=true
replSet=config
configsvr=true
logpath=/home/mymongo/config_master/mongod.log
logappend=true
fork=true
port=27018
dbpath=/home/mymongo/config_master
pidfilepath=/home/mymongo/config_master/mongod.pid

# master和slave都配置好后,启动服务

mongod -f mongo.conf

# 在主节点上配置

use admin
cfg={_id:"config",members:[{_id:0,host:'localhost:27018',priority:2}, {_id:1,host:'localhost:27019',priority:1}]};
rs.initiate(cfg)

# 从节点上进行开启

rs.slaveOk()

# 配置shards

# 编写配置文件

directoryperdb=true
replSet=shard
shardsvr = true
logpath=/home/mymongo/shard_master/mongod.log
logappend=true
fork=true
port=27020
dbpath=/home/mymongo/shard_master
pidfilepath=/home/mymongo/shard_master/mongod.pid

# master、slave、arbiter都配置好后,分别启动

mongod -f mongo.conf

# 进入主节点进行配置

use admin
cfg={_id:"shard",members:[{_id:0,host:'localhost:27020',priority:2}, {_id:1,host:'localhost:27021',priority:1},{_id:2,host:'localhost:27022',arbiterOnly:true}]};
rs.initiate(cfg)

# 开启从节点

rs.slaveOk()

# 配置另一个分片

按照相同方法配置另一个分片

# 配置路由节点

# 编写配置文件

configdb = config/localhost:27019,localhost:27018
logpath=/home/mymongo/router/mongod.log
logappend=true
fork=true
port=27024
pidfilepath=/home/mymongo/router/mongod.pid

# 用mongos启动

mongos -f router.conf

# 配置具体的分片策略

登陆mongos服务器

mongo --port=27024
use admin

添加自己的分片划分

sh.addShard("shard/localhost:27020,localhost:27021,localhost:27022");
sh.addShard("shard2/localhost:27023");

在mongos上为具体的数据库配置sharding

sh.enableSharding("test")

对test.t集合以id列为shard key进行hashed sharding

sh.shardCollection("test.t",{id:"hashed"})

可以看到自动为id列创建了索引

db.t.getIndexes()

# 分片验证

use test
for(i=1,i<=1000,i++){db.t.insert({id:i,name:"Lihua"})}

可以看到数据被分配到两个分片当中,分片集群搭建完成