PostgreSQL基于Citus实现的分布式集群

331 阅读3分钟
作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验
擅长主流数据Oracle、MySQL、PG、openGauss运维
备份恢复,安装迁移,性能优化、故障应急处理等

可提供技术业务:
1.DB故障处理/疑难杂症远程支援
2.Mysql/PG/Oracle/openGauss
数据库部署及数仓搭建

•••
微信:jem_db
QQ交流群:587159446
公众号:IT邦德

@TOC

前言

因客户需求,本文详细点阐述了PostgreSQL基于Citus实现的分布式集群点实现

1.Citus介绍

Citus是一个PostgreSQL扩展,它将Postgres转换为分布式数据库,因此您可以在任何规模上实现高性能。
可以使用这些Citus超能力使您的Postgres数据库在单个Citus节点上扩展。或者,您可以构建一个能够处理高交易吞吐量的大型集群,尤其是在多租户应用程序中,运行快速分析查询,并处理大量时间序列或物联网数据进行实时分析。当数据大小和数量增长时,可以轻松地向集群中添加更多的工作节点并重新平衡碎片。

使用Citus,您可以用新的超能力扩展PostgreSQL数据库:
1.分布式表在PostgreSQL节点集群中进行分片,以组合它们的CPU、内存、存储和I/O容量。
2.引用表被复制到所有节点,以便从分布式表中进行联接和外键,从而获得最大的读取性能。
3.分布式查询引擎路由并并行化集群中分布式表上的SELECT、DML和其他操作。
4.列存储压缩数据,加快扫描速度,并支持在常规表和分布式表上进行快速投影。
5.通过从任何节点进行查询,您都可以利用集群的全部容量进行分布式查询

Citus集群由一个中心的协调节点(CN)和若干个工作节点(Worker)构成。
coordinate:协调节点,一般称为cn,存储所有元数据,不存实际数据,该节点直接对用户开放,等于一个客户端。
worker:工作节点,不存储元数据,存储实际数据。执行协调节点发来的查询请求。一般不直接对用户开放。

2.架构设计

3.安装citus

3.1 yum安装

curl https://install.citusdata.com/community/rpm.sh
yum install -y citus_14

3.2 创建拓展

su - postgres
psql
create database clusterdb;
\c clusterdb
alter system set shared_preload_libraries='citus';
clusterdb=# select pg_reload_conf();
clusterdb=# select * from pg_available_extensions where name='citus';
 name  | default_version | installed_version |          comment           
-------+-----------------+-------------------+----------------------------
 citus | 12.1-1          |                   | Citus distributed database
(1 row)
clusterdb=# \q

systemctl status postgresql-14
systemctl restart postgresql-14

root@pgcn:~$ su - postgres
root@pgcn:~$ psql

postgres=# \c clusterdb
You are now connected to database "clusterdb" as user "postgres".

clusterdb=# show shared_preload_libraries;
 shared_preload_libraries 
--------------------------
 citus
(1 row)

clusterdb=# create extension citus;
CREATE EXTENSION

clusterdb=# \dx
                     List of installed extensions
      Name      | Version |   Schema   |         Description          
----------------+---------+------------+------------------------------
 citus          | 12.1-1  | pg_catalog | Citus distributed database
 citus_columnar | 11.3-1  | pg_catalog | Citus Columnar extension
 plpgsql        | 1.0     | pg_catalog | PL/pgSQL procedural language
(3 rows)

clusterdb=# \dx+ citus

4.集群配置

4.1修改配置文件

1.coordinate节点的pg_hba.conf配置:

cat >> /var/lib/pgsql/14/data/pg_hba.conf <<"EOF"
host   all       all       0.0.0.0/0       md5
EOF

2.worker节点的pg_hba.conf配置:
cat >> /var/lib/pgsql/14/data/pg_hba.conf <<"EOF"
host   all       all       172.18.12.0/24       trust
EOF

systemctl restart postgresql-14

4.2 新增节点

psql -d clusterdb

-- 查看工作节点:
SELECT * FROM master_get_active_worker_nodes();

select * from pg_dist_node;

##管理操作仅仅在协调节点(cn)上操作:
-- 节点可以是ip或者dns name
SELECT * from master_add_node('172.18.12.81', 5432);
SELECT * from master_add_node('172.18.12.82', 5432);
SELECT * from master_add_node('172.18.12.83', 5432);
SELECT * from master_add_node('172.18.12.84', 5432);

4.4 集群信息

-- 查看工作节点
clusterdb=# SELECT * FROM master_get_active_worker_nodes();
  node_name   | node_port 
--------------+-----------
 172.18.12.83 |      5432
 172.18.12.81 |      5432
 172.18.12.84 |      5432
 172.18.12.82 |      5432
(4 rows)

clusterdb=# select * from pg_dist_node;
 nodeid | groupid |   nodename   | nodeport | noderack | hasmetadata | isactive | noderole | nodecluster | metadatasynced | shouldhaveshards 
--------+---------+--------------+----------+----------+-------------+----------+----------+-------------+----------------+------------------
     43 |      43 | 172.18.12.82 |     5432 | default  | t           | t        | primary  | default     | t              | t
     44 |      44 | 172.18.12.83 |     5432 | default  | t           | t        | primary  | default     | t              | t
     46 |      46 | 172.18.12.84 |     5432 | default  | t           | t        | primary  | default     | t              | t
     42 |      42 | 172.18.12.81 |     5432 | default  | t           | t        | primary  | default     | t              | t