在不同的物理服务器上使用Docker部署mongodb replicaset服务器

 灰灰t2502911555 发布于 2022-12-09 12:31

我正在尝试使用docker部署mongodb replicaset.我设法通过执行以下操作在同一台服务器上执行此操作:

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();'

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

现在我有另一个问题.在生产中,有很多Mongodb docker镜像在同一物理服务器上运行是可能的,但它不安全: - 如果我的物理服务器出现故障,我丢失了所有的Mongodb副本,而我的服务已关闭 - 如果我的物理服务器使用内部存储,我所有的docker镜像都使用相同的磁盘...而且我会遇到IO问题.

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

1 个回答
  • 我们假设:

      你有3台不同的泊坞窗主机(服务器),采用IPS 10.1.1.101,10.1.1.102,10.1.1.103

      想要部署一个名为的副本集 rsacommeassure

      Dockerfiles for mongodb暴露端口27017

      所有服务器都在受信任的区域,可以相互通信

    首先让我们在每台服务器上启动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等).顺便说一句,你应该仔细考虑安全性.

    2022-12-11 02:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有