- vừa được xem lúc

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

0 0 1

Người đăng: Võ Tấn Đạt

Theo Viblo Asia

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

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đề thi interview DevOps ở Châu Âu

Well. Chào mọi người, mình là Rice - một DevOps Engineers ở đâu đó tại Châu Âu.

0 0 96

- vừa được xem lúc

In calculus, love also means zero.

Mình nhớ hồi năm 2 đại học, thầy giáo môn calculus, trong một giây phút ngẫu hứng, đã đưa ra cái definition này. Lúc đấy mình cũng không nghĩ gì nhiều.

0 0 68

- vừa được xem lúc

Chuyện thay đổi

Thay đổi là một thứ gì đó luôn luôn đáng sợ. Cách đây vài tháng mình có duyên đi làm cho một banking solution tên là X.

0 0 54

- vừa được xem lúc

Pet vs Cattle - Thú cưng và gia súc

Khái niệm. Pets vs Cattle là một khái niệm cơ bản của DevOps. Bài viết này sẽ nói về sự phát triển của các mô hình dịch vụ từ cốt lõi Pets and Cattle. 1.

0 0 39

- vừa được xem lúc

Git workflow được Google và Facebook sử dụng có gì hay ho

Với developer thì Git hẳn là công cụ rất quen thuộc và không thể thiếu rồi. Thế nhưng có mấy ai thực sự hiểu được Git.

0 0 93

- vừa được xem lúc

Kubernetes - Học cách sử dụng Kubernetes Namespace cơ bản

Namespace trong Kubernetes là gì. Tại sao nên sử dụng namespace.

0 0 117