gpt4 book ai didi

mongodb - 在不同的物理服务器上使用 Docker 部署 mongodb 副本集服务器

转载 作者:IT老高 更新时间:2023-10-28 13:10:16 24 4
gpt4 key购买 nike

我正在尝试使用 docker 部署 mongodb 副本集。我设法通过执行这个在同一台服务器上做到这一点:

docker run -d --expose 27017 --name mongodbmycompany1 dockerfile/mongodb mongod --replSet rsmycompa
docker run -d --expose 27017 --name mongodbmycompany2 dockerfile/mongodb mongod --replSet rsacommeassure
docker run -d --expose 27017 --name mongodbmycompany3 dockerfile/mongodb mongod --replSet rsacommeassure

MONGODB1=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' mongodbmycompany1)
MONGODB2=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' mongodbmycompany2)
MONGODB3=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' mongodbmycompany3)

echo $MONGODB1
echo $MONGODB2
echo $MONGODB3

echo "Mongodb Replicaset init"
docker exec mongodbmycompany1 mongo 127.0.0.1:27017/mycompany --eval 'if(!rs.conf()) { rs.initiate(); cfg = rs.conf(); cfg.members[0].host = "'$MONGODB1':27017"; rs.reconfig(cfg); rs.add("'$MONGODB2':27017"); rs.add("'$MONGODB3':27017"); } rs.status();'

它按预期工作。我的副本集已初始化,我的 mongodb 结果集配置包含由其内部 IP 地址标识的 3 台服务器。这并不完美,因为我更喜欢使用服务器名称,但我没能做到。Docker 仅使用 --link 参数在镜像启动时传递的服务器名称填充每个/etc/hosts 文件。如果我在其他服务器运行时添加新服务器。这些服务器不会 ping 新服务器。

现在我还有一个问题。在生产环境中,可以在同一台物理服务器上运行大量 Mongodb docker 镜像,但这并不安全:- 如果我的物理服务器宕机,我会丢失所有的 Mongodb 副本,并且我的服务也会宕机- 如果我的物理服务器使用内部存储,我所有的 docker 镜像都使用同一个磁盘......我会遇到 IO 问题。

所以我的问题是:如何在多个物理服务器上部署许多 mongodb 副本?这些 mongodb 副本如何在不同服务器甚至不同数据中心上相互通信(主服务器和辅助服务器可以更改)?

最佳答案

假设:

  1. 您有 3 个不同的 docker 主机(服务器),IP 地址为 10.1.1.10110.1.1.10210.1.1.103
  2. 想要部署一个名为 rsacommeassure
  3. 的单一副本集
  4. Dockerfiles for mongodb 暴露端口 27017
  5. 所有服务器都在受信任的区域中,并且可以相互通信

首先让我们在每台服务器上启动 mongodb 容器(10.1.1.101 ~$ 用于命令提示符):

10.1.1.101 ~$ docker run -d -p 27017:27017 --name mongodbmycompany1 dockerfile/mongodb mongod --replSet rsacommeassure
10.1.1.102 ~$ docker run -d -p 27017:27017 --name mongodbmycompany2 dockerfile/mongodb mongod --replSet rsacommeassure
10.1.1.103 ~$ docker run -d -p 27017:27017 --name mongodbmycompany3 dockerfile/mongodb mongod --replSet rsacommeassure

-p 27017:27017 在主机 IP 上公开端口 27017,因此可以通过服务器的主机 IP 地址访问 mongo。

然后你需要启动副本集,所以只需在 mongodb 容器上运行它(我将在这里选择 server1):

your_laptop ~$ > mongo --host 10.1.1.101 
MongoDB shell version: 2.6.9
connecting to: test
> rs.initiate()
> cfg = rs.conf()
> cfg.members[0].host = "10.1.1.101:27017"
> rs.reconfig(cfg)
> rs.add("10.1.1.102:27017")
> rs.add("10.1.1.103:27017")
> rs.status();

IP 是本地的,但它适用于全局,只要服务器可以相互通信(VPN、防火墙、DMZ 等)。顺便说一句,您应该考虑 security小心。

关于mongodb - 在不同的物理服务器上使用 Docker 部署 mongodb 副本集服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27187591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com