PostgreSQL基于Citus实现分布式集群的全过程
目录
- 1.Citus介绍
- 2.架构设计
- 3.安装citus
- 3.1 yum安装
- 3.2 创建拓展
- 4.集群配置
- 4.1修改配置文件
- 4.2 新增节点
- 4.3 集群信息
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.架构设计
主机名 | IP | 操作系统 | 内存/空间 | 角色 | 说明 |
---|---|---|---|---|---|
pgcn | 172.18.12.80 | centos7.8 | 2c/18G 400G | coordinate | 安装PG 14+ Citus 14.1.0 |
pgwk01 | 172.18.12.81 | centos7.8 | 2c/18G 400G | worker | 安装PG 14+ Citus 14.1.0 |
pgwk02 | 172.18.12.82 | centos7.8 | 2c/18G 400G | worker | 安装PG 14+ Citus 14.1.0 |
pgwk03 | 172.18.12.83 | centos7.8 | 2c/18G 400G | worker | 安装PG 14+ Citus 14.1.0 |
pgwk04 | 172.18.12.84 | centos7.8 | 2c/18G 400G | worker | 安装PG 14+ Citus 14.1.0 |
3.安装citus
3.1 yum安装
1.安装依赖
yum install -y libcurl-devel lz4 zstd epel-release libzstd-devel unzip libcurl make
2.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.3 集群信息
-- 查看工作节点 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