PG高可用之Citus分布式集群搭建及使用

0    517    4

👉 本文共约2768个字,系统预计阅读时间或需11分钟。

Citus集群简介

Citus是Postgres的开源扩展,将Postgres转换成一个分布式数据库,在集群的多个节点上分发数据和查询,具有像分片、分布式SQL引擎、复制表和分布式表等特性。

因为Citus是Postgres的扩展(而不是一个独立的代码分支),所以当你使用Citus时,你也在使用Postgres,可以利用最新的Postgres特性、工具和生态系统。

Citus是一款基于PostgreSQL的开源分布式数据库,自动继承了PostgreSQL强大的SQL支持能力和应用生态(不仅是客户端协议的兼容还包括服务端扩展和管理工具的完全兼容)。Citus是PostgreSQL的扩展(not a fork),采用shared nothing架构,节点之间无共享数据,由协调器节点和Work节点构成一个数据库集群。专注于高性能HTAP分布式数据库。

相比单机PostgreSQL,Citus可以使用更多的CPU核心,更多的内存数量,保存更多的数据。通过向集群添加节点,可以轻松的扩展数据库。与其他类似的基于PostgreSQL的分布式方案,比如Greenplum,PostgreSQL-XL相比,citus最大的不同在于它是一个PostgreSQL扩展而不是一个独立的代码分支。 Citus可以用很小的代价和更快的速度紧跟PostgreSQL的版本演进;同时又能最大程度的保证数据库的稳定性和兼容性。

Citus支持新版本PostgreSQL的特性,并保持与现有工具的兼容。 Citus使用分片和复制在多台机器上横向扩展PostgreSQL。它的查询引擎将在这些服务器上执行SQL进行并行化查询,以便在大型数据集上实现实时(不到一秒)的响应。

Citus集群由一个中心的协调节点(CN)和若干个工作节点(Worker)构成。

coordinate:协调节点,一般称为cn,存储所有元数据,不存实际数据,该节点直接对用户开放,等于一个客户端。
worker:工作节点,不存储元数据,存储实际数据。执行协调节点发来的查询请求。一般不直接对用户开放。

环境

PG高可用之Citus分布式集群搭建及使用

主机名IP角色端口备注
coordinate172.72.6.80coordinate5432安装PG 13.3 + Citus 10.2.4
worker1172.72.6.81worker5432安装PG 13.3 + Citus 10.2.4
worker2172.72.6.82worker5432安装PG 13.3 + Citus 10.2.4
worker3172.72.6.83worker5432安装PG 13.3 + Citus 10.2.4
worker4172.72.6.84worker5432安装PG 13.3 + Citus 10.2.4

防火墙修改

其中,coordinate节点的pg_hba.conf配置:

worker节点的pg_hba.conf配置:

安装citus

在每个节点上都安装citus,包括cn和dn。
可以在以下位置下载citus的源码:

https://github.com/citusdata/citus/releases

https://pgxn.org/dist/citus/10.2.4/

最新版本10.2.4,如下:

image-20220217123903211

安装过程:

集群配置

协调节点新增工作节点

管理操作仅仅在协调节点(cn)上操作:

创建分片表

有4个worker,所以数据分片为4,每个分片,做两个副本。

通过分片分布,如102008分布在172.72.6.81,172.72.6.82上,同理102009分布在172.72.6.82,172.72.6.83上。
假设6.81机器宕机了,集群访问102008原先是方位6.81的,现在会自动访问6.82上的102008分片。也就是说,单个数据节点故障,集群还能正常用,通过多设置副本,多个节点故障也能更强壮。

CN节点的进程:

DN节点的进程:

所有变量查询,可以使用tab键自动返回相关变量:

查看所有执行计划

默认情况下,Citus中查看执行计划会省略大部分不同节点的相同计划,如果想查看完整的查询计划,会话设置如下:

性能测试

参考:https://pgfans.cn/a/1274

这里,我做简单的一个压测,创建一个1000万的本地表和分片表,分别做读写测试,压测5分钟,threads=100:

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

测试过程

本地表:

分片表:

结果

环境测试类型TPSQPS
本地表读写1910.4839236.46
分片表读写1.26164.73

分片表比本地表的性能反而更差了,😂😂😂😂😂, 这个估计和服务器有关系,因为我这套系统是部署再同一台主机上的。算了,等后续有服务器的时候,再测试一次。

    头像

    小麦苗

    学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

    您可能还喜欢...

    发表评论

    您的电子邮箱地址不会被公开。

    1 + 13 =

     

    嘿,我是小麦,需要帮助随时找我哦
    • 18509239930
    • 个人微信

    • 麦老师QQ聊天
    • 个人邮箱
    • 点击加入QQ群
    • 个人微店

    • 回到顶部
    返回顶部