雲原生分散式 PostgreSQL+Citus 集群在 Sentry 後端的實踐
- 2022 年 10 月 21 日
- 筆記
優化一個分散式系統的吞吐能力,除了應用本身程式碼外,很大程度上是在優化它所依賴的中間件集群處理能力。如:kafka
/redis
/rabbitmq
/postgresql
/分散式存儲(CephFS
,JuiceFS
,C urve
,Longhorn
)等集群的處理能力。
分散式存儲集群(Longhorn)
這裡主要用於 Citus
集群的協調器(coordinator)
和工作器(worker)
節點的數據持久化。
具體文檔,請參閱:
分散式 PostgreSQL 集群(Citus)
這裡主要用於對 Sentry
事件源數據大表 nodestore_node
的分片。
具體文檔,請參閱:
讀寫分離和高可用(PgPool+Repmgr)
這裡主要用於對 Citus
節點(協調器
/工作器
)進行讀寫分離和主備高可用。
具體文檔,請參閱:
管理集群節點(PgAdmin)
具體文檔,請參閱:
nodestore_node 大表分片
選擇分散式 key,並將錶轉換分散式表,這裡將表劃分為 64
個分片,數據平均分配到 6
台 worker
節點:
# 創建分散式表
SELECT create_distributed_table('nodestore_node', 'id', colocate_with => 'none', shard_count => 64);
# 平衡分片
SELECT rebalance_table_shards();
# 查詢分片
SELECT * FROM citus_shards;
總結
中間件集群基礎設施建設,本身涉及細節較多,可以說是另一個領域。
本文提供了一種筆者的實踐思路,拋磚引玉。