📅  最后修改于: 2023-12-03 15:00:30.294000             🧑  作者: Mango
本文将介绍如何通过 Docker-Compose 部署 MongoDB 副本集,并初始化副本集,以满足高可用、持久化和数据备份等需求。MongoDB 副本集可以提供更可靠的数据访问,防止尾部节点故障数据丢失,实现高性能、低延迟、高可靠的数据库集群。
在使用 Docker-Compose 部署 MongoDB 副本集之前,您需要先安装 Docker 和 Docker-Compose,并且了解以下概念:
以下是基于 Docker-Compose 的 MongoDB 副本集部署和初始化副本集的步骤:
编写一个 Docker-Compose 配置文件 docker-compose.yml
,其中定义了 MongoDB 副本集的主节点(mongo1
)、次要节点(mongo2
和mongo3
)和仲裁节点(mongo-arb
):
version: '2.2'
services:
mongo1:
image: mongo:4.2
container_name: mongo1
restart: always
ports:
- 28017:28017
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=password
- MONGO_REPLICA_SET_NAME=rs0
- MONGO_PORT=27017
- MONGO_HOSTNAME=mongo1
volumes:
- ./data/db1:/data/db
networks:
- mongo-cluster
command: mongod --port 27017 --bind_ip 0.0.0.0 --replSet rs0
mongo2:
image: mongo:4.2
container_name: mongo2
restart: always
ports:
- 28018:28017
environment:
- MONGO_REPLICA_SET_NAME=rs0
- MONGO_PORT=27017
- MONGO_HOSTNAME=mongo2
volumes:
- ./data/db2:/data/db
networks:
- mongo-cluster
command: mongod --port 27017 --bind_ip 0.0.0.0 --replSet rs0
mongo3:
image: mongo:4.2
container_name: mongo3
restart: always
ports:
- 28019:28017
environment:
- MONGO_REPLICA_SET_NAME=rs0
- MONGO_PORT=27017
- MONGO_HOSTNAME=mongo3
volumes:
- ./data/db3:/data/db
networks:
- mongo-cluster
command: mongod --port 27017 --bind_ip 0.0.0.0 --replSet rs0
mongo-arb:
image: mongo:4.2
container_name: mongo-arb
restart: always
environment:
- MONGO_REPLICA_SET_NAME=rs0
- MONGO_PORT=27017
- MONGO_HOSTNAME=mongo-arb
networks:
- mongo-cluster
command: mongod --port 27017 --bind_ip 0.0.0.0 --replSet rs0 --arbiterOnly
networks:
mongo-cluster:
说明
image
: 指定 MongoDB 版本container_name
: 指定容器名称restart
: 设置容器自动重启ports
: 常规启动端口environment
: 容器环境变量volumes
: 指定数据卷networks
: 指定容器所属的网络command
: 启动容器的命令在终端中运行以下命令启动 MongoDB 副本集:
$ docker-compose up -d
以 mongo1
为主节点,初始化 MongoDB 副本集。先进入容器,进入 mongo shell:
$ docker exec -it mongo1 bash
$ mongo
在 mongo shell 中,输入以下命令:
rs.initiate(
{
_id : "rs0",
members: [
{ _id: 0, host: "mongo1:27017" },
{ _id: 1, host: "mongo2:27017" },
{ _id: 2, host: "mongo3:27017" },
{ _id: 3, host: "mongo-arb:27017", arbiterOnly: true }
]
}
)
说明:
_id
:副本集名称,需要唯一。members
:副本集成员列表,包括主节点、次要节点和仲裁节点等。其中,arbiterOnly
代表仲裁节点。在 mongo shell 中,输入以下命令验证副本集是否已初始化成功:
rs.conf()
将会返回 MongoDB 副本集的详细配置信息。您还可以执行以下命令,查看当前副本集状态:
rs.status()
通过 Docker-Compose 部署 MongoDB 副本集,并初始化副本集,将您的 MongoDB 数据库管理系统提高到一个更可靠的级别。副本集成员之间的数据同步和故障切换是由 MongoDB 副本集自动处理的,这使得您的应用程序可以更高效、更可靠地使用 MongoDB。