Skip to main content
Quang Liem
Huỳnh Minh
💬
0 discussions

Hướng dẫn cài đặt và cấu hình MongoDB

I. Điều kiện tiên quyết

  • OS: Ubuntu 18.04 LTS, Ubuntu 20.04 LTS
  • Docker
  • Quyền truy cập vào Gcalls Devops
  • MongoDB

II. Đối tượng đọc

  • Customer Success Engineer
  • Database admin

III. Cài đặt và cấu hình

1. Cài đặt MongoDB

1.1. Stand alone

  • Nhập Mongo GPG Key vào package management system

    curl -fsSL https://www.mongodb.org/../static/pgp/server-4.4.asc | sudo apt-key add -
    • Ubuntu 18.04 LTS

      echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
    • Ubuntu 20.04 LTS

      echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
  • Cài đặt MongoDB v4.4

    sudo apt-get update
    sudo apt-get install -y mongodb-org=4.4.14 mongodb-org-server=4.4.14 mongodb-org-shell=4.4.14 mongodb-org-mongos=4.4.14 mongodb-org-tools=4.4.14
  • Khởi động MongoDB

    sudo systemctl start mongod
  • Kiểm tra trạng thái sau khi cài đặt

    sudo systemctl status mongod
  • Cài đặt tự động khởi đông cho Mongodb

    sudo systemctl start mongod.service

1.2. Cấu hình replica set trong mongodb

  • Sau khi cài đặt mongo node đầu tiên, để setup replica set cần cài đặt tương tự 2n mongo node.

  • Lần lượt chạy lệnh dưới đây cho tất cả các node để cấu hình tên replica set

    mongod --replSet "{rs0}" --bind_ip localhost,<hostname(s)|ip address(es)>
  • Sau khi hoàn thành cài đặt access vào mongo primary để config replica bằng lệnh

    mongo
  • Tiếp theo chaỵ lệnh

    rs.initiate()
  • Add lần lượt các node còn lại vào replica set:

    rs.add('localhost,<hostname(s)|ip address(es)>:port')
    rs.add('localhost,<hostname(s)|ip address(es)>:port')
    ...
  • Access vào các node còn lại và run rs.secondaryOk() để hoàn thành cấu hình replica set.

  • Set up replica với authentication.

    • Tạo file key để authen giữa các node trong replica.

    • Access primary node để tạo mới user.

    • Tạo user admin

      use admin db.createUser({ user: {username}, pwd:{password}, roles: ["userAdminAnyDatabase"] })
  • Restart lại 3 node với --keyFile để yêu cầu authen.

    mongod --replSet "{rs0}" --keyFile mongodb.key --bind_ip localhost,<hostname(s)|ip address(es)>

2. Cài đặt MongoDB với Docker

2.1. Stand alone

  • Clone source Gcalls Devops

    cd ~
    git clone -b release https://gitlab.com/gcalls/secrets/gcallsops
  • Chạy file dc-mongo0.yml

    cd devops-prod
    docker-compose -f dc-mongo0.yml up -d
  • Kiểm tra trạng thái container sau khi cài đặt

    docker ps
    docker logs mongo0 --tail=100 -f
  • Phần limit logging cho docker được cấu hình mặc định trong file dc-mongo, nếu có thay đổi có thể chỉnh sửa các thông số dưới đây

    logging:
    driver: "json-file"
    options:
    max-size: "500m"
    max-file: "3"

2.2. Cấu hình replica set trong mongodb

  • Sau khi cài đặt mongo0, tiếp tục cài đặt 2 node mongo còn lại

    docker-compose -f dc-mongo1.yml up -d
    docker-compose -f dc-mongo2.yml up -d
  • Sau khi hoàn thành cài đặt access vào mongo primary để config replica bằng lệnh

    docker exec -it mongo0 sh
    mongo -u {username} -p {password}
  • Tiếp theo chaỵ lệnh

    rs.initiate()
  • Add lần lượt các node còn lại vào replica set:

    rs.add('localhost,<hostname(s)|ip address(es)>:port')
    rs.add('localhost,<hostname(s)|ip address(es)>:port')
    ...
  • Access vào các node còn lại và run rs.secondaryOk() để hoàn thành cấu hình replica set.

3. MongoDB Atlas

3.1. Tạo database

MongoDB Atlas

MongoDB Atlas

3.2. Cấu hình và kết nối

a. Cấu hình user
  • Chọn Database Access trên thanh menu bên trái.
  • Bấm ADD NEW DATABASE USER và chọn quyền readWriteAnyDatabase@admin

MongoDB Atlas

b. Cấu hình network
  • Chọn Network Access trên thanh menu bên trái.

MongoDB Atlas

  • Bấm ADD IP ADDRESS để thêm địa chjỉ IP cần whitelist để truy cập ínstance MongoDB Atlas này.

MongoDB Atlas

c. Kết nối
  • Quay lại trang chủ chính của Database.
  • Ở mục DEPLOYMENT, chọn Database.
  • Màn hình sẽ hiện như hình sau. Chọn Connect.
  • Copy connection string. Nó sẽ có định dạng như sau mongodb+srv://<username>:<password><@MONGODB_ATLAS_CLUSTER_URL>
  • Lưu ý: Tùy theo các phiên bản MongoDB khác nhau, sẽ có nhiều cách kết nối klhác nhau.

MongoDB Atlas

c.1. Mongo CLI
  • Nếu lệnh kết nối tới mongo có bật auth (có dùng user và mật khâu) là:
mongo --username <username> --password <password>
  • Thì lệnh kết nối tới 1 cluster MongoDB nguồn ở ngoài là:
mongo --host <connection_string> --username <username> --password <password>
  • hoặc
mongo "mongodb://<username>:<password>@<MONGODB_SERVER_IP>/"
  • Và lệnh kết nối tới MongoDB Atlas là:
mongo "mongodb+srv://<username>:<password>@<MONGODB_ATLAS_CLUSTER_URL>/"
  • Nếu kết nối thành công, màn hình có thể hiển thị như sau:

MongoDB Atlas

c.2. NodeJS hoặc MongoDB Compass
  • Connection string cho NodeJS và MongoDB Compass cũng chính là connection string copy từ MongoDB Atlas.
  • Bỏ connection string sau vào .env hoặc URI của MongoDB Compass
mongodb+srv://<username>:<password>@MONGODB_ATLAS_CLUSTER_URL/

4. Backup and Restore

4.1. Backup

  • Backup atlas (backup data cho mongo atlas, mỗi db chạy 1 lệnh), đối với atlas cần whitelist ip tại máy chạy lệnh backup có thể ngay trên vm cần restore hoặc trên máy local

    mongodump --forceTableScan --uri "mongodb+srv://{username}:{password}@{url-altas}/{db-name}?authSource=admin" --gzip --out {thư mục output}
  • Backup mongo docker (thư mục /usr/backups được map mới thưc mục backup trên vm, xem trong file docker-compose thư mục backup map ra thư mục nào bên ngoài), ssh vào vm mongo cần backup

    docker exec mongo0 mongodump -u {username} -p {password} --authenticationDatabase {admin} --gzip --out /usr/backups
    • Đối với mongodb cài đặt trực tiếp trên server, chạy lệnh tương tự:

      mongodump -u {username} -p {password} --authenticationDatabase {admin} --gzip --out ./backups

4.2. Restore

  • Restore data vào atlas

    mongorestore --uri "mongodb+srv://{username}:{password}@{url-altas}" --gzip -d {db name} {folder backup của db name đó}
  • Restore data vào vm

    mongorestore -u {username} -p {password} --authenticationDatabase {admin} --gzip -d {db name} {folder backup của db name đó}

4.3. Cấu hình Backup Cron

  • Checkout source devops về master

    cd ~
    cd devops-prod
    git checkout master
  • Cấu hình s3cmd với thông tin digital ocean

    s3cmd --configure
  • Cấu hình crontab

    crontab -e
    30 23 * * * /home/{user}/devops-prod/backups.sh >> /home/{user}/devops-prod/backups.log 2>&1

5. Cấu hình với Gcalls

  • user-service (.env):

    • MONGO_HOST
    • MONGO_REPL
    • MONGO_USER
    • MONGO_PWD
    • DB_NAME
  • customer-service (.env):

    • MONGO_HOST
    • MONGO_REPL
    • MONGO_USER
    • MONGO_PWD
    • DB_NAME
  • third-party-service (.env):

    • MONGO_HOST
    • MONGO_REPL
    • MONGO_USER
    • MONGO_PWD
    • DB_NAME
  • record-service (.env):

    • MONGO_HOST
    • MONGO_REPL
    • MONGO_USER
    • MONGO_PWD
    • DB_NAME
  • access-service (.env):

    • MONGO_URL
    • MONGO_REPL
  • filter-service (.env):

    • MONGO_URL

IV. Kết Luận

Trong hướng dẫn này bạn có thể cài đặt và cấu hình MongoDB với Gcalls. Nếu có bất cứ câu hỏi nào có thể gửi issue vào form bên dưới.

Link tham khảo cấu hình s3cmd: https://docs.digitalocean.com/products/spaces/reference/s3cmd/