一、创建分片服务 shardsvr
docker run --name rs1_container1 -d -p 20001:20001 -v $PWD/db1:/data/db1 mongo:latest --shardsvr --replSet "rs1" --port 20001 --bind_ip_all --dbpath /data/db1
docker run --name rs1_container2 -d -p 20002:20001 -v $PWD/db2:/data/db2 mongo:latest --shardsvr --replSet "rs1" --port 20001 --bind_ip_all --dbpath /data/db2
docker run --name rs1_container3 -d -p 20003:20001 -v $PWD/db3:/data/db3 mongo:latest --shardsvr --replSet "rs1" --port 20001 --bind_ip_all --dbpath /data/db3
docker run --name rs2_container1 -d -p 20011:20001 -v $PWD/db4:/data/db4 mongo:latest --shardsvr --replSet "rs2" --port 20001 --bind_ip_all --dbpath /data/db4
docker run --name rs2_container2 -d -p 20012:20001 -v $PWD/db5:/data/db5 mongo:latest --shardsvr --replSet "rs2" --port 20001 --bind_ip_all --dbpath /data/db5
docker run --name rs2_container3 -d -p 20013:20001 -v $PWD/db6:/data/db6 mongo:latest --shardsvr --replSet "rs2" --port 20001 --bind_ip_all --dbpath /data/db6
二、创建配置服务 configsvr
docker run --name config_container1 -d -p 21001:20001 -v $PWD/cdb1:/data/db mongo:latest --configsvr --replSet "crs" --port 20001 --bind_ip_all --dbpath /data/db
docker run --name config_container2 -d -p 21002:20001 -v $PWD/cdb2:/data/db mongo:latest --configsvr --replSet "crs" --port 20001 --bind_ip_all --dbpath /data/db
三、启动路由服务 mongos
docker run --name mongos_container1 -d -p 22001:20001 --entrypoint "mongos" mongo:latest --configdb crs/192.168.0.15:21001,192.168.0.15:21002 --port 20001 --bind_ip_all
docker run --name mongos_container2 -d -p 22002:20001 --entrypoint "mongos" mongo:latest --configdb crs/192.168.0.15:21001,192.168.0.15:21002 --port 20001 --bind_ip_all
四、初始化分片rs1副本集
# 任意选择rs1分片的一个副本
mongo --port 20001
# 切换数据库
use admin
# 写配置文件
config = {_id:"rs1",members:[ {_id:0,host:"192.168.0.15:20001"}, {_id:1,host:"192.168.0.15:20002"}, {_id:2,host:"192.168.0.15:20003",arbiterOnly:true} ] }
# 初始化副本集
rs.initiate(config)
# 查看副本集状态
rs.status()
五、初始化分片rs2副本集
# 任意选择rs2分片的一个副本
mongo --port 20011
# 切换数据库
use admin
# 写配置文件
config = {_id:"rs2",members:[ {_id:0,host:"192.168.0.15:20011"}, {_id:1,host:"192.168.0.15:20012"}, {_id:2,host:"192.168.0.15:20013",arbiterOnly:true} ] }
# 初始化副本集
rs.initiate(config)
# 查看副本集状态
rs.status()
六、初始化配置服务副本集
# 任意选择crs分片的一个副本
mongo --port 21001
# 切换数据库
use admin
# 写配置文件
config = {_id:"crs", configsvr:true, members:[ {_id:0,host:"192.168.0.15:21001"}, {_id:1,host:"192.168.0.15:21002"} ] }
# 初始化副本集
rs.initiate(config)
# 查看副本集状态
rs.status()
七、通过mongos添加分片关系到configsvr
mongo --port 22001
use admin
db.runCommand({addshard:"rs1/192.168.0.15:20001,192.168.0.15:20002,192.168.0.15:20003"})
db.runCommand({addshard:"rs2/192.168.0.15:20011,192.168.0.15:20012,192.168.0.15:20013"})
db.runCommand({listshards:1})
八、设置数据库、集合分片
db.runCommand({enablesharding:"mydb"})
db.runCommand({shardcollection:"mydb.person", key:{id:1, company:1}})
九、测试分片结果
use mydb
for (i =0; i<10000;i++){db.person.save({id:i, company:"baidu"})}
db.person.stats()
十、其他
# 设置一个仲裁者
rs.addArb("192.168.1.122:27017")