1. Xác định yêu cầu phần cứng cho PostgreSQL Multi-Tenant
Để triển khai kiến trúc Multi-Tenant với PostgreSQL, đặc biệt là mô hình Database riêng (Silo) hoặc Schema riêng (Shared) với số lượng Tenant lớn, phần cứng cần đáp ứng các chuẩn tối thiểu sau để đảm bảo hiệu năng và độ ổn định.
CPU: Tối thiểu 4 nhân vật lý (Physical Cores). PostgreSQL là đơn luồng (single-threaded) cho nhiều loại query, do đó cần nhiều nhân để xử lý đồng thời nhiều Tenant. Ưu tiên CPU có tốc độ xung nhịp cao (2.5GHz+) hơn là số nhân ảo.
RAM: Tối thiểu 16GB. PostgreSQL cần RAM để cache dữ liệu (shared_buffers) và thực hiện các phép tính Join/Sort phức tạp. Với mô hình Multi-Tenant, mỗi Tenant sẽ chiếm một phần RAM riêng, nên cần dư lượng lớn để tránh OOM (Out Of Memory).
Disk: Tối thiểu 200GB SSD NVMe. Tuyệt đối không dùng HDD cho Database production. IOPS (Input/Output Operations Per Second) là yếu tố sống còn. Cần phân vùng riêng biệt cho `/var/lib/postgresql` để tối ưu hóa I/O.
Verify yêu cầu: Kiểm tra cấu hình hiện tại của máy chủ.
lscpu | grep "Core(s)"
free -h
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
Kết quả mong đợi: Thấy số nhân CPU >= 4, RAM >= 16G, và ổ cứng là loại NVMe/SSD với dung lượng đủ lớn.
2. Tải và kiểm tra tính toàn vẹn ISO Ubuntu 24.04 LTS
Bước đầu tiên là đảm bảo bản ISO Ubuntu Server 24.04 LTS được tải về không bị hỏng hoặc bị giả mạo. Chúng ta sẽ tải từ mirror chính thức và kiểm tra checksum SHA256.
Tải ISO Ubuntu Server 24.04 LTS từ nguồn chính thức của Canonical.
wget https://releases.ubuntu.com/24.04/ubuntu-24.04.1-live-server-amd64.iso
Kết quả mong đợi: File iso được tải về thành công, kích thước khoảng 1.4GB - 1.5GB.
Tải file checksum SHA256 đi kèm để đối chiếu.
wget https://releases.ubuntu.com/24.04/SHA256SUMS
Kết quả mong đợi: File SHA256SUMS được tải về.
Kiểm tra tính toàn vẹn của file ISO bằng cách so sánh checksum.
sha256sum -c SHA256SUMS | grep ubuntu-24.04.1-live-server-amd64.iso
Kết quả mong đợi: Xuất hiện dòng `ubuntu-24.04.1-live-server-amd64.iso: OK`. Nếu thấy `FAILED`, file ISO đã bị hỏng, cần tải lại.
3. Cài đặt Ubuntu Server 24.04 với phân vùng tối ưu cho Database
Trong quá trình cài đặt Ubuntu Server, bước phân vùng (Storage Configuration) là quan trọng nhất cho Database. Chúng ta sẽ sử dụng phân vùng thủ công (Custom) để tách biệt dữ liệu hệ thống và dữ liệu Database.
Khởi động cài đặt từ ISO, chọn ngôn ngữ và bàn phím. Đến bước "Storage Configuration", chọn "Custom" (thủ công).
Tạo các phân vùng theo cấu trúc tối ưu sau:
- /boot/efi: 1GiB, loại FAT32, mount point /boot/efi (bắt buộc cho UEFI).
- / (Root): 30GiB, loại ext4, mount point /. Chứa hệ điều hành và các package.
- swap: 16GiB, loại swap, mount point none. Đảm bảo RAM ảo đủ cho PostgreSQL khi cần.
- /var/lib/postgresql: Dành toàn bộ dung lượng còn lại, loại ext4, mount point /var/lib/postgresql. Đây là nơi lưu trữ dữ liệu thực tế của DB.
Cấu hình phân vùng cụ thể trên giao diện cài đặt (LVM hoặc Physical Partition đều được, nhưng khuyến nghị Physical Partition cho đơn giản hóa I/O):
# Ghi chú: Đây là cấu hình logic cần thực hiện trên màn hình cài đặt
# Partition 1: 1G, FAT32, /boot/efi
# Partition 2: 30G, ext4, /
# Partition 3: 16G, swap, none
# Partition 4: Remaining, ext4, /var/lib/postgresql
Kết quả mong đợi: Bảng phân vùng hiển thị đúng 4 vùng như mô tả, vùng cuối cùng có mount point là `/var/lib/postgresql`.
Trong bước "Profile information", đặt tên User là `admin` (hoặc tên quản trị viên), tạo SSH key cho phép login ngay lập tức.
Hoàn tất cài đặt và khởi động lại.
Verify phân vùng sau khi boot vào hệ thống mới.
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT
Kết quả mong đợi: Thấy partition có mount point `/var/lib/postgresql` với dung lượng lớn (tổng dung lượng trừ đi 47GB cho root và swap).
4. Cấu hình mạng và thiết lập Firewall UFW
Sau khi boot vào hệ thống, cần cố định IP Address để Database hoạt động ổn định và cấu hình Firewall UFW để chỉ mở các cổng cần thiết.
Cấu hình mạng tĩnh (Static IP) bằng Netplan. Giả sử IP mong muốn là `192.168.1.100`, Gateway là `192.168.1.1`, DNS là `8.8.8.8`. Sửa file cấu hình Netplan.
sudo nano /etc/netplan/00-installer-config.yaml
Nội dung file cấu hình hoàn chỉnh:
network:
version: 2
ethernets:
enp0s3:
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
Kết quả mong đợi: File được lưu. Lưu ý: Tên interface `enp0s3` có thể khác tùy phần cứng, dùng lệnh `ip link` để kiểm tra tên interface thực tế.
Áp dụng cấu hình mạng.
sudo netplan apply
Kết quả mong đợi: Không có lỗi (no error), kết nối mạng hoạt động với IP tĩnh mới.
Kiểm tra IP đã gán đúng chưa.
ip addr show
Kết quả mong đợi: Interface mạng hiển thị IP `192.168.1.100`.
Cài đặt và kích hoạt UFW (Uncomplicated Firewall).
sudo ufw enable
Kết quả mong đợi: Thông báo "Firewall is active and enabled on system startup".
Cho phép SSH (Port 22) để không bị khóa ngoài khi cấu hình firewall.
sudo ufw allow 22/tcp
Kết quả mong đợi: "Rules updated".
Cho phép PostgreSQL (Port 5432) chỉ từ subnet nội bộ (ví dụ 192.168.1.0/24) hoặc từ IP ứng dụng cụ thể. Ở đây mở cho toàn bộ subnet nội bộ để test.
sudo ufw allow from 192.168.1.0/24 to any port 5432 proto tcp
Kết quả mong đợi: "Rules updated".
Verify trạng thái UFW.
sudo ufw status verbose
Kết quả mong đợi: Thấy 2 rule: Allow 22/tcp và Allow 5432/tcp từ subnet nội bộ. Policy Incoming: Deny, Policy Outgoing: Allow.
5. Cập nhật hệ thống và cài đặt công cụ cơ bản
Trước khi cài đặt PostgreSQL, cần cập nhật toàn bộ hệ thống lên phiên bản mới nhất và cài đặt các gói công cụ hỗ trợ quản trị (build-essential, vim, htop, curl).
Cập nhật bảng gói phần mềm và nâng cấp hệ thống.
sudo apt update && sudo apt upgrade -y
Kết quả mong đợi: Quá trình cập nhật hoàn tất, không có lỗi, hệ thống ở trạng thái mới nhất của Ubuntu 24.04.
Cài đặt các gói công cụ thiết yếu cho Sysadmin và Developer.
sudo apt install -y vim curl wget git htop net-tools build-essential libpq-dev python3-pip
Kết quả mong đợi: Các gói phần mềm được cài đặt thành công.
Cài đặt công cụ giám sát cơ bản (bmon hoặc iftop) để theo dõi mạng sau này.
sudo apt install -y iftop
Kết quả mong đợi: Gói iftop được cài đặt.
Verify các công cụ đã cài đặt.
which vim curl htop iftop
Kết quả mong đợi: Trả về đường dẫn tuyệt đối của từng lệnh (ví dụ: /usr/bin/vim).
Khởi động lại server để đảm bảo tất cả các thay đổi (kernel update, network config) có hiệu lực hoàn toàn.
sudo reboot
Kết quả mong đợi: Server khởi động lại và bạn có thể đăng nhập lại qua SSH với IP tĩnh đã cấu hình.
Điều hướng series:
Mục lục: Series: Triển khai Database Multi-Tenant với PostgreSQL và Ubuntu 24.04
Phần 2: Cài đặt và cấu hình PostgreSQL 16 trên Ubuntu 24.04 »