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


    📢📢📢📣📣📣
    哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
    一位上进心十足的【大数据领域博主】!😜😜😜
    中国DBA联盟(ACDU)成员,目前服务于工业互联网
    擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
    ✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
    ❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

    前言

    因客户的需求,本文详细阐述了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.架构设计

    主机名IP操作系统内存/空间角色说明
    pgcn172.18.12.80centos7.82c/18G 400Gcoordinate安装PG 14+ Citus 14.1.0
    pgwk01172.18.12.81centos7.82c/18G 400Gworker安装PG 14+ Citus 14.1.0
    pgwk02172.18.12.82centos7.82c/18G 400Gworker安装PG 14+ Citus 14.1.0
    pgwk03172.18.12.83centos7.82c/18G 400Gworker安装PG 14+ Citus 14.1.0
    pgwk04172.18.12.84centos7.82c/18G 400Gworker安装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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    在这里插入图片描述

    📣 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    一周侃 | 周末随笔
    LLM学习笔记-4
    表单识别(五)——票据识别-论文研读:基于深度学习的票据识别系统设计与实现,卞飞飞(上)
    保护互联网数据安全:关键方法与最佳实践
    NLP模型(三)——FastText介绍
    常见的损失函数
    一般乘法器设计,verilog code
    python爬虫思维
    Interlay采用Moonbeam路由流动性,为波卡发展更多流动性
    LabVIEW计算相机图像传感器分辨率以及镜头焦距
  • 原文地址:https://blog.csdn.net/weixin_41645135/article/details/134451216