使用 docker-compose 部署 mongodb 8.0 集群部署
步骤
openssl rand -base64 756 > mongodb.key
# 修改权限,否则mongod启动会报错
chmod 400 mongodb.key
version: "3"
services:
#主节点
mongodb1:
image: mongo:8.0.6-noble
container_name: mongo1
restart: always
ports:
- 27017:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=mongodb@123
command: mongod --replSet rs0 --keyFile /mongodb.key
volumes:
- /etc/localtime:/etc/localtime
- ./mongo1/data:/data/db
- ./mongo1/configdb:/data/configdb
- ./mongo1/mongodb.key:/mongodb.key
networks:
- mongonet
entrypoint:
- bash
- -c
- |
chmod 400 /mongodb.key
chown 999:999 /mongodb.key
exec docker-entrypoint.sh $$@
# 副节点
mongodb2:
image: mongo:8.0.6-noble
container_name: mongo2
restart: always
ports:
- 27018:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=mongodb@123
command: mongod --replSet rs0 --keyFile /mongodb.key
volumes:
- /etc/localtime:/etc/localtime
- ./mongo2/data:/data/db
- ./mongo2/configdb:/data/configdb
- ./mongo2/mongodb.key:/mongodb.key
networks:
- mongonet
entrypoint:
- bash
- -c
- |
chmod 400 /mongodb.key
chown 999:999 /mongodb.key
exec docker-entrypoint.sh $$@
# 副节点
mongodb3:
image: mongo:8.0.6-noble
container_name: mongo3
restart: always
ports:
- 27019:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=mongodb@123
command: mongod --replSet rs0 --keyFile /mongodb.key
volumes:
- /etc/localtime:/etc/localtime
- ./mongo3/data:/data/db
- ./mongo3/configdb:/data/configdb
- ./mongo3/mongodb.key:/mongodb.key
networks:
- mongonet
entrypoint:
- bash
- -c
- |
chmod 400 /mongodb.key
chown 999:999 /mongodb.key
exec docker-entrypoint.sh $$@
networks:
mongonet:
driver: bridge
mkdir -pv ./mongo{1,2,3}/{data,configdb}
cp mongodb.key mongo1/
cp mongodb.key mongo2/
cp mongodb.key mongo3/
# 单节点
docker-compose up -d
# 多节点启动
docker-compose up -d mongodb1
docker-compose up -d mongodb2
docker-compose up -d mongodb3
登录交互 shell
# 进入容器操作
docker exec -it mongo1 bash
# 登录mongo,mongodb 8 版本的 mongo shell 命令为 mongosh
mongosh -u root -p mongodb@123
# 或
$ docker exec -it mongo1 mongosh
> use admin
> db.auth('root', 'mongodb@123')
初始化集群
# 配置文件,注意修改ip,多节点需要修改ip和端口
> config={_id:"rs0",members:[
{_id:0,host:"10.0.0.1:27017"},
{_id:1,host:"10.0.0.1:27018"},
{_id:2,host:"10.0.0.1:27019"}]
}
# 初始化集群
> rs.initiate(config)
# 增长 mongo1 和 mongo2 的权重
> cfg = rs.conf()
# 修改权重
> cfg.members[0].priority=5
> cfg.members[1].priority=3
# 从新配置
> rs.reconfig(cfg)
# 查看集群状态,一个 PRIMARY 两个 second
> rs.status()
扩展
F&Q
mongodb ReadConcernMajorityNotAvailableYet: Read concern majority reads are currently not possible.
容器间网络不通