0

Triển khai MongoDB ReplicaSet với Docker (Public IP VPS và yêu cầu xác thực người dùng)

Giới thiệu

Triển khai một MongoDB ReplicaSet với Docker là một cách hiệu quả để xây dựng hệ thống cơ sở dữ liệu mạnh mẽ, đảm bảo tính sẵn sàng cao và khả năng chịu lỗi. Dưới đây là các bước chi tiết từ kinh nghiệm thực tế mà mình muốn chia sẽ. 😃)) Chả là hôm trước mình có 1 dự án NestJS + Prisma + Mongo. Prisma nó yêu cầu phải dùng ReplicaSet mới chịu.

Các bước triển khai

  1. Tạo cấu trúc thư mục

    Tạo các thư mục cần thiết cho dữ liệu và cấu hình.

    mkdir -p mongodb-replicaset/data/{primary,secondary1,secondary2}
    cd mongodb-replicaset
    
    
  2. Tạo keyfile xác thực giữa các thành viên ReplicaSet Keyfile đảm bảo tính bảo mật giữa các node.

    mkdir -p mongodb-replicaset/keyfile
    openssl rand -base64 756 > keyfile/mongodb-keyfile
    chmod 400 keyfile/mongodb-keyfile
    sudo chown 999:999 keyfile/mongodb-keyfile
    
    
  3. Tạo file Docker Compose File cấu hình Docker Compose giúp khởi tạo môi trường ReplicaSet.

    version: '3.8'
    
    services:
      mongo-primary:
        image: mongo:latest
        container_name: mongo-primary
        command: mongod --bind_ip_all --replSet rs0 --port 27017 --auth --keyFile /data/keyfile/mongodb-keyfile
        ports:
          - "27017:27017"
        volumes:
          - ./data/primary:/data/db
          - ./keyfile:/data/keyfile
        networks:
          - mongo-network
        restart: always
    
      mongo-secondary-1:
        image: mongo:latest
        container_name: mongo-secondary-1
        command: mongod --bind_ip_all --replSet rs0 --port 27017 --auth --keyFile /data/keyfile/mongodb-keyfile
        ports:
          - "27018:27017"
        volumes:
          - ./data/secondary1:/data/db
          - ./keyfile:/data/keyfile
        networks:
          - mongo-network
        restart: always
        depends_on:
          - mongo-primary
    
      mongo-secondary-2:
        image: mongo:latest
        container_name: mongo-secondary-2
        command: mongod --bind_ip_all --replSet rs0 --port 27017 --auth --keyFile /data/keyfile/mongodb-keyfile
        ports:
          - "27019:27017"
        volumes:
          - ./data/secondary2:/data/db
          - ./keyfile:/data/keyfile
        networks:
          - mongo-network
        restart: always
        depends_on:
          - mongo-primary
    
    networks:
      mongo-network:
        driver: bridge
    
    
  4. Khởi chạy Docker Compose

    docker-compose up -d
    
    
  5. Cấu hình ReplicaSet

    Kết nối tới container chính và khởi tạo ReplicaSet:

    docker exec -it mongo-primary mongosh
    rs.initiate({
      _id: "rs0",
      members: [
        { _id: 0, host: "mongo-primary:27017", priority: 2 },
        { _id: 1, host: "mongo-secondary-1:27017", priority: 1 },
        { _id: 2, host: "mongo-secondary-2:27017", priority: 1 }
      ]
    });
    
    
  6. Tạo người dùng quản trị

    use admin;
    db.createUser({
      user: "adminUser",
      pwd: "securePassword",
      roles: [ { role: "root", db: "admin" } ]
    });
    
    
  7. String kết nối với xác thực Đối với xài local

    mongodb://appUser:appPassword@mongo-primary:27017,mongo-secondary-1:27017,mongo-secondary-2:27017/myApp?replicaSet=rs0&authSource=myApp
    

    Khi bạn public ip và kết nối từ bên ngoài

    mongodb://appUser:appPassword@your_vps_ip:27017,your_vps_ip:27018,your_vps_ip:27019/myApp?replicaSet=rs0&authSource=myApp
    

Kết luận

Với các bước trên, bạn có thể triển khai một MongoDB ReplicaSet với Docker một cách dễ dàng và hiệu quả. Đừng quên kiểm tra kết nối và xem xét các cấu hình bảo mật bổ sung nếu cần


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí