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

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

文章目录

  • 前言
    • 📣 1.Citus介绍
    • 📣 2.架构设计
    • 📣 3.安装citus
      • ✨ 3.1 yum安装
      • ✨ 3.2 创建拓展
    • 📣 4.集群配置
      • ✨ 4.1修改配置文件
      • ✨ 4.2 新增节点
      • ✨ 4.3 集群信息

前言

因客户的需求,本文详细阐述了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=# \qsystemctl status postgresql-14
systemctl restart postgresql-14root@pgcn:~$ su - postgres
root@pgcn:~$ psqlpostgres=# \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 EXTENSIONclusterdb=# \dxList of installed extensionsName      | Version |   Schema   |         Description          
----------------+---------+------------+------------------------------citus          | 12.1-1  | pg_catalog | Citus distributed databasecitus_columnar | 11.3-1  | pg_catalog | Citus Columnar extensionplpgsql        | 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 |      5432172.18.12.81 |      5432172.18.12.84 |      5432172.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              | t44 |      44 | 172.18.12.83 |     5432 | default  | t           | t        | primary  | default     | t              | t46 |      46 | 172.18.12.84 |     5432 | default  | t           | t        | primary  | default     | t              | t42 |      42 | 172.18.12.81 |     5432 | default  | t           | t        | primary  | default     | t              | t

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/196779.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JQuery ajax 提交数据提示:Uncaught TypeError:Illegal invocation

JQuery ajax 提交数据提示&#xff1a;Uncaught TypeError:Illegal invocation 1 问题描述 用jQuery Ajax向DRF接口提交数据的时候&#xff0c;console提示&#xff1a;Uncaught TypeError:Illegal invocation(未捕获的异常&#xff1a;非法调用)。 这个问题可能有两种原因导…

vue实现调用手机拍照、录像功能

目录 前言 准备工作 在这个示例中&#xff0c;我们将使用Vue.js框架来实现我们的目标。如果你还不熟悉Vue.js&#xff0c;推荐先学习一下Vue.js的基础知识。 接下来&#xff0c;我们需要创建一个基于Vue.js的项目。你可以使用Vue CLI来创建一个全新的Vue项目&#xff1a;# …

小程序授权获取昵称

wxml: <form bindsubmit"formsubmit"><view style"width: 90%;display: flex;margin-left: 5%;"><view class"text1">昵称&#xff1a;</view><input style"width: 150px;margin-left: 30px;margin-top: 30px;…

【Java 进阶篇】唤醒好运:JQuery 抽奖案例详解

在现代社交网络和电商平台中&#xff0c;抽奖活动成为吸引用户、提升用户参与度的一种常见手段。通过精心设计的抽奖页面&#xff0c;不仅可以增加用户的互动体验&#xff0c;还能在一定程度上提高品牌的知名度。本篇博客将通过详细解析 JQuery 抽奖案例&#xff0c;带领你走进…

Flutter 应用启动从闪屏页短暂黑屏再到第一个页面

由于应用初始状态启动会有白屏现象&#xff0c;便使用 flutter_native_splash 2.3.5 插件生成了启动相关的配置&#xff0c;并且按照示例使用了 import package:flutter_native_splash/flutter_native_splash.dart;void main() {WidgetsBinding widgetsBinding WidgetsFlutte…

【Java 进阶篇】插上翅膀:JQuery 插件机制详解

在前端开发中&#xff0c;JQuery 作为一个广泛应用的 JavaScript 库&#xff0c;为开发者提供了丰富的工具和方法&#xff0c;简化了 DOM 操作、事件处理等繁琐的任务。而在这个庞大的生态系统中&#xff0c;插件机制是 JQuery 的一项重要特性&#xff0c;使得开发者能够轻松地…

quickapp_快应用_tabBar

tabBar 配置项中配置tabBar(版本兼容)使用tabs组件配置tabBar语法示例问题-切换tab没有反应问题-数据渲染问题解决优化 问题-tab的动态配置 第三方组件tabbar 一般首页都会显示几个tab用于进行页面切换&#xff0c;以下是几种tab配置方式。 配置项中配置tabBar(版本兼容) 在m…

2023-2024华为ICT大赛-计算赛道-广东省省赛初赛-高职组-部分赛题分析【2023.11.18】

2023-2024华为ICT大赛 计算赛道 广东省 省赛 初赛 高职组 部分赛题 分析【2023.11.18】 文章目录 单选题tpcds模式中存在表customer&#xff0c;不能成功删除tpcds模式是&#xff08; &#xff09;以下哪个函数将圆转换成矩形&#xff08; &#xff09;下列哪个选项表示依赖该D…

Centos8配置Zabbix5.0中文汉化

1.点击【Sign in】按钮&#xff0c;输入用户名和密码进入Zabbix的首页&#xff0c;结果如图。 2.点击左边导航栏的【User settings】链接&#xff0c;进入用户个性化设置界面&#xff0c;结果如图。 3.在搭建Zabbix的虚拟机上使用yum命令下载中文包。 yum install glibc-langpa…

【uniapp】Google Maps

话不多说 直接上干货 提前申请谷歌地图账号一、新建地图 使用h5获取当前定位或者使用三方uniapp插件 var coords ""navigator.geolocation.getCurrentPosition(function(position) {coords {lat: position.coords.latitude,lng: position.coords.longitude};lats …

计算机毕业设计 基于SpringBoot的车辆网位置信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

[Android]创建TabBar

创建一个包含“首页”、“分类”和“我的”选项卡的TabBar并实现切换功能&#xff0c;通常可以通过使用TabLayout结合ViewPager或ViewPager2来完成。以下是一个基本的示例&#xff0c;展示了如何使用Kotlin和XML来实现这个功能。 1.添加依赖项到build.gradle dependencies {/…

STM32与ZigBee无线通信技术在工业自动化中的应用

工业自动化是指利用电子技术、计算机技术和通信技术等手段&#xff0c;对工厂、设备和生产过程进行自动化控制和管理的过程。在工业自动化中&#xff0c;可靠的无线通信技术对于实时数据的传输和设备的协同控制至关重要。本文将介绍STM32微控制器与ZigBee无线通信技术在工业自动…

专业数据标注公司:景联文科技领航数据标注行业,满足大模型时代新需求

随着大模型的蓬勃发展和相关政策的逐步推进&#xff0c;为数据要素市场化配置的加速推进提供了有力的技术保障和政策支持。数据要素生产力度的不断提升&#xff0c;为数据标注产业带来了迅速发展的契机。 根据国家工信安全发展研究中心测算&#xff0c;2022年中国数据加工环节的…

【Mysql学习笔记】1 - Mysql入门

一、Mysql5.7安装配置 下载后会得到zip 安装文件解压的路径最好不要有中文和空格这里我解压到 D:\hspmysql\mysql-5.7.19-winx64 目录下 【根据自己的情况来指定目录,尽量选择空间大的盘】 添加环境变量 : 电脑-属性-高级系统设置-环境变量&#xff0c;在Path 环境变量增加mysq…

NET8 ORM 使用AOT SqlSugar

.NET AOT8 基本上能够免强使用了, SqlSugar ORM也支持了CRUD 能在AOT下运行了 Nuget安装 SqlSugarCore 具体代码 StaticConfig.EnableAot true;//启用AOT 程序启动执行一次就好了//用SqlSugarClient每次都new,不要用单例模式 var db new SqlSugarClient(new ConnectionC…

【Qt开发流程】之HelloWorld程序

【Qt开发流程】之HelloWorld程序 目的编写程序新建项目文件说明及界面设计 程序运行及发布程序运行程序发布手动构建使用windeployqt进行构建 设置应用程序图标修改快捷键类型列表命令行编译程序命令行编译.ui文件自定义类项目模式及项目文件介绍项目模式项目文件 目的 从Hell…

Kafka学习笔记(三)

目录 第5章 Kafka监控&#xff08;Kafka Eagle&#xff09;5.2 修改kafka启动命令5.2 上传压缩包5.3 解压到本地5.4 进入刚才解压的目录5.5 将kafka-eagle-web-1.3.7-bin.tar.gz解压至/opt/module5.6 修改名称5.7 给启动文件执行权限5.8 修改配置文件5.9 添加环境变量5.10 启动…

【Java 进阶篇】深入理解 JQuery 事件绑定:标准方式

在前端开发中&#xff0c;处理用户与页面的交互是至关重要的一部分。JQuery作为一个广泛应用的JavaScript库&#xff0c;为我们提供了简便而强大的事件绑定机制&#xff0c;使得我们能够更加灵活地响应用户的行为。本篇博客将深入解析 JQuery 的标准事件绑定方式&#xff0c;为…

解决Redis分布式锁宕机出现不可靠问题-zookeeper分布式锁

核心思想&#xff1a;当客户端要获取锁&#xff0c;则创建节点&#xff0c;使用完锁&#xff0c;则删除该节点。 客户端获取锁时&#xff0c;在 lock 节点下创建临时顺序节点。然后获取 lock下面的所有子节点&#xff0c;客户端获取到所有的子节点之后&#xff0c;如果发现自己…