前言

由于想用nodejs实现实时获取Mongodb数据流,但是报错显示需要有副本集的mongodb才能实现实时获取信息流,因此特此进行副本集的配置。另外由于笔者使用的是Windows开发,虚拟机上面的Ubuntu20.04的apt源又被整坏了,因此只能寻求通过docker来实现副本集的部署。

操作步骤

首先默认已经安装过docker desktop,没有安装过的可以参考这篇博客

1. docker拉取mongodb镜像

!注:一定要给镜像分配数据卷,要不然就会在启动的时候启动到一半停下来中止。
首先创建一个文件名为docker-compose.yml的文件,内容如下:

version: '3.8'
services:
  mongo1:
    image: mongo:latest
    container_name: mongo1
    ports:
      - 27017:27017
    volumes:
      - mongo1_data:/data/db
    command: ["mongod", "--replSet", "rs0", "--bind_ip_all"]

  mongo2:
    image: mongo:latest
    container_name: mongo2
    ports:
      - 27018:27017
    volumes:
      - mongo2_data:/data/db
    command: ["mongod", "--replSet", "rs0", "--bind_ip_all"]

  mongo3:
    image: mongo:latest
    container_name: mongo3
    ports:
      - 27019:27017
    volumes:
      - mongo3_data:/data/db
    command: ["mongod", "--replSet", "rs0", "--bind_ip_all"]

volumes:
  mongo1_data:
  mongo2_data:
  mongo3_data:

然后执行下面的命令生成镜像并启动容器:

docker-compose up -d

2. 连接mongo1镜像的mongosh

docker exec -it mongo1 mongo

【问题记录】Docker配置mongodb副本集实现数据流实时获取-LMLPHP

3. 在mongosh中初始化副本集

在mongosh中输入如下命令:

rs.initiate(
  {
    _id: "rs0",
    members: [
      { _id: 0, host: "mongo1:27017" },
      { _id: 1, host: "mongo2:27017" },
      { _id: 2, host: "mongo3:27017" }
    ]
  }
)

输出:
【问题记录】Docker配置mongodb副本集实现数据流实时获取-LMLPHP
连接成功以后打开Docker Desktop就能看到连接成功以后的mongodb副本集了。
【问题记录】Docker配置mongodb副本集实现数据流实时获取-LMLPHP
用Mongo Campass连接上mongodb以后就可以看到副本集配置成功了!嘿嘿嘿
【问题记录】Docker配置mongodb副本集实现数据流实时获取-LMLPHP

注意点

详细步骤可以借鉴这篇文章
【问题记录】Docker配置mongodb副本集实现数据流实时获取-LMLPHP
注!:操作副本集如果想以PRIMARY模式需要在进入副本集以后再按一下回车。

另外注意在添加用户的时候要在admin用户下进行,详细步骤如下:
【问题记录】Docker配置mongodb副本集实现数据流实时获取-LMLPHP
看到验证消息输出1证明验证成功!

07-16 15:54