基于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地址 数据库端口
cnode 192.168.22.128 5437
node1 192.168.22.129 5438
node2 192.168.22.130 5439

第二部分 操作步骤

2.1 安装citus扩展

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

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

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

shell 复制代码
$ initdb -D /citus1/data
2.1.4 配置数据库参数

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

shell 复制代码
$ vim postgresql.conf
shared_preload_libraries = 'citus'
listen_addresses = '*'

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

shell 复制代码
$ vim ph_hba.conf
host    all             all             192.168.0.0/16            trust
2.1.5 创建citus扩展

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

shell 复制代码
$ pg_ctl start -D /citus1/data

citus=# create extension citus;

2.2 添加节点信息

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

shell 复制代码
citus=# SELECT * from citus_add_node('node1', 5438);
citus=# SELECT * from citus_add_node('node2', 5439);

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

shell 复制代码
citus=# SELECT * FROM citus_get_active_worker_nodes();

2.3 创建分布式表

创建一张分布式表

shell 复制代码
citus=# create table citus_test(id int,name text);

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

shell 复制代码
citus=# SELECT create_distributed_table('citus_test','id');

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

Coordinator节点的表:

Workers节点上的表:

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

相关推荐
网络安全许木12 小时前
自学渗透测试第14天(信息收集进阶与指纹识别)
linux·网络安全·渗透测试
q210306337212 小时前
初学Access(具体示例)
数据库
xlq2232212 小时前
40.线程控制
linux
l1t12 小时前
DeepSeek总结的PostgreSQL使用 RDTSC 降低 EXPLAIN ANALYZE 的计时开销
数据库·postgresql
lagrahhn12 小时前
Oracle中各个c版本介绍
数据库·oracle
知识分享小能手13 小时前
MongoDB入门学习教程,从入门到精通,在生产环境中设置MongoDB(21)
数据库·学习·mongodb
TechMasterPlus13 小时前
Linux U-Boot 与内核启动流程深度解析:从上电到 Shell 的完整之旅
linux·运维·服务器
XDHCOM13 小时前
ORA-12445报错:无法更改列隐藏属性,Oracle故障修复与远程处理,网友推荐解决方案
数据库·oracle
大白菜和MySQL13 小时前
Linux下dhcp服务搭建
linux·运维·服务器
大白菜和MySQL13 小时前
linux系统环境常用命令
android·linux·adb