Hướng dẫn triển khai nhanh Citus 12.1 Cluster trên nhiều ECS Alibaba Cloud bằng Container

Alibaba Cloud ECS

Các nút máy

  1. Sử dụng hai máy ECS trong cùng một region.
  2. Cấu hình máy: 2 nhân, 2 GB RAM (Lưu ý: chương trình khuyến mãi 99 NDT/năm của Alibaba Cloud).
  3. Một máy cài đặt coordinator (bộ điều phối), IP nội bộ ở đây là 172.18.60.11
  4. Một máy cài đặt worker, IP nội bộ là 172.18.60.12

Hệ điều hành

Cả hai máy đều được cài đặt hệ thống Alibaba Cloud Linux 3 do nhà cung cấp phát hành.

lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: AlibabaCloud
Description:    Alibaba Cloud Linux release 3 (Soaring Falcon) 
Release:        3
Codename:       SoaringFalcon

Cài đặt Docker

Thực hiện các bước sau trên mỗi nút máy:

  1. Thêm kho lưu trữ dnf cho docker-ce
sudo dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. Cài đặt plugin tương thích kho dnf dành riêng cho Alibaba Cloud Linux 3
sudo dnf -y install dnf-plugin-releasever-adapter --repo alinux3-plus
  1. Cài đặt Docker
sudo dnf -y install docker-ce --nobest
  1. Khởi động dịch vụ Docker và cấu hình tự động khởi động cùng hệ thống
sudo systemctl start docker
sudo systemctl enable docker
  1. Kiểm tra trạng thái Docker
sudo systemctl status docker

Nhóm bảo mật

Lưu ý: Chúng ta sẽ sử dụng cổng 5432 của máy.

Để đảm bảo an toàn, nhà cung cấp cloud thường chặn truy cập công khai qua cổng này từ Internet. Tuy nhiên, truy cập giữa các máy nội bộ trong cùng một region được cho phép theo mặc định.

Triển khai Citus 12.1 Cluster

Ở đây chúng ta sử dụng image chính thức citusdata/citus:12.1.

Khởi động nút Coordinator

  • Trên nút máy 172.18.60.11 (coordinator)
mkdir -p citus-coordinator/data           
docker run -d --name citus-coordinator \
           -v $(pwd)/citus-coordinator/data:/var/lib/postgresql/data \
           -p 5432:5432 \
           -e POSTGRES_USER=citus \
           -e POSTGRES_PASSWORD=citus \
           -e PGUSER=citus \
           -e PGPASSWORD=citus \
           -e POSTGRES_HOST_AUTH_METHOD=trust \
           citusdata/citus:12.1

Lưu ý: Trong môi trường sản xuất, vì lý do bảo mật, bạn nên chỉnh sửa tệp pg_hba.conf riêng.

Khởi động nút Worker

  • Trên nút máy 172.18.60.12 (worker)
mkdir -p citus-worker00/data
docker run -d --name citus-worker00 \
           -v $(pwd)/citus-worker00/data:/var/lib/postgresql/data \
           -p 5432:5432 \
           -e POSTGRES_USER=citus \
           -e POSTGRES_PASSWORD=citus \
           -e PGUSER=citus \
           -e PGPASSWORD=citus \
           -e POSTGRES_HOST_AUTH_METHOD=trust \
           citusdata/citus:12.1

Cấu hình Cluster

  • Trên nút máy 172.18.60.11 (coordinator)
docker exec -it citus-coordinator psql -U citus
-- Thiết lập host coordinator cho worker kết nối tới
SELECT citus_set_coordinator_host('172.18.60.11', 5432);
-- Thêm nút worker
SELECT * from citus_add_node('172.18.60.12', 5432);
SELECT * FROM citus_get_active_worker_nodes();
   node_name   | node_port 
---------------+-----------
  172.18.60.12 |    5432
(1 row)

Xác thực: Ví dụ chính thức (Backend lưu trữ cho Microservices)

  • Sử dụng PostgreSQL 16.1 + Citus 12.1 làm backend lưu trữ cho nhiều microservice

Tạo schema cơ sở dữ liệu cho dịch vụ user

docker exec -it citus-coordinator psql -U citus

CREATE USER user_service;
SET citus.enable_schema_based_sharding TO ON;
CREATE SCHEMA AUTHORIZATION user_service;
select * from citus_schemas;
\c citus user_service
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL
);

Khởi động dịch vụ user bằng Docker

docker run -d --name usersvc \
           -p 6000:5000 \
           -e DB_HOST='172.18.60.11' \
           -e DB_NAME=citus \
           registry.cn-heyuan.aliyuncs.com/hacker-linner/citus-microsvc-user:1.0.1

Tạo một số người dùng

curl -X POST -H "Content-Type: application/json" -d '[
  {"name": "John Doe", "email": "john@example.com"},
  {"name": "Jane Smith", "email": "jane@example.com"},
  {"name": "Mike Johnson", "email": "mike@example.com"},
  {"name": "Emily Davis", "email": "emily@example.com"},
  {"name": "David Wilson", "email": "david@example.com"},
  {"name": "Sarah Thompson", "email": "sarah@example.com"},
  {"name": "Alex Miller", "email": "alex@example.com"},
  {"name": "Olivia Anderson", "email": "olivia@example.com"},
  {"name": "Daniel Martin", "email": "daniel@example.com"},
  {"name": "Sophia White", "email": "sophia@example.com"}
]' http://localhost:6000/users
{"message":"Users created successfully","user_ids":[1,2,3,4,5,6,7,8,9,10]}

Liệt kê người dùng đã tạo

curl http://localhost:6000/users

Xác thực dữ liệu đã được phân bổ đến nút worker

docker exec -it citus-coordinator psql -U citus

select nodename,nodeport, table_name, pg_size_pretty(sum(shard_size))
from citus_shards
group by nodename,nodeport, table_name;
   nodename    | nodeport |     table_name     | pg_size_pretty 
---------------+----------+--------------------+----------------
 172.18.60.12  |     5432 | user_service.users | 32 kB
(1 row)

Tham khảo

  • https://www.citusdata.com/
  • https://docs.citusdata.com/
  • Sử dụng PostgreSQL 16.1 + Citus 12.1 làm backend lưu trữ cho nhiều microservice
  • https://hacker-linner.com/

Thẻ: Citus PostgreSQL docker Alibaba Cloud ECS

Đăng vào ngày 15 tháng 6 lúc 02:34