Alibaba Cloud ECS
Các nút máy
- Sử dụng hai máy ECS trong cùng một region.
- 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).
- Một máy cài đặt
coordinator(bộ điều phối), IP nội bộ ở đây là172.18.60.11 - 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:
- 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
- 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
- Cài đặt Docker
sudo dnf -y install docker-ce --nobest
- 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
- 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/