文章来源:https://www.cnblogs.com/jay54520/p/8444218.html
仅做个人记录使用
创建配置服务集群(mongo3.4之后的版本必须2个节点以上)
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
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8446a659a7e2 mongo "docker-entrypoint.s…" 9 seconds ago Up 8 seconds 27017/tcp config_server2
03d1cc988bec mongo "docker-entrypoint.s…" 11 seconds ago Up 9 seconds 27017/tcp config_server1
通过docker inspect
找到两个配置服务实例的IP
docker inspect config_server1 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
docker inspect config_server2 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.3",
由于--configsvr
的默认端口为27019。所以配置服务的地址为:
- config_server1: 172.17.0.2:27019
- config_server2: 172.17.0.3:27019
初始化
docker exec -it config_server1 bash
mongo --host 172.17.0.2 --port 27019
rs.initiate(
{
_id: "rs_config_server",
configsvr: true,
members: [
{ _id : 0, host : "172.17.0.2:27019" },
{ _id : 1, host : "172.17.0.3:27019" }
]
}
);
连接字符串为
mongodb://172.17.0.2:27019,172.17.0.3:27019/test?replicaSet=rs_config_server
创建分片集群
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
获取对应的docker容器实例IP
由于--shardsvr
的默认端口为27018。所以地址为
- shard_server11:172.17.0.4:27018
- shard_server12:172.17.0.5:27018
- shard_server21:172.17.0.6:27018
- shard_server22:172.17.0.7:27018
docker exec -it shard_server11 bash
mongo --host 172.17.0.4 --port 27018
rs.initiate(
{
_id : "rs_shard_server1",
members: [
{ _id : 0, host : "172.17.0.4:27018" },
{ _id : 1, host : "172.17.0.5:27018" }
]
}
);#输出 { "ok" : 1 }
mongo --host 172.17.0.6 --port 27018
rs.initiate(
{
_id : "rs_shard_server2",
members: [
{ _id : 0, host : "172.17.0.6:27018" },
{ _id : 1, host : "172.17.0.7:27018" }
]
}
);#输出 { "ok" : 1 }
连接字符串为
mongodb://172.17.0.4:27018,172.17.0.5:27018/test?replicaSet=rs_shard_server1
mongodb://172.17.0.6:27018,172.17.0.7:27018/test?replicaSet=rs_shard_server2
连接 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
增加分片到集群
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")
数据库启用分片
sh.enableSharding("test")
分片 Collection
对 test.order
的 _id
字段进行哈希分片:
sh.shardCollection("test.order", {"_id": "hashed" })
插入数据
use test
for (i = 1; i <= 1000; i=i+1){db.order.insert({'price': 1})}
查看数据分布
mongos>
db.order.find().count()
1000rs_shard_server1:PRIMARY>
db.order.find().count()
rs_shard_server2:PRIMARY>
db.order.find().count()