Yêu cầu phần cứng tối thiểu cho Apache Pinot
Phân tích tài nguyên CPU và RAM
Apache Pinot hoạt động dựa trên mô hình in-memory và disk-based, yêu cầu RAM lớn để cache dữ liệu nóng và CPU mạnh để xử lý query song song. Đối với môi trường sản xuất nhỏ hoặc môi trường Dev/Test, cấu hình tối thiểu cho mỗi node Controller và Server là 4 vCPU và 16GB RAM.
Tuy nhiên, để đảm bảo hiệu năng ổn định và tránh tình trạng OOM (Out Of Memory) khi thực hiện các phép join phức tạp hoặc ingestion từ Kafka, khuyến nghị cấu hình 8 vCPU và 32GB RAM cho mỗi node. Broker cần ít tài nguyên hơn, tối thiểu 2 vCPU và 8GB RAM.
Yêu cầu về Disk I/O và Phân vùng
Pinot phụ thuộc rất nhiều vào tốc độ I/O của đĩa cứng. Sử dụng HDD cơ học sẽ gây nghẽn cổ chai nghiêm trọng. Bắt buộc phải sử dụng SSD (NVMe hoặc SATA) cho cả dữ liệu và log.
Cần phân vùng riêng biệt cho hệ thống (root), dữ liệu Pinot (/var/lib/pinot), và log (/var/log/pinot) để dễ dàng quản lý và tránh trường hợp log tràn làm chết hệ thống. Dung lượng tối thiểu cho phân vùng dữ liệu là 500GB, nhưng nên chuẩn bị 1TB trở lên nếu dữ liệu tăng trưởng nhanh.
Verify yêu cầu phần cứng
Sử dụng các lệnh sau để kiểm tra cấu hình hiện tại của server Ubuntu 24.04 trước khi bắt đầu cài đặt.
lscpu | grep "Model name"
free -h
lsblk -o NAME,SIZE,TYPE,FSTYPE
Kết quả mong đợi: CPU có ít nhất 4 nhân vật lý, RAM trống (Available) >= 12GB, và có phân vùng SSD với dung lượng trống >= 500GB.
Cài đặt Ubuntu 24.04 LTS và tối ưu phân vùng
Khởi tạo và cập nhật hệ thống
Trên Ubuntu 24.04, cần cập nhật repository và cài đặt các gói công cụ cơ bản trước khi cấu hình sâu. Điều này đảm bảo hệ thống có các bản vá bảo mật mới nhất và các công cụ quản lý package chuẩn.
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential git curl wget unzip htop iotop
Kết quả mong đợi: Quá trình cập nhật hoàn tất mà không có lỗi, các gói công cụ đã được cài đặt.
Tạo phân vùng dữ liệu và log riêng biệt
Trên một môi trường server ảo (VM) hoặc Cloud, việc tạo phân vùng mới có thể phức tạp. Tuy nhiên, trên Ubuntu 24.04, chúng ta sẽ tạo các thư mục mục đích sử dụng và gắn chúng vào các điểm mount (mount points) riêng biệt nếu có nhiều ổ cứng, hoặc tối ưu hóa thư mục trên cùng một ổ SSD bằng LVM.
Ở đây, giả định chúng ta đang làm việc trên một ổ SSD duy nhất (sda) và cần tạo thư mục chuyên biệt cho Pinot. Chúng ta sẽ tạo thư mục và gán quyền sở hữu cho user pinot (sẽ tạo ở phần sau) ngay từ đầu để tránh lỗi permission.
sudo mkdir -p /var/lib/pinot/data
sudo mkdir -p /var/log/pinot
sudo mkdir -p /opt/pinot
sudo chown -R root:root /var/lib/pinot /var/log/pinot /opt/pinot
Kết quả mong đợi: Các thư mục được tạo thành công, quyền sở hữu thuộc về root, sẵn sàng để gán lại cho user pinot sau khi tạo user.
Tối ưu hóa Swap và Kernel Parameters
Pinot sử dụng nhiều RAM, nhưng JVM cần một lượng swap nhỏ để tránh crash khi có spike tải đột ngột. Tuy nhiên, swap quá lớn sẽ làm giảm hiệu năng do I/O chậm. Cấu hình swap size bằng 50% RAM là hợp lý cho server 32GB RAM (16GB swap).
Đồng thời, cần điều chỉnh các tham số kernel để tăng giới hạn file descriptors (ulimit) vì Pinot mở rất nhiều kết nối mạng và file trong quá trình ingestion và query.
sudo fallocate -l 16G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Kết quả mong đợi: Swap file 16GB được tạo và kích hoạt, được thêm vào /etc/fstab để tự động mount khi khởi động lại.
Cấu hình giới hạn file descriptors (ulimit)
Mặc định Ubuntu giới hạn file descriptors ở 1024, điều này là không đủ cho Pinot Server/Broker khi chạy nhiều thread. Cần tăng con số này lên ít nhất 65536 cho user chạy Pinot.
echo '* soft nofile 65536' | sudo tee /etc/security/limits.d/pinot.conf
echo '* hard nofile 65536' | sudo tee -a /etc/security/limits.d/pinot.conf
Kết quả mong đợi: File cấu hình limits được tạo, hệ thống sẽ áp dụng giới hạn mới sau khi đăng nhập lại hoặc khởi động service.
Verify cấu hình phân vùng và Swap
Để đảm bảo các thay đổi đã (có hiệu lực), hãy chạy các lệnh kiểm tra sau.
swapon --show
ls -ld /var/lib/pinot /var/log/pinot
ulimit -n
Kết quả mong đợi: Swap file hiện trong danh sách, thư mục Pinot tồn tại, và ulimit trả về giá trị 65536.
Cấu hình mạng và Firewall (UFW)
Kích hoạt và cấu hình UFW cơ bản
Ubuntu 24.04 sử dụng UFW (Uncomplicated Firewall) làm giao diện quản lý firewall mặc định. Cần kích hoạt UFW và thiết lập chính sách mặc định là từ chối tất cả kết nối vào (deny incoming), chỉ cho phép SSH để quản trị từ xa.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw enable
Kết quả mong đợi: UFW được kích hoạt, trạng thái là "active", chỉ cho phép kết nối SSH (cổng 22).
Mở các cổng cho Apache Pinot
Apache Pinot sử dụng nhiều cổng khác nhau tùy thuộc vào thành phần. Controller cần cổng 9000 để quản trị và 9097 cho metrics. Server cần cổng 9000 (port động) để giao tiếp nội bộ và 9097 cho metrics. Broker cần cổng 9000 để nhận request từ client và 9097 cho metrics.
Để đơn giản hóa trong môi trường triển khai ban đầu, chúng ta sẽ mở dải cổng 9000-9010 cho tất cả các thành phần và cổng 9097 cho Prometheus metrics. Ngoài ra, nếu sử dụng Kafka (sẽ cài ở phần sau), cần mở cổng 9092.
sudo ufw allow 9000:9010/tcp
sudo ufw allow 9097/tcp
sudo ufw allow 9092/tcp
Kết quả mong đợi: Các dải cổng đã được thêm vào danh sách quy tắc UFW, cho phép traffic TCP đi qua.
Kiểm tra trạng thái Firewall
Để xác minh lại các quy tắc đã được áp dụng chính xác, sử dụng lệnh status verbose của UFW.
sudo ufw status verbose
Kết quả mong đợi: Đầu ra hiển thị "Status: active", "Default: deny (incoming), allow (outgoing)", và danh sách các cổng 9000:9010/tcp, 9097/tcp, 9092/tcp, 22/tcp (SSH) ở trạng thái "ALLOW".
Điều hướng series:
Mục lục: Series: Triển khai Database ACID với Apache Pinot trên Ubuntu 24.04
Phần 2: Cài đặt các thành phần phụ thuộc: Java, Zookeeper và Kafka »