雲原生分散式 PostgreSQL+Citus 集群在 Sentry 後端的實踐

  • 2022 年 10 月 21 日
  • 筆記

image

優化一個分散式系統的吞吐能力,除了應用本身程式碼外,很大程度上是在優化它所依賴的中間件集群處理能力。如:kafka/redis/rabbitmq/postgresql/分散式存儲(CephFS,JuiceFS,C urve,Longhorn)等集群的處理能力。

分散式存儲集群(Longhorn)

這裡主要用於 Citus 集群的協調器(coordinator)工作器(worker) 節點的數據持久化。

具體文檔,請參閱:

image

image

分散式 PostgreSQL 集群(Citus)

這裡主要用於對 Sentry 事件源數據大表 nodestore_node 的分片。

具體文檔,請參閱:

image

讀寫分離和高可用(PgPool+Repmgr)

這裡主要用於對 Citus 節點(協調器/工作器)進行讀寫分離和主備高可用。

具體文檔,請參閱:

image

image

管理集群節點(PgAdmin)

具體文檔,請參閱:

image

nodestore_node 大表分片

選擇分散式 key,並將錶轉換分散式表,這裡將表劃分為 64 個分片,數據平均分配到 6worker 節點:

# 創建分散式表
SELECT create_distributed_table('nodestore_node', 'id', colocate_with => 'none', shard_count => 64);
# 平衡分片
SELECT rebalance_table_shards();
# 查詢分片
SELECT * FROM citus_shards;

image

總結

中間件集群基礎設施建設,本身涉及細節較多,可以說是另一個領域。

本文提供了一種筆者的實踐思路,拋磚引玉。