使用docker 创建MongoDB副本集配置完整指南

一、准备工作

  1. 创建项目目录
bash 复制代码
mkdir mongodb-replica
cd mongodb-replica
  1. 创建必要的子目录
bash 复制代码
mkdir scripts
mkdir data

二、生成密钥文件

  1. 生成MongoDB密钥文件
bash 复制代码
openssl rand -base64 756 > mongodb-keyfile
chmod 400 mongodb-keyfile

三、创建初始化脚本

  1. 创建setup.sh脚本
bash 复制代码
touch scripts/setup.sh
chmod +x scripts/setup.sh
  1. 编写setup.sh内容
bash 复制代码
#!/bin/bash
sleep 30 
mongosh --host mongo1:27017 -u root -p example --authenticationDatabase admin <<EOF
rs.initiate({
  _id: "myReplicaSet",
  members: [
    { _id: 0, host: "mongo1:27017" },
    { _id: 1, host: "mongo2:27017" },
    { _id: 2, host: "mongo3:27017" }
  ]
})
EOF

四、配置Docker Compose

  1. 创建docker-compose.yml文件
yaml 复制代码
version: '3.8'
services:
  mongo1:
    image: mongo:latest
    container_name: mongo1
    command: mongod --replSet myReplicaSet --bind_ip 0.0.0.0 --keyFile /data/mongodb-keyfile
    networks:
      - mongo-replica
    ports:
      - "27017:27017"
    volumes:
      - ./data/mongo1:/data/db
      - ./mongodb-keyfile:/data/mongodb-keyfile:ro
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
    healthcheck:
      test: echo 'db.runCommand("ping").ok' | mongosh --quiet --eval "db.runCommand('ping').ok" localhost:27017/admin -u root -p example
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 30s

  mongo2:
    image: mongo:latest
    container_name: mongo2
    command: mongod --replSet myReplicaSet --bind_ip 0.0.0.0 --keyFile /data/mongodb-keyfile
    networks:
      - mongo-replica
    ports:
      - "27018:27017"
    volumes:
      - ./data/mongo2:/data/db
      - ./mongodb-keyfile:/data/mongodb-keyfile:ro
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
    healthcheck:
      test: echo 'db.runCommand("ping").ok' | mongosh --quiet --eval "db.runCommand('ping').ok" localhost:27017/admin -u root -p example
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 30s
    depends_on:
      mongo1:
        condition: service_healthy

  mongo3:
    image: mongo:latest
    container_name: mongo3
    command: mongod --replSet myReplicaSet --bind_ip 0.0.0.0 --keyFile /data/mongodb-keyfile
    networks:
      - mongo-replica
    ports:
      - "27019:27017"
    volumes:
      - ./data/mongo3:/data/db
      - ./mongodb-keyfile:/data/mongodb-keyfile:ro
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
    healthcheck:
      test: echo 'db.runCommand("ping").ok' | mongosh --quiet --eval "db.runCommand('ping').ok" localhost:27017/admin -u root -p example
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 30s
    depends_on:
      mongo1:
        condition: service_healthy

  mongo-setup:
    image: mongo:latest
    container_name: mongo-setup
    restart: on-failure
    networks:
      - mongo-replica
    depends_on:
      mongo1:
        condition: service_healthy
      mongo2:
        condition: service_healthy
      mongo3:
        condition: service_healthy
    volumes:
      - ./scripts:/scripts
      - ./mongodb-keyfile:/data/mongodb-keyfile:ro
    entrypoint: [ "bash", "/scripts/setup.sh" ]

networks:
  mongo-replica:
    driver: bridge

五、启动服务

  1. 启动MongoDB副本集
bash 复制代码
docker-compose up -d
  1. 查看服务状态
bash 复制代码
docker-compose ps

六、验证配置

  1. 检查副本集状态
bash 复制代码
docker exec mongo1 mongosh --eval "rs.status()" -u root -p example
  1. 测试写入操作
bash 复制代码
docker exec mongo1 mongosh -u root -p example --eval '
db = db.getSiblingDB("test");
db.test.insertOne({x: 1});
'

七、重要说明

  1. 端口映射
  • mongo1: 27017
  • mongo2: 27018
  • mongo3: 27019
  1. 认证信息
  • 用户名:root
  • 密码:example
  • 认证数据库:admin
  1. 数据持久化
  • 数据存储在 ./data 目录下
  • 每个节点有独立的子目录
  1. 安全注意事项
  • 密钥文件权限必须为400
  • 生产环境建议修改默认密码
  • 建议配置防火墙规则

八、常见问题处理

  1. 服务无法启动
  • 检查端口占用
  • 检查目录权限
  • 检查密钥文件权限
  1. 副本集初始化失败
  • 检查网络连接
  • 检查认证信息
  • 检查setup.sh脚本权限
  1. 数据同步问题
  • 检查节点健康状态
  • 检查网络连接
  • 检查日志信息

九、维护建议

  1. 定期备份
  • 使用mongodump进行数据备份
  • 保存配置文件
  • 记录集群状态
  1. 监控
  • 监控节点状态
  • 监控数据同步
  • 监控系统资源
  1. 更新维护
  • 定期更新MongoDB版本
  • 检查安全补丁
  • 优化配置参数
相关推荐
debug 小菜鸟12 分钟前
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
docker·云计算·aws
SpikeKing37 分钟前
Server - 使用 Docker 配置 PyTorch 研发环境
pytorch·docker·llm
斯普信云原生组2 小时前
Docker构建自定义的镜像
java·spring cloud·docker
2201_761199042 小时前
k8s4部署
云原生·容器·kubernetes
小柏ぁ3 小时前
calico/node is not ready: BIRD is not ready: BGP not established with xxx
运维·docker·kubernetes
三劫散仙4 小时前
kubernetes jenkins pipeline优化拉取大仓库性能指定分支+深度
容器·kubernetes·jenkins
西京刀客4 小时前
k8s热更新-subPath 不支持热更新
云原生·容器·kubernetes·configmap·subpath
weixin_434936284 小时前
k8S 命令
linux·容器·kubernetes
nuczzz6 小时前
GPU虚拟化
docker·kubernetes·k8s·gpu·nvidia
fengyehongWorld7 小时前
Linux Docker的简介
linux·docker