使用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版本
  • 检查安全补丁
  • 优化配置参数
相关推荐
高旭博15 小时前
7. kubernetes资源——service服务
云原生·容器·kubernetes
斯普信专业组15 小时前
Docker 常用命令与时区配置指南
docker·容器·eureka
天一生水water1 天前
ubuntu使用毫秒镜像方式安装docker mysql
ubuntu·阿里云·docker
Qayrup1 天前
docker 搭建私有仓库,推送并拉取
运维·docker·容器
郭庆汝1 天前
docker拉取英伟达官方cuda11.8镜像
docker·cuda11.8
天下不喵1 天前
Ubuntu24.04安装Docker过程记录
docker
黑黍1 天前
如何在k8s中配置并使用nvidia显卡
云原生·容器·kubernetes
冷血~多好1 天前
使用docker部署elk,实现日志追踪
elk·docker·容器
会飞的小蛮猪1 天前
SkyWalking运维之路(Java探针接入)
java·运维·经验分享·容器·skywalking
天一生水water1 天前
docker-compose安装
运维·docker·容器