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
-
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
-
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
-
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
-
Khởi chạy Docker Compose
docker-compose up -d
-
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 } ] });
-
Tạo người dùng quản trị
use admin; db.createUser({ user: "adminUser", pwd: "securePassword", roles: [ { role: "root", db: "admin" } ] });
-
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