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

【赵渝强老师】基于PostgreSQL的分布式数据库:Citus

1

​由于PostgreSQL具有强大的功能和良好的可扩展性,因此基于PostgreSQL很容易就可以实现分布式架构。Citus便是具体的一种实现方式。它以扩展的插件形式与PostgreSQL进行集成,且独立于PostgreSQL内核,部署也比较简单。Citus是现在非常流行的基于PostgreSQL的分布式解决方案。

一、 Citus基础

下面是百度百科中对分布式数据库的定义:

分布式数据库系统通常使用较小的计算机系统,每台计算机可单独放在一个地方,每台计算机中都可能有DBMS的一份完整拷贝副本,或者部分拷贝副本,并具有自己局部的数据库,位于不同地点的许多计算机通过网络互相连接,共同组成一个完整的、全局的逻辑上集中、物理上分布的大型数据库。
——摘自《百度百科》

image.png
点击这里查看视频讲解:【赵渝强老师】基于PostgreSQL的分布式数据库:Citus

1.1 为什么需要分布式数据库?

随着行业应用所产生的数据量呈爆炸式增长,传统的集中式数据库面对大规模数据处理逐渐表现出其局限性。这主要体现在以下三个方面:

  • 应用请求访问的数据量巨大;
  • 由于数据量巨大,造成服务器CPU、内存、网络、I\O都遇到瓶颈,从而造成性能下降;
  • 传统的集中式数据库在设计之初并不包含任务的并行执行,从而导致并行执行有天然的缺陷,对于分区也是如此。

因此,能快速处理数据和及时响应用户访问的新方法,以及对数据进行集中分析、管理和维护,这已经成为迫切需求。基于这样的背景,分布式数据库便在集中式数据库的基础上迅速发展起来的。分布式数据库是指数据在物理上分布而在逻辑上集中管理的数据库系统。

物理上分布是指数据分布在物理位置不同并由网络连接的节点或站点上;逻辑上集中是指各数据库节点之间的逻辑上是一个整体,并由统一的数据库管理系统管理。

分布式数据库具有数据透明性、数据冗余性、易于扩展性、自治性等特点,还具有经济、性能优越、响应速度更快、灵活的体系结构、易于集成现有系统等特点。但分布式数据库强烈依赖网络,且对事务的处理远没有传统的集中式数据库成熟。因此在很长一段时间内分布式数据存储将与传统数据存储共存。​

1.2 什么是Citus?

Citus采用shared nothing架构,节点之间无共享数据,它是一款基于PostgreSQL的开源分布式数据库。Citus不仅仅兼容PostgreSQL的客户端协议,同时也兼容PostgreSQL的服务端扩展和管理工具。相比单实例的PostgreSQL数据库来说,Citus可以使用更多的CPU内核,更多的内存数量,保存更多的数据。通过向集群添加节点,Citus可以轻松的扩展数据库。Citus的最大特点是它是一个PostgreSQL扩展而不是一个独立的代码分支。因此Citus可以用很小的代价和更快的速度与PostgreSQL进行集成,同时又能最大程度的保证数据库的稳定性和兼容性。下图展示了Citus的体系架构。

2

Citus的体系架构中包含协调者节点和工作者节点,即:Coordinator节点和Worker节点。SQL语句经过语法解析后,在协调者节点的分析阶段被Citus扩展所替换,将其转换为并行执行的SQL分发到后端的工作者节点上执行。

这里的协调者和工作者都是PostgreSQL数据库实例。

二、 安装与配置Citus

在了解到了Citus的基本知识以后,下面便通过具体的步骤来演示如何安装和配置Citus。

Citus既可以安装在单机环境中,也可以安装在多机环境中。下面将以单机环境来进行演示说明。

(1)将用户postgres添加到系统的/etc/sudoers文件中。

postgres ALL=(ALL)       ALL

(2)切换到postgres用户

su - postgres

(3)安装Citus的域名源

curl https://install.citusdata.com/community/rpm.sh | sudo bash# 输出的信息如下:
Detected operating system as centos/7.
Checking for curl...
Detected curl...
Checking for postgresql15-server...
Installing pgdg repo... Error: Nothing to do
done.
Checking for EPEL repositories...
Detected EPEL repoitories
Downloading repository file
Installing pygpgme to verify GPG signatures... done.
Installing yum-utils... done.
Generating yum cache for citusdata_community... done.The repository is set up! You can now install packages.# 这一步需要输入用户postgres的密码。

(4)安装Citus。

sudo yum install -y citus113_15# 这一步会自动将PostgreSQL 15安装到/usr/pgsql-15/目录下。

(5)查看目录/usr/pgsql-15/的结构。

[postgres@mydb ~]$ tree -d -L 2 /usr/pgsql-15/
/usr/pgsql-15/
├── bin
├── doc
│   └── extension
├── include
│   └── server
├── lib
│   ├── bitcode
│   └── citus_decoders
└── share├── extension├── locale├── man├── timezonesets└── tsearch_data

(6)创建协调者和工作者的目录。

mkdir -p /home/postgres/citus_cluster/coordinator
mkdir -p /home/postgres/citus_cluster/worker1
mkdir -p /home/postgres/citus_cluster/worker2# 这里将以一个协调者和两个工作者来进行演示。

(7)实例化PostgreSQL数据库数据目录

/usr/pgsql-15/bin/initdb -D /home/postgres/citus_cluster/coordinator
/usr/pgsql-15/bin/initdb -D /home/postgres/citus_cluster/worker1
/usr/pgsql-15/bin/initdb -D /home/postgres/citus_cluster/worker2

(8)修改coordinator的postgres.conf配置文件中的以下参数。

port = 5432
shared_preload_libraries = 'citus'

(9)修改worker1的postgres.conf配置文件中的以下参数。

port = 5433
shared_preload_libraries = 'citus'

(10)修改worker2的postgres.conf配置文件中的以下参数。

port = 5434
shared_preload_libraries = 'citus'

(11)启动coordinator、worker1和worker。

/usr/pgsql-15/bin/pg_ctl \-D /home/postgres/citus_cluster/coordinator \-l logfile start/usr/pgsql-15/bin/pg_ctl \-D /home/postgres/citus_cluster/worker1 \-l logfile start/usr/pgsql-15/bin/pg_ctl \-D /home/postgres/citus_cluster/worker2 \-l logfile start

(12)登录coordinator、worker1和woker2创建数据库和Citus扩展。

-- coordinator节点
[postgres@mydb citus_cluster]$ /usr/pgsql-15/bin/psql 
psql (15.3)
Type "help" for help.postgres=# create database mydemodb;
CREATE DATABASE
postgres=# \c mydemodb 
You are now connected to database "mydemodb" as user "postgres".
mydemodb=# create extension citus;
CREATE EXTENSION
mydemodb=# -- woker1节点
[postgres@mydb citus_cluster]$ /usr/pgsql-15/bin/psql -p 5433
psql (15.3)
Type "help" for help.postgres=# create database mydemodb;
CREATE DATABASE
postgres=# \c mydemodb 
You are now connected to database "mydemodb" as user "postgres".
mydemodb=# create extension citus;
CREATE EXTENSION
mydemodb=# -- woker2节点
[postgres@mydb citus_cluster]$ /usr/pgsql-15/bin/psql -p 5434
psql (15.3)
Type "help" for help.postgres=# create database mydemodb;
CREATE DATABASE
postgres=# \c mydemodb 
You are now connected to database "mydemodb" as user "postgres".
mydemodb=# create extension citus;
CREATE EXTENSION
mydemodb=# 

(13)在coordinator节点上向集群添加worker节点。

[postgres@mydb citus_cluster]$ /usr/pgsql-15/bin/psql 
psql (15.3)
Type "help" for help.postgres=# \c mydemodb 
You are now connected to database "mydemodb" as user "postgres".
mydemodb=# select * from mastmydemodb=# select * from master_add_node('127.0.0.1',5433);master_add_node 
-----------------1
(1 row)mydemodb=# select * from master_add_node('127.0.0.1',5434);master_add_node 
-----------------2
(1 row)

(14)在coordinator节点上验证集群中的worker节点信息。

mydemodb=# select * from master_get_active_worker_nodes();# 输出的信息如下:node_name | node_port 
-----------+-----------127.0.0.1 |      5433127.0.0.1 |      5434
(2 rows)

(15)通过查询pg_dist_node表可以获取worker节点的详细信息。

mydemodb=# \x
mydemodb=# select * from pg_dist_node ;# 输出的信息如下:
-[ RECORD 1 ]----+----------
nodeid           | 1
groupid          | 1
nodename         | 127.0.0.1
nodeport         | 5433
noderack         | default
hasmetadata      | t
isactive         | t
noderole         | primary
nodecluster      | default
metadatasynced   | t
shouldhaveshards | t
-[ RECORD 2 ]----+----------
nodeid           | 2
groupid          | 2
nodename         | 127.0.0.1
nodeport         | 5434
noderack         | default
hasmetadata      | t
isactive         | t
noderole         | primary
nodecluster      | default
metadatasynced   | t
shouldhaveshards | t

至此Citus分布式数据库集群环境配置完成。

http://www.jsqmd.com/news/104449/

相关文章:

  • 2025年中国企业级AI Agent应用实践研究报告
  • 24、量子时代下的网络安全与区块链变革
  • 【赵渝强老师】PostgreSQL的内存结构
  • EmotiVoice能否用于法庭语音重建?中立情绪精准还原
  • AI点亮灯塔工厂,引领智能制造新范式
  • 2025年知识获取功能平台推荐:考试知识库导入、浏览器知识收 - myqiye
  • Python包管理告别龟速下载:uv工具国内镜像与离线安装实战
  • 2025年12月高压反应釜推荐品牌,选什么品牌能够助力企业选购适配需求的实验设备,附上选购建议 - 品牌推荐大师1
  • 【赵渝强老师】PostgreSQL的并行查询
  • 9、量子计算与区块链在金融服务领域的应用
  • 企业CI/CD选型指南:提效与安全如何兼得?CCI破解企业研发“不可能三角”
  • 最新昆明婚纱摄影星级排名新鲜出炉:三大优质机构深度测评+避坑指南 - charlieruizvin
  • EmotiVoice语音合成断点续传功能:大文件生成不中断
  • 展厅设计哪家靠谱?纪念馆展馆设计哪家好? - mypinpai
  • 我与C++的初遇:一段跨越时光的编程情缘
  • 太贵?爱创猫靠谱省钱
  • GB/T40032-2021《电动汽车换电安全要求》IPX9K防水测试
  • 如何提升零样本克隆的音质还原度?技巧分享
  • 高性价比之选:无线耳机选什么品牌?漫步者对比小米谁更具诚意?
  • Win11 查找并开启 IE 浏览器教程
  • 【赵渝强老师】PostgreSQL的控制文件
  • 使用windows记事本打开文件后,程序无法读取文件内容
  • 拿到Photoshop的源码了,发现两个意想不到的秘密......
  • 网络服务器防攻击设置通常不需要深入编程,但需要结合配置、工具和策略
  • 网络服务器防攻击设置通常不需要深入编程,但需要结合配置、工具和策略
  • SQL常用语法全解析:从入门到进阶的实战指南
  • 抱歉,C# 已经跌出第一梯队!
  • 基于SpringBoot的宠物医院管理系统(毕业设计项目源码+文档)
  • 基于Python的物业管理系统源码设计与文档
  • 抗衰老必选!NMN十大品牌评测,奥本元名列第一 - 资讯焦点