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.listUbuntu 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.14Khởi động MongoDB
sudo systemctl start mongodKiểm tra trạng thái sau khi cài đặt
sudo systemctl status mongodCà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
mongoTiế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/gcallsopsChạy file dc-mongo0.yml
cd devops-prod
docker-compose -f dc-mongo0.yml up -dKiểm tra trạng thái container sau khi cài đặt
docker ps
docker logs mongo0 --tail=100 -fPhầ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 -dSau 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
- Tham khảo Hướng dẫn setup và sử dụng MongoDB Atlas
3.1. Tạo database
- Truy cập https://www.mongodb.com/atlas/database
- Chọn Create Project nếu chưa có Project.
- Chọn Prọject rồi chọn Create Database.


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

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

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

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.

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:

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 masterCấu hình s3cmd với thông tin digital ocean
s3cmd --configureCấ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/