docker搭建分片mongo集群(笔记)

参考:https://www.jianshu.com/p/7be177d669be?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

1.创建配置服务集群(mongo3.4之后的版本必须2个节点以上)
(1)创建服务
docker run --name config_server1 -d mongo --configsvr --replSet "rs_config_server"  --bind_ip_all
docker run --name config_server2 -d mongo --configsvr --replSet "rs_config_server"  --bind_ip_all
(2)查看服务IP
docker inspect config_server1 | grep IPAddress
(3)进入mongo容器
由于--configsvr的默认端口为27019。所以配置服务的地址为: docker exec -it config_server1 bash mongo --host 172.17.0.2 --port 27019
(4)初始化集群配置
cfg={
_id: "rs_config_server",
configsvr: true,
members: [
{ _id : 0, host : "172.17.0.2:27019" },
{ _id : 1, host : "172.17.0.3:27019" }
]
}

rs.initiate(cfg)
2.创建分片集群
docker run --name shard_server11 -d mongo --shardsvr --replSet "rs_shard_server1"  --bind_ip_all
docker run --name shard_server12 -d mongo --shardsvr --replSet "rs_shard_server1"  --bind_ip_all

docker run --name shard_server21 -d mongo --shardsvr --replSet "rs_shard_server2"  --bind_ip_all
docker run --name shard_server22 -d mongo --shardsvr --replSet "rs_shard_server2"  --bind_ip_all
通过docker inspect shard_server11 | grep IPAddress获取对应的docker容器实例IP 由于--shardsvr的默认端口为27018。所以地址为 docker exec -it shard_server11 bash mongo --host 172.17.0.4 --port 27018
cfg={
_id : "rs_shard_server1",
members: [
{ _id : 0, host : "172.17.0.4:27018" },
{ _id : 1, host : "172.17.0.5:27018" }
]
}
rs.initiate(cfg)
mongo --host 172.17.0.6 --port 27018
cfg={
    _id : "rs_shard_server2",
    members: [
    { _id : 0, host : "172.17.0.6:27018" },
    { _id : 1, host : "172.17.0.7:27018" }
    ]
    }
rs.initiate(cfg)
3.连接 mongos 到分片集群
由于镜像的默认入口是 mongod,所以要通过 --entrypoint "mongos" 将其改为 mongos:
docker run --name mongos -d --entrypoint "mongos" mongo --configdb rs_config_server/172.17.0.2:27019,172.17.0.3:27019 --bind_ip_all
地址为:172.17.0.8:27017
4.增加分片到集群
docker exec -it mongos bash
mongo --host 172.17.0.8 --port 27017
sh.addShard("rs_shard_server1/172.17.0.4:27018,172.17.0.5:27018")
sh.addShard("rs_shard_server2/172.17.0.6:27018,172.17.0.7:27018")
5.数据库启用分片
sh.enableSharding("test")
6.分片 Collection:对 test.order 的 _id 字段进行哈希分片:
sh.shardCollection("test.order", {"_id": "hashed" })
7.插入数据
use test
for (i = 1; i <= 1000; i=i+1){db.order.insert({'price': 1})}
8.查看数据分布
mongos> db.order.find().count()
1000

rs_shard_server1:PRIMARY> db.order.find().count()

rs_shard_server2:PRIMARY> db.order.find().count()
9.其他
以上信息输出,表示安装成功。使用mongo客户端nosqlbooster发现连接失败,查看发现mongos服务对外端口未开放,修改如下
docker stop mongos
将容器commit成为一个镜像
docker commit mongos yang_mongos
docker rm mongos
docker run -it -d --name mongos -p 27017:27017 yang_mongos

连接测试: