使用 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' } ]