背景
在开发中,我们很容易通过docker启动一个普通的mongodb数据库服务。但是有时候为了保持与线上环境一致,或者为了利用mongodb副本集的某些特性,我们需要在本地部署mongodb副本集。副本集往往需要启动多个mongodb服务作为副本集成员,而通常用于开发的笔记本资源比较有限。鉴于此,官方文档给了解决办法,可以直接将一个单节点mongodb服务转换为单节点副本集https://www.mongodb.com/docs/manual/tutorial/convert-standalone-to-replica-set/,本片文章的背景就是在golang中开发,操作mongo开启事务后报错:
代码语言:javascript复制(IllegalOperation) Transaction numbers are only allowed on a replica set member or mongos
需要开启副本集才能使用事务,并且mongo版本大于4.0以上哈
操作
- pull mongo镜像 这边使用mongo5.0.7
docker pull mongo:5.0.7
- 创建并启动一个mongo副本集容器
docker run -d --name mongo_test -p 27017:27017 mongo:5.0.7 --replSet rs0
其中 --replSet rs0
就是指明开启副本集
- 进入容器初始化副本集
docker exec -it mongo_test bash
- 进入终端输入
mongosh
- 在mongosh终端内输入
rs.initiate()
,它便会自动根据默认配置生成一个副本集
- 检查副本集状态,使用
rs.status()
- 大功告成!
注:一定要在终端内输入mongosh进入mongosh后 再执行rs.initiate()和rs.status()