使用容器快速在阿里雲 ECS 多節點上搭建 Citus 12.1 叢集

為少發表於2023-12-27

image

阿里雲 ECS

機器節點

  1. 這裡我們使用兩臺同一區域的 ECS 機器。
  2. 機器配置:2 核 2 G。(ps: 阿里雲 99 元一年的活動)
  3. 一臺安裝 coordinator(協調器),這裡內網 IP 為 172.18.60.11
  4. 一臺安裝 worker,這裡內網 IP 為 172.18.60.12

作業系統

兩臺機器分別安裝了廠商的 Alibaba Cloud Linux 3 系統。

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

安裝 Docker

在各機器節點上分別執行:

  1. 新增 docker-ce 的 dnf 源
sudo dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 安裝 Alibaba Cloud Linux 3 專用的 dnf 源相容外掛
sudo dnf -y install dnf-plugin-releasever-adapter --repo alinux3-plus
  1. 安裝 Docker
sudo dnf -y install docker-ce --nobest
  1. 啟動 Docker 服務,並設定開機自啟動
sudo systemctl start docker
sudo systemctl enable docker
  1. 檢視Docker是否啟動
sudo systemctl status docker

安全組

注意:我們接下來會使用機器的 5432 埠。

為了安全,雲廠商預設是遮蔽公網訪問該埠的,使用者同一區域的內網機器之間的訪問預設是可以的。

Citus 12.1 叢集搭建

這裡使用官方構建的映象 citusdata/citus:12.1

啟動 Coordinator 節點

  • 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

注意:生產環境,為了安全請另行編輯 pg_hba.conf

啟動 Worker 節點

  • 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

叢集設定

  • 172.18.60.11(coordinator) 機器節點
docker exec -it citus-coordinator psql -U citus
# 設定 worker 要連線的協調器節點
SELECT citus_set_coordinator_host('172.18.60.11', 5432);
# 新增 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)

驗證: 官方案例(微服務儲存後端)

建立 user 服務的資料庫 schema

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
);

Docker 啟動 user 服務

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

建立一些使用者

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]}

列出已建立的使用者

curl http://localhost:6000/users

驗證資料是否被分配到 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)

Refs

相關文章