Docker搭建mongodb主从结构
user_IaP54NlE -本文目的是学习mongodb,使用docker搭建一主二从的replica set,并且保证在宿主机上通过golang driver能成功连接到该结构。
有如下目录结构:
.
├── config
│ └── config.sh
└── docker-compose.yml其中docker-compose.yml文件内容如下:
version: "3.8"
services:
mongo_setup:
image: mongo:5.0.0
hostname: mongo_setup
container_name: mongo_setup
volumes:
- ./config:/rs_config
entrypoint: /usr/bin/bash /rs_config/config.sh
restart: "no"
networks:
- mongo_net
depends_on:
- mongo1
- mongo2
- mongo3
mongo1:
image: mongo:5.0.0
hostname: mongo1
container_name: mongo1
entrypoint: /usr/bin/mongod --port 27117 --replSet "rs0" --bind_ip_all
ports:
- 27117:27117
networks:
- mongo_net
restart: on-failure
mongo2:
image: mongo:5.0.0
hostname: mongo2
container_name: mongo2
entrypoint: /usr/bin/mongod --port 27217 --replSet "rs0" --bind_ip_all
ports:
- 27217:27217
networks:
- mongo_net
restart: on-failure
mongo3:
image: mongo:5.0.0
hostname: mongo3
container_name: mongo3
environment:
- RS_NAME=rs0
entrypoint: /usr/bin/mongod --port 27317 --replSet "rs0" --bind_ip_all
ports:
- 27317:27317
networks:
- mongo_net
restart: on-failure
networks:
mongo_net:实际上是在3个容器中启动mongod实例,然后再使用一个容器来初始化集群。
config.sh是用于配置主从的脚本,内容如下:
#/bin/bash
RS_NAME=rs0
MASTER=mongo1
REPLICA_1=mongo2
REPLICA_2=mongo3
until mongosh --host $MASTER --port 27117 --quiet <<EOF
exit
EOF
do
sleep 5
done
mongosh --host $MASTER --port 27117 --quiet <<EOF
rs.initiate(
{
_id: "$RS_NAME",
version: 1,
members: [
{ _id: 0, host : "${MASTER}:27117", priority: 2 },
{ _id: 1, host : "${REPLICA_1}:27217", priority: 1 },
{ _id: 2, host : "${REPLICA_2}:27317", priority: 1 }
]
}
)
EOF按如上配置,就可以使用docker-compse up启动该主从实例。
不过,如果在宿主机上使用golang driver来连接该实例,会发生错误,原因在于,连接到master后,master返回其他副本的信息,而后客户端尝试连接其他副本,而由于宿主机与副本不在同一个网络里,因此无法成功通信。
解决的办法是配置宿主机的host,利用hosts文件来帮助宿主机解析其他副本的地址,增加下面几行:
# for mongodb replica
127.0.0.1 mongo1
127.0.0.1 mongo2
127.0.0.1 mongo3OK.
特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。
上一篇: TDengine在黑格智造的落地应用
下一篇: mongo变更数据类型
Tags 标签
dockermongodb扩展阅读
HCaaS容器虚机使用之搭建一套LNMP
2020-09-08 12:52:50 []玩转dnmp之自定义容器
2020-09-21 16:59:25 []玩转dnmp之容器之容器之间通讯
2020-09-22 05:03:09 []在 Windows 上可以用 Docker 吗?
2020-09-24 06:15:45 []酷瓜云课堂(腾讯云版)v1.2.0 发布,GPL协议再出发
2020-11-29 14:07:30 []Docker从零开始部署Laravel
2020-12-03 04:12:19 []在 docker 中搭建 swoole 运行环境
2020-12-11 19:34:53 []docker 搭建 php 环境?授人以鱼不如授人以渔!给你好看
2020-12-24 03:11:57 []Macbook m1 Big Sur 安装docker 运行laradock
2021-01-11 12:01:45 []Macbook m1 Big Sur 安装php7.1 mondodb 折腾记
2021-01-19 05:40:36 []加个好友,技术交流

