参考: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
连接测试: