如何实现 Docker Mongo 数据库的主从复制

在这篇文章中,我们将学习如何在 Docker 中部署一个 MongoDB 数据库,并配置主备(主从复制)架构。我们将一步一步走过整个流程,确保你能完全理解每一步的意义。以下是整个实现过程的概览:

整体流程

步骤 描述
1 准备 Docker 环境
2 创建 MongoDB 主节点 Docker 容器
3 创建 MongoDB 从节点 Docker 容器
4 配置 MongoDB 主从复制
5 验证主从复制是否成功

每一步的详细说明

步骤 1:准备 Docker 环境

首先,确保你已安装 Docker,并且 Docker 服务正在运行。你可以通过以下命令确认 Docker 是否正常:

docker --version

这条命令将返回 Docker 的版本信息。

步骤 2:创建 MongoDB 主节点 Docker 容器

我们将使用以下命令启动 MongoDB 的主节点。使用 -d 参数在后台运行。

docker run --name mongo-primary -d \
  -e MONGO_INITDB_ROOT_USERNAME=root \
  -e MONGO_INITDB_ROOT_PASSWORD=example \
  -p 27017:27017 \
  mongo:latest
  • --name mongo-primary:指定容器的名称。
  • -d:在后台运行容器。
  • -e MONGO_INITDB_ROOT_USERNAME=root:设置数据库初始管理员用户名。
  • -e MONGO_INITDB_ROOT_PASSWORD=example:设置数据库初始管理员密码。
  • -p 27017:27017:将主机的 27017 端口映射到容器的 27017 端口。

步骤 3:创建 MongoDB 从节点 Docker 容器

和主节点一样,我们也使用 Docker 创建从节点:

docker run --name mongo-secondary -d \
  -e MONGO_INITDB_ROOT_USERNAME=root \
  -e MONGO_INITDB_ROOT_PASSWORD=example \
  mongo:latest

参数与主节点相同,这里由于从节点的初始密码设置是不必要的,因此我们可以直接运行。不需要映射端口,因为从节点不直接对外提供接口。

步骤 4:配置 MongoDB 主从复制

进入主节点的容器并设置复制:

docker exec -it mongo-primary mongo -u root -p example --authenticationDatabase admin

在 MongoDB shell 中执行以下命令:

rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "mongo-primary:27017" },
    { _id: 1, host: "mongo-secondary:27017" }
  ]
})
  • rs.initiate():初始化副本集。
  • members:定义成员及其角色。第一个成员是主节点,第二个是从节点。

步骤 5:验证主从复制是否成功

在 MongoDB shell 中,可以通过以下命令测试复制:

rs.status()

这个命令将返回副本集的状态。

关系图

接下来,我们使用 mermaid 描述 MongoDB 主从节点之间的关系:

erDiagram
    MONGODB {
        string id PK
        string type
        string state
    }
    MONGODB ||--o{ MONGODB : replication

序列图

我们可以使用 mermaid 语法来描述整个过程的序列图:

sequenceDiagram
    participant User
    participant MongoPrimary
    participant MongoSecondary

    User->>MongoPrimary: Start MongoDB Primary
    MongoPrimary-->>User: Primary is ready
    User->>MongoSecondary: Start MongoDB Secondary
    MongoSecondary-->>User: Secondary is ready
    User->>MongoPrimary: Configure replication
    MongoPrimary-->>User: Replication configured
    User->>MongoPrimary: Check replication status
    MongoPrimary-->>User: Replication status is okay

结尾

通过以上步骤,我们成功在 Docker 中设置了一个主从复制的 MongoDB 数据库。现在,你可以在主节点上进行数据库操作,数据会自动复制到从节点。希望这篇文章能帮助你更好地理解和实现 MongoDB 的主备配置,祝你在开发与学习的路上越走越顺利!