美文网首页
docker搭建mongo分片集群

docker搭建mongo分片集群

作者: keetone | 来源:发表于2018-07-11 21:58 被阅读0次

文章来源: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()
1000

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

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

相关文章

网友评论

      本文标题:docker搭建mongo分片集群

      本文链接:https://www.haomeiwen.com/subject/qkskpftx.html