使用 Docker 搭建 mongodb 6.0+ 集群

874 阅读1分钟

使用 Docker 搭建 mongodb 集群

怕自己忘了,所以写下来记录一下

  • mongodb 6.0+
  • docker

拉取 mongodb 镜像

docker pull mongo

启动 docker bridge

docker network create mongo-net

启动三个 docker container

docker run --network mongo-net  --name mongo -d -v path/to/your/db:/data/db -p 27021:27017 mongo:latest --replSet mongo-set
docker run --network mongo-net  --name mongo-slaver -d -v path/to/your/db:/data/db -p 27022:27017 mongo:latest --replSet mongo-set
docker run --network mongo-net  --name mongo-arbiter -d -v path/to/your/db:/data/db -p 27023:27017 mongo:latest --replSet mongo-set

参数说明

  • --network 将容器加入创建的网桥
  • -v 将容器内部的文件挂载在宿主机指定的目录
  • --replSet 命名副本集名

进入主 mongodb 容器并打开mongosh

 docker exec -it mongo bash
 mongosh

设置 mongo 主节点

rs.initiate()

添加副节点

rs.add('mongo-slaver:27017')
rs.add({host:'mongo-arbiter:27017',priority:0})

查看副本集状态

rs.status()
在我这里的输出大致如下:
  members: [
    {
      _id: 0,
      name: 'ac056cb646c1:27017',
      health: 1,
      state: 1,
      stateStr: 'PRIMARY',
      ...
    },
    {
      _id: 1,
      name: 'mongo-slaver:27017',
      health: 1,
      state: 2,
      stateStr: 'SECONDARY',
      ...
    },
    {
      _id: 2,
      name: 'mongo-arbiter:27017',
      health: 1,
      state: 2,
      stateStr: 'SECONDARY',
      ...
    }
  ]

验证一下

向主节点中插入一条数据
db.name.insertOne({"name":"KinLeoapple"})
在副节点中查看数据
db.getMongo().setReadPref("secondary") // 允许从主节点中读取数据
db.name.find()
输出如下
[ { _id: ObjectId("6396b418069d55967baa7cb6"), name: 'KinLeoapple' } ]

参考文章

# Mongodb 实战:使用 Docker 搭建 mongodb 集群