dokcer-compose方式部署 mongo集群

声明:本人在单台机器上部署的mongo机器, mongo版本为8.0, 这玩意居然部署了一天,终于搞好了, 希望对后面想要部署的人有帮助

先创建一个mongodb目录, 后续的配置,数据都存放在这个目录中:

1. 创建mongo-secrets目录,mkdir  mongo-secrets

2. 创建keyfile文件, openssl rand -base64 756 > keyfile

3. 设置权限,所属组

chmod 600 mongo-secrets/keyfile

sudo chown 999:999 mongo-secrets/keyfile 

4. 创建docker-compose.yaml,如果你想用,请修改密码,将xxxxxx改成自己的。  文件如下: 

services:
  mongo1:
    image: mongo:latest
    hostname: mongo1
    container_name: mongo1
    restart: unless-stopped
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: xxxxxxx
      MONGO_REPLICA_SET_NAME: rs0
    volumes:
      - ./mongo1/data:/data/db
      - ./mongo-secrets/keyfile:/etc/mongo-secrets/keyfile
    ports:
      - "27017:27017"
    networks:
      - mongo-cluster-net
    command: 
      - mongod
      - --replSet=rs0
      - --bind_ip_all
      - --keyFile=/etc/mongo-secrets/keyfile
      - --auth
    depends_on:
      - mongo2
      - mongo3

  mongo2:
    image: mongo:latest
    hostname: mongo2
    container_name: mongo2
    restart: unless-stopped
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: xxxxxxx
      MONGO_REPLICA_SET_NAME: rs0
    volumes:
      - ./mongo2/data:/data/db
      - ./mongo-secrets/keyfile:/etc/mongo-secrets/keyfile
    networks:
      - mongo-cluster-net
    command: 
      - mongod
      - --replSet=rs0
      - --bind_ip_all
      - --keyFile=/etc/mongo-secrets/keyfile
      - --auth

  mongo3:
    image: mongo:latest
    hostname: mongo3
    container_name: mongo3
    restart: unless-stopped
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: xxxxxxx
      MONGO_REPLICA_SET_NAME: rs0
    volumes:
      - ./mongo3/data:/data/db
      - ./mongo-secrets/keyfile:/etc/mongo-secrets/keyfile
    networks:
      - mongo-cluster-net
    command: 
      - mongod
      - --replSet=rs0
      - --bind_ip_all
      - --keyFile=/etc/mongo-secrets/keyfile
      - --auth

networks:
  mongo-cluster-net:
    driver: bridge

5. 运行: docker-compose up -d

6. 查看结果:docker-compose ps -a

 状态一定要注意: 是Up状态,而不是restart状态。
7. 初始化集群

docker-compose exec mongo1 mongosh --username admin --password xxxxxx --authenticationDatabase admin --eval 'rs.initiate({_id: "rs0", members: [{_id: 0, host: "mongo1:27017"}, {_id: 1, host: "mongo2:27017"}, {_id: 2, host: "mongo3:27017"}]})'
 
8. 查看集群状态:
sleep 5 && docker-compose exec mongo1 mongosh --username admin --password xxxxxxx --authenticationDatabase admin --eval 'rs.status()'

9. 目录结构如下:

 10. 状态如下, 太长了(部分截图)

 

posted @ 2025-02-24 00:55  浪浪辛  阅读(57)  评论(1)    收藏  举报