Việc duy trì và quản lý cơ sở dữ liệu là một phần quan trọng của việc đảm bảo sự ổn định và an toàn cho hạ tầng công nghệ của một tổ chức. Trong bối cảnh hiện nay, MongoDB đã trở thành một trong những hệ thống quản lý cơ sở dữ liệu phổ biến, cung cấp khả năng linh hoạt và mở rộng cho các ứng dụng và dịch vụ trực tuyến. Tuy nhiên, việc triển khai và duy trì MongoDB đòi hỏi sự chú ý đặc biệt đối với các yếu tố như giám sát và sao lưu. Điều này không chỉ giúp đảm bảo hiệu suất của cơ sở dữ liệu mà còn cung cấp khả năng phục hồi dữ liệu trong trường hợp có sự cố xảy ra. Trong hướng dẫn này, tôi sẽ tập trung vào việc cài đặt hệ thống giám sát và sao lưu cho MongoDB trên nền tảng AWS (Amazon Web Services). AWS không chỉ cung cấp một môi trường đám mây linh hoạt mà còn cung cấp các dịch vụ tiện ích để triển khai và quản lý các ứng dụng cơ sở dữ liệu.
1. Tạo và cài đặt MongoDB trên AWS EC2 Instance
1.1 Các bước thiết lập MongoDB cơ bản
-
Khởi tạo EC2 Instance: Đăng nhập vào AWS Management Console, chọn EC2 và tạo một instance mới. Chọn AMI phù hợp (ví dụ: Amazon Linux 2023) và kích thước instance thích hợp cho nhu cầu của bạn.
-
Cấu hình Security Group: Tạo hoặc sửa đổi Security Group để cho phép truy cập vào cổng MongoDB (mặc định là 27017) từ địa chỉ IP cần thiết.
-
Cài đặt MongoDB: Sử dụng terminal hoặc SSH để kết nối vào instance EC2. Tiến hành cài đặt MongoDB theo như hướng dẫn trên trang chủ của MongoDB
-
Tạo một user cho quá nhằm mục đích quá trình Monitor sau này:
Bắt đầu bằng cách kết nối với phiên bản MongoDB của bạn bằng mongosh:
mongosh
Tạo một administrator account cho việc giám sát, chuyến sang database
admin
:use admin
Tiếp theo, tạo user với role
clusterMonitor
:db.createUser({user: "monitor",pwd: " monitoring",roles: [{ role: "clusterMonitor", db: "admin" },{ role: "read", db: "local" }]})
Cuối cùng thoát ra ngoài
exit()
1.2 Mở đường ra Internet
Để thuận tiện cho bài lab, có thể mở đường truy cập vào DB thông qua Internet, thực hiện các bước sau:
- Cập nhật cấu hình MongoDB:
sudo nano /etc/mongod.conf
, tìm đến đoạn#network interface
và cập nhậtbindIp
thành0.0.0.0
vàport
: là27024
. Sau đó lưu file và chạy lệnhsudo systemctl restart mongod
để khởi động lại MongoDB với cấu hình mới. - Mở tệp cấu hình MongoDB bằng lệnh sau:
sudo nano /etc/mongod.conf
- Tìm đến phần cấu hình
#network interface
. - Cập nhật bindIp thành 0.0.0.0 để MongoDB lắng nghe kết nối từ mọi địa chỉ IP:
bindIp: 0.0.0.0
- Tìm đến phần
port
và cập nhật giá trị cổng thành27024
(hoặc bất kỳ cổng nào bạn muốn sử dụng):port: 27024
- Lưu tệp cấu hình bằng cách nhấn Ctrl + O, sau đó nhấn Enter. Tiếp theo, nhấn Ctrl + X để thoát.
- Khởi động lại dịch vụ MongoDB để áp dụng cấu hình mới:
Sau khi bạn hoàn thành các bước này, MongoDB sẽ được cấu hình để lắng nghe kết nối từ mọi địa chỉ IP trên máy chủ và trên cổng 27024. Điều này cho phép các ứng dụng hoặc máy tính từ bên ngoài kết nối đến cơ sở dữ liệu MongoDB của bạn qua cổng 27024. Hãy nhớ rằng việc mở cổng và cho phép kết nối từ bên ngoài cũng tăng nguy cơ bảo mật, vì vậy hãy áp dụng các biện pháp bảo mật phù hợp.sudo systemctl restart mongod
- Thêm rule
Inbound
choSecurity Groups
để mở kết nối ra Internet
1.3 Cài đặt MongoDB Exporter
- Tải source MongoDB Exporter về EC2, tôi chọn version cao nhất tại thời điểm thực hiện bài viết là là
v0.40.0
:wget https://github.com/percona/mongodb_exporter/releases/download/v0.40.0/mongodb_exporter-0.40.0.linux-amd64.tar.gz
- Tiếp theo, giải nén kho lưu trữ đã tải xuống vào thư mục hiện tại:
tar xvzf mongodb_exporter-0.40.0.linux-amd64.tar.gz
- Di chuyển binary file
mongodb_exporter
sangusr/local/bin/
:sudo mv mongodb_exporter /usr/local/bin/
- Đến /lib/systemd/system và tạo tệp service cho exporter:
cd /lib/systemd/system/ sudo nano mongodb_exporter.service
- Điền cấu hình sau, nhớ đưa 2 cờ
collect-all
vàdiscovering-mode
để exporter lấy được toàn bộ metric từ DB, ngoải ra bạn có thể lưumongodb.uri
bằng ENV :[Unit] Description=Prometheus MongoDB Exporter Documentation=https://github.com/percona/mongodb_exporter After=network.target [Service] Type=simple User=ec2-user EnvironmentFile=-/etc/default/mongodb_exporter ExecStart=/usr/local/bin/mongodb_exporter --mongodb.uri=mongodb://monitor:monitoring@0.0.0.0:27024/admin --collect-all --discovering-mode SyslogIdentifier=mongodb_exporter Restart=always [Install] WantedBy=multi-user.target
- Chạy service:
sudo systemctl daemon-reload sudo systemctl start mongodb_exporter.service sudo systemctl status mongodb_exporter.service
2 Cài đặt Grafana và Prometheus phục vụ giám sát MongoDB
2.1 Các bước chuẩn bị
-
Tạo thêm một EC2 phục vụ mục tiêu giám sát
-
Để phục vụ triển khai nhanh bài lab này, tôi sử dụng docker, đầu tiên connect vào EC2 này và cài git, mục đích là để lấy các file phục vụ cho quá trình cài đặt.
sudo yum install git -y
-
Tiếp theo cài đặt docker, dùng lệnh sau:
sudo yum install docker -y sudo service docker start # make docker autostart sudo chkconfig docker on
-
Cài Docker-Compose
# docker-compose (latest version) sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose # Fix permissions after download sudo chmod +x /usr/local/bin/docker-compose # Verify success docker-compose version
2.2 Sử dụng docker cài đặt hệ thống giám sát MongoDB
-
Sử dụng Docker Compose, bạn cần sử dụng một tệp tin được gọi là docker-compose.yml để mô tả cấu hình của các dịch vụ, mạng, và các thiết lập khác liên quan đến việc triển khai ứng dụng. Điều này giúp quản lý và triển khai một hoặc nhiều container một cách dễ dàng.
git clone https://github.com/anhuv/aws-mongodb-monitor-backup.git cd monitor
Cấu trúc thư mục
monitor
như sau: Nôi dung filecompose.yml
:services: prometheus: image: prom/prometheus container_name: prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' ports: - 9090:9090 restart: unless-stopped volumes: - ./prometheus:/etc/prometheus - prom_data:/prometheus grafana: image: grafana/grafana container_name: grafana ports: - 3000:3000 restart: unless-stopped environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=grafana volumes: - ./grafana/datasources:/etc/grafana/provisioning/datasources - ./grafana/dashboards:/etc/grafana/provisioning/dashboards volumes: prom_data:
-
Cập nhật địa chỉ
MongoDB Exporter
choPrometheus
, thay thếMONGODB_EXPORTER_IP
bằng ip address của EC2 cài đặt Exporter, do hai EC2 đặt trong cùng một VPC nên có thể dùng private ip, dùng lệnh:sudo sed -i 's/MONGODB_EXPORTER_IP/172.31.90.42/g' prometheus/prometheus.yml
-
Cuối cùng gõ lệnh:
docker-compose up -d
docker-compose
: Chương trình chính để quản lý và chạy các container dựa trên cấu hình được định nghĩa trong tệp compose.yml.up
: Lệnh để triển khai và chạy các dịch vụ. Và-d
là tham số để chạy container ở chế độ nền (detached mode), có nghĩa là các container sẽ chạy ẩn danh và không chiếm lấy cửa sổ hiện tại của bạn. Bạn có thể tiếp tục sử dụng cửa sổ terminal khác mà không bị chặn bởi quá trình chạy container. -
Đừng quên cập nhập thêm rule
Inbound
choSecurity Groups
để mở kết nối ra Internet.
2.3 Kết quả giám sát MongoDB
Đăng nhập từ brower vào địa chỉ của EC2 cài đặt grafana, nhập thông tin username, password như nội dung trong file docker compose. Kết quả của quá trình giám sát MongoDB là thông tin và dữ liệu được thu thập từ hệ thống MongoDB trong quá trình theo dõi và kiểm tra. Đây bao gồm các thống kê về hiệu suất, tài nguyên sử dụng, tình trạng hoạt động của cơ sở dữ liệu, số lượng truy vấn được thực thi, thời gian phản hồi, và các thông tin liên quan khác. Các kết quả này thường được tổ chức và hiển thị thông qua các công cụ giám sát và báo cáo, giúp quản trị viên và nhà phát triển hiểu rõ về hoạt động của MongoDB, phát hiện và giải quyết các vấn đề hiệu suất và hoạt động, và cải thiện hiệu suất và sự ổn định của hệ thống.
3 Sử dụng AWS Lambda để sao lưu cho MongoDB
3.1 Các bước chuẩn bị
- Tạo Bucket để lưu trữ các phiên bản sao lưu:
- Chọn dịch vụ S3 (Simple Storage Service)
- Nhấp vào nút "Create bucket" để bắt đầu quy trình tạo bucket mới.
- Đặt tên cho bucket của bạn, hãy chọn một tên duy nhất mà bạn có thể nhớ dễ dàng.
- Tạo một IAM (Identity and Access Management) Role cho AWS Lambda để cho phép Lambda ghi dữ liệu vào S3, cần thực hiện các bước:
- Vào phần điều khiển Amazon IAM.
- Trong thanh điều hướng bên trái, chọn
Roles
. - Nhấp vào nút
Create role
để bắt đầu quy trình tạo role mới. - Trong cửa sổ "Select type of trusted entity", chọn
AWS service
và sau đó chọnLambda
trong danh sách các dịch vụ AWS. Đối với mục đích trong bài viết này, bạn có thể chọn policy có sẵn nhưAmazonS3FullAccess
nếu bạn muốn Lambda có quyền truy cập đầy đủ vào S3, hoặc bạn có thể tạo một policy tùy chỉnh với các quyền cụ thể bạn cần.
3.2 Tạo AWS Lambda phục vụ quá trình sao lưu dữ liệu
- Mở AWS Lambda Console
- Trong giao diện Lambda Console, nhấp vào nút "Create function" để bắt đầu quy trình tạo Lambda Function mới.
- Chọn
Author from Scratch
- Cấu hình Lambda Function: đặt tên cho Lambda function của bạn, chọn runtime
Python 3.10
, chọn architecturex86
. - Gán role ghi dữ liệu vào S3 đã tạo trước đó cho Lambda function.
- Dán mã nguồn vào vào trình soạn thảo code trên web AWS, (bạn có thể upload file zip đính kèm sau demo.zip)
- Cấu hình trigger cho lambda funtion, trong bài lab này sẽ lập lịch cho AWS Lambda functions bằng EventBridge, tần suất sao lưu cơ sở dữ liệu phụ thuộc vào quy mô hệ thống, yêu cầu kinh doanh, và mức độ quan trọng của dữ liệu. Hệ thống quan trọng cần sao lưu hàng ngày hoặc thậm chí hàng giờ, trong khi hệ thống ít quan trọng có thể thực hiện sao lưu hàng tuần hoặc hàng tháng. Tôi lấy tạm 5 phút để nhanh có kết quả demo.
- Trong trang cấu hình Lambda, bạn có thể thiết lập thời gian chạy tối đa cho Lambda function bằng cách di chuyển xuống phần
Configuration
. Ở đây, bạn sẽ thấy mụcTimeout
với một giá trị mặc định. Nhấn vào ôEdit
bên cạnh nó để thay đổi thời gian chạy tối đa theo ý muốn của bạn. Timeout được tính bằng giây và là thời gian tối đa mà Lambda function được phép chạy trước khi bị hủy bỏ. - Trong trang cấu hình Lambda, thêm các biến môi trường bằng cách di chuyển xuống phần "Environment variables" trong trình chỉnh sửa Lambda function. Nhấn vào "Edit" để thêm hoặc sửa đổi các biến môi trường. Bạn có thể thêm các cặp key-value tùy ý để đặt các biến môi trường cho Lambda function của bạn. Biến môi trường có thể được sử dụng để lưu trữ các thông tin như cấu hình, giá trị cố định, hay bất kỳ điều gì mà Lambda function cần sử dụng.
- Kiểm tra và triển khai: Sau khi hoàn thành cấu hình, bạn có thể xem lại tất cả các thông số và nhấn nút
Create function
hoặcDeploy
để tạo Lambda function.
3.3 Kết quả sao lưu dữ liệu
Sau khi triển khai Lamda function, dữ liệu của bạn sẽ được sao lưu định kỳ và tự động vào Amazon S3, cung cấp một lớp bảo vệ đáng tin cậy cho dữ liệu của bạn.