当前位置: 首页 > article >正文

基于Linux的citus搭建标准化

作者:Digital Observer(施嘉伟)
Oracle ACE Pro: Database
PostgreSQL ACE Partner
11年数据库行业经验,现主要从事数据库服务工作
拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、PGCM、OCI、PolarDB技术专家、达梦师资认证、数据安全咨询高级等认证
ITPUB认证专家、PolarDB开源社区技术顾问、HaloDB技术顾问、TiDB社区技术布道师、青学会MOP技术社区专家顾问、国内某高校企业实践指导教师

第一部分 说明

Citus 是一种 PostgreSQL 扩展,它允许数据库服务器(称为节点)在“无共享”架构中相互协调。 这些节点形成一个集群,允许 PostgreSQL 保存更多数据并使用比单台计算机更多的 CPU 内核。 这种架构还允许通过简单地向集群添加更多节点来扩展数据库。
Citus 数据库集群包含一个 Citus 协调器节点和多个工作节点。 每个节点都包含称为分片的小型 Postgres 表。

对于每个查询,协调器要么将其路由到单个工作节点,要么将其并行化到多个节点,具体取决于所需数据是位于单个节点上还是多个节点上。 协调器通过查阅其元数据表知道如何做到这一点。 这些特定于 Citus 的表跟踪 DNS 名称和工作节点的健康状况,以及跨节点的数据分布。可以这么说,Coordinator是个包工头,Workers才是使力气的搬砖人。
Citus 集群中有三种类型的表,包括Distributed Tables(分布式表)、Reference Tables(参考表)以及Local Tables(本地表),每种类型用于不同的目的,我们主要来描述一下分布式表的相关内容。
分布式表是最常见的类型,一般建议把大于10G的业务表创建为分布式表,它们在Workers工作节点之间水平分区。

从图中我们可以看到,分布式表的按照设置好的分布式列,将数据打散到各个Worker上,在Coordinator上负责维护元数据,Workers上承担数据的实际存储。以实现了分布式最主要的功能特性。
综合而言,Citus非常适合做单表查询,并且单表的数据量越大,其优势就越明显,当然地,对于实时场景分析也有不俗的表现。但对于Work节点之间需要大量的数据进行交互的场景,并不能发挥Citus的功能特性,它只适合节点之间IO比较小的场景。

1.1 环境规划

本操作使用1个coordinator、2个worker进行部署:

PG版本13
citus10.0

主机名IP地址数据库端口
cnode192.168.22.1285437
node1192.168.22.1295438
node2192.168.22.1305439

第二部分 操作步骤

2.1 安装citus扩展

以下步骤在所有节点上执行。

2.1.1 下载并添加存储库
# curl https://install.citusdata.com/community/rpm.sh | sudo bash
2.1.2 安装citus
# sudo yum install -y citus100_13
2.1.3 初始化数据库

安装PostgreSQL(此步骤见《基于Linux的PostgreSQL12源码安装标准化实施文档》),并初始化数据库

$ initdb -D /citus1/data
2.1.4 配置数据库参数

修改配置文件,如果包含多个预载入的共享库,shared_preload_libraries 参数的值,citus需要写在第一个。同时,修改配置连接,设置远端可访问

$ vim postgresql.conf
shared_preload_libraries = 'citus'
listen_addresses = '*'

修改白名单验证,来保证集群之间各节点的正常通讯

$ vim ph_hba.conf
host    all             all             192.168.0.0/16            trust

2.1.5 创建citus扩展

启动数据库服务,创建citus扩展

$ pg_ctl start -D /citus1/data

citus=# create extension citus;

2.2 添加节点信息

在coordinator节点上使用citus_add_node()函数来添加两个工作节点

citus=# SELECT * from citus_add_node('node1', 5438);
citus=# SELECT * from citus_add_node('node2', 5439);

查看已添加的工作节点,至此,部署完成

citus=# SELECT * FROM citus_get_active_worker_nodes();

2.3 创建分布式表

创建一张分布式表

citus=# create table citus_test(id int,name text);

使用表citus_test的"id"列作为分布列,对于分布列的选择,我们推荐选择一个具有高基数的列作为分布列,并且尽可能地选择包含均匀分布的列

citus=# SELECT create_distributed_table('citus_test','id');

们来对比一下Coordinator节点上的表和Work上节点的表所展现的情况
Coordinator节点的表:

Workers节点上的表:

在Coordinator节点上插入测试数据,并在该表上做查询。查看一下执行计划,可以看到该结果是从node1上,且端口号为5438的Work节点上找到的,也能够看到具体是从哪个小表中查询到的这条记录。

hhh6.jpg


http://www.kler.cn/a/413922.html

相关文章:

  • 深度学习实战老照片上色
  • Unity shaderlab 实现LineSDF
  • qt 读写文本、xml文件
  • 关于相机选型的一些参数说明
  • Cocos编辑器
  • 微信小程序学习指南从入门到精通
  • day2全局注册
  • Oracle 19c RAC单节点停机维护硬件
  • 防止按钮被频繁点击
  • 分布式MQTT代理中使用布隆过滤器管理通配符主题
  • Python Turtle召唤童年:小黄人绘画
  • 微服务保护和分布式事务
  • 微信小程序按字母顺序渲染城市 功能实现详细讲解
  • 2024年9月GESPC++一级真题解析
  • springboot配置多数据源mysql+TDengine保姆级教程
  • 探索文件系统,Python os库是你的瑞士军刀
  • C++设计模式——Abstract Factory Pattern抽象工厂模式
  • 介绍一下printf,scanf
  • C++ 模板与泛型编程
  • OceanBase 大数据量导入(obloader)
  • 【论文复现】农作物病害叶子图像分割
  • c# httppost请求接口传参数及图片上传,非常实用
  • 电子应用设计方案-28:智能云饭锅系统方案设计
  • 网络--传输层协议--UDP
  • 【C#】调用外部应用
  • Network Link Conditioner Mac 上模拟网络环境工具的安装和使用