Cấu hình Apache Pinot Broker để định tuyến truy vấn
Broker đóng vai trò là điểm vào (entry point) duy nhất cho các truy vấn SQL, chịu trách nhiệm phân tích cú pháp và định tuyến chúng đến các Server có dữ liệu phù hợp.
Chúng ta sẽ tạo file cấu hình pinot-broker.properties tại thư mục /etc/pinot/conf để Broker biết cách kết nối với Controller và Zookeeper.
Trước khi tạo file, hãy đảm bảo thư mục cấu hình đã tồn tại. Nếu chưa, hãy tạo mới.
sudo mkdir -p /etc/pinot/conf
Thư mục cấu hình đã được tạo sẵn sàng cho file định tuyến.
Viết nội dung cấu hình hoàn chỉnh vào file /etc/pinot/conf/pinot-broker.properties. Cấu hình này bao gồm cổng web, địa chỉ Controller và Zookeeper đã được cài đặt ở các phần trước.
sudo tee /etc/pinot/conf/pinot-broker.properties > /dev/null
File cấu hình đã được ghi vào disk. Broker sẽ đọc các tham số này khi khởi động để thiết lập đường dẫn đến Controller và Zookeeper.
Kiểm tra lại nội dung file để đảm bảo không có lỗi đánh máy trong các địa chỉ host.
cat /etc/pinot/conf/pinot-broker.properties
Nội dung hiển thị khớp với các thông số đã cấu hình: cổng 9000, kết nối tới Controller và Zookeeper.
Triển khai Pinot Web UI (Controller UI) để quản lý bảng và Task
Giao diện quản trị chính của Pinot (Pinot Controller UI) chạy trên thành phần Controller, không phải Broker. Tuy nhiên, Broker cần được cấu hình để hỗ trợ các request từ UI hoặc để UI có thể hiển thị thông tin định tuyến.
Trong phần này, chúng ta sẽ đảm bảo Controller đã bật Web UI và truy cập nó qua trình duyệt. Nếu Controller chưa bật, ta cần chỉnh sửa file pinot-controller.properties (nếu chưa làm ở Phần 3).
Kiểm tra xem cổng web của Controller (mặc định 9000) có đang lắng nghe không.
sudo netstat -tlnp | grep 9000
Cổng 9000 đang lắng nghe (LISTEN) từ tiến trình Java của Pinot Controller.
Mở trình duyệt web và truy cập địa chỉ http://:9000. Giao diện này cho phép bạn xem danh sách Tables, Tasks đang chạy và cấu hình Cluster.
Để truy cập API REST trực tiếp từ terminal để verify UI đang hoạt động (giả lập request từ trình duyệt), sử dụng curl.
curl -s http://controller-host:9000/pinot-controller/tables | jq .
Trả về danh sách JSON các bảng (tables) hiện có trong hệ thống. Nếu chưa có bảng nào, kết quả là mảng rỗng [].
Để truy cập trang quản trị Task (Tasks), sử dụng endpoint sau.
curl -s http://controller-host:9000/pinot-controller/tasks | jq '.[] | {taskType, taskStatus}'
Hiển thị danh sách các task đang chạy hoặc đã hoàn thành, bao gồm trạng thái (Status) và loại (Type).
Cấu hình bảo mật cơ bản: Thêm người dùng và cấp quyền
Pinot sử dụng cơ chế bảo mật dựa trên vai trò (Role-Based Access Control - RBAC). Mặc định, nếu không cấu hình, mọi người dùng đều có quyền truy cập. Chúng ta sẽ bật bảo mật và tạo user.
Trước tiên, cần cấu hình authentication trong file pinot-controller.properties (và pinot-server.properties, pinot-broker.properties để đồng bộ). Tuy nhiên, để đơn giản hóa trong tutorial này, chúng ta sẽ sử dụng cơ chế "Simple Auth" hoặc cấu hình thông qua UI/API nếu đã bật sẵn.
Giả sử chúng ta muốn thêm người dùng admin với quyền quản trị toàn bộ và người dùng analyst chỉ có quyền đọc (SELECT).
Sử dụng API REST của Controller để tạo người dùng. Cần xác thực bằng admin mặc định (nếu chưa đổi) hoặc gửi request nếu chưa bật auth chặt chẽ.
Để tạo người dùng admin với vai trò ADMIN.
curl -X POST http://controller-host:9000/pinot-controller/manager/users -H "Content-Type: application/json" -d '{"username":"admin","password":"pinot_admin_pass","roles":["ADMIN"]}'
Trở về mã trạng thái HTTP 200 hoặc 201, kèm thông báo "User created successfully".
Để tạo người dùng analyst với vai trò READER (chỉ xem được bảng).
curl -X POST http://controller-host:9000/pinot-controller/manager/users -H "Content-Type: application/json" -d '{"username":"analyst","password":"pinot_reader_pass","roles":["READER"]}'
Người dùng analyst đã được tạo với quyền hạn bị giới hạn.
Cấp quyền truy cập cụ thể cho bảng (ví dụ: bảng my_realtime_table) cho user analyst. Pinot cho phép cấp quyền ở mức bảng.
curl -X POST http://controller-host:9000/pinot-controller/manager/tables/my_realtime_table/permissions -H "Content-Type: application/json" -d '{"username":"analyst","permission":"READ"}'
Trạng thái HTTP 200, xác nhận quyền READ đã được gán cho user analyst trên bảng my_realtime_table.
Để liệt kê tất cả người dùng đã tạo và vai trò của họ.
curl -s http://controller-host:9000/pinot-controller/manager/users | jq '.[] | {username, roles}'
Hiển thị danh sách admin với role ADMIN và analyst với role READER.
Kiểm tra trạng thái Cluster qua Giao diện Web và API REST
Sau khi cấu hình Broker và bảo mật, cần xác minh toàn bộ cluster (Controller, Server, Broker) đang hoạt động đồng bộ và sẵn sàng nhận truy vấn.
Truy cập API Health Check của Controller để xem trạng thái tổng thể.
curl -s http://controller-host:9000/pinot-controller/clusterStatus | jq .
JSON trả về bao gồm thông tin về số lượng Server online, số lượng Broker online và trạng thái của các Table (ONLINE, OFFLINE).
Kiểm tra trạng thái cụ thể của Broker đã cấu hình ở phần đầu. Sử dụng endpoint để list các instance Broker.
curl -s http://controller-host:9000/pinot-controller/manager/brokers | jq '.[] | {instanceId, host, port, state}'
Hiển thị danh sách các Broker đang kết nối với Controller. Trạng thái state phải là ONLINE.
Kiểm tra xem Broker có thực sự lắng nghe cổng 9000 và phản hồi request SQL đơn giản không (Test routing).
curl -X POST http://controller-host:9000/tables/my_realtime_table/query -H "Content-Type: application/json" -d '{"sql":"SELECT * FROM my_realtime_table LIMIT 1"}' | jq .
Trả về kết quả query JSON (có thể là mảng rỗng nếu chưa có data, nhưng không có lỗi 404 hoặc 500). Điều này chứng tỏ Broker đã định tuyến request đến Server thành công.
Để xem log lỗi nếu có, kiểm tra log file của Broker.
tail -n 50 /var/log/pinot/broker.log
Log hiển thị các dòng INFO về việc khởi động web server và kết nối tới Controller/Zookeeper, không có dòng ERROR hay Exception.
Xác nhận cuối cùng: Truy cập giao diện Web UI (http://controller-host:9000) bằng trình duyệt, đăng nhập bằng user admin (nếu đã bật auth) hoặc truy cập trực tiếp. Kiểm tra tab "Cluster" để thấy Broker hiện trạng thái xanh (Healthy).
Đ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 3: Triển khai Apache Pinot Controller và Server
Phần 5: Tạo Schema và Table: Đảm bảo tính nhất quán ACID »