当Citus添加工作节点时报错---citus_add_node(‘database-2‘, 5433)

不得不说,毕业设计push我学习了很多新鲜的知识

具体报错

由于硬件条件不允许,我在两台虚拟机上部署了三个postgresql以组成一个协调节点和两个工作节点的集群,其中database-1节点上部署了一个工作节点,另外一个称为database-2.

在将database-2上的工作节点添加到协调节点时,遇到以下报错:

alfresco=# SELECT * FROM citus_add_node('database-2',5433);
WARNING:  function assign_distributed_transaction_id(integer, integer, unknown) does not exist
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
ERROR:  failure on connection marked as essential: database-2:5433

我们可以看到这里很奇怪的一个点是:SQL语句把我的两个参数看成了三个参数!!!

进一步查看具体的报错:

2025-02-10 09:12:50.399 UTC [37696] ERROR:  relation "pg_dist_node_metadata" does not exist at character 51
2025-02-10 09:12:50.399 UTC [37696] STATEMENT:  SELECT metadata ->> 'server_id' AS server_id FROM pg_dist_node_metadata
2025-02-10 09:12:50.401 UTC [37696] ERROR:  function assign_distributed_transaction_id(integer, integer, unknown) does not exist at character 57
2025-02-10 09:12:50.401 UTC [37696] HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
2025-02-10 09:12:50.401 UTC [37696] STATEMENT:  BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;SELECT assign_distributed_transaction_id(0, 9, '2025-02-10 09:12:50.39956+00');
2025-02-10 09:18:27.824 UTC [38093] ERROR:  relation "pg_dist_node_metadata" does not exist at character 51
2025-02-10 09:18:27.824 UTC [38093] STATEMENT:  SELECT metadata ->> 'server_id' AS server_id FROM pg_dist_node_metadata
2025-02-10 09:18:27.851 UTC [38093] ERROR:  function assign_distributed_transaction_id(integer, integer, unknown) does not exist at character 57
2025-02-10 09:18:27.851 UTC [38093] HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
2025-02-10 09:18:27.851 UTC [38093] STATEMENT:  BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;SELECT assign_distributed_transaction_id(0, 1, '2025-02-10 09:18:27.824706+00');

出现了metadata的问题

进一步发现是该工作节点并没有安装上Citus extension,安装后可正常运行

alfresco=# SELECT * FROM citus_get_active_worker_nodes();
 node_name  | node_port
------------+-----------
 database-2 |      5433
 database-1 |      5432
(2 rows)

Citus

Citus 简介

1. 什么是 Citus

Citus 是一个开源的 PostgreSQL 扩展,将 PostgreSQL 数据库转换为分布式数据库。它提供了 PostgreSQL 的所有优点,无论规模如何,从单个节点到大型分布式数据库集群。Citus 结合了并行性、在内存中保留更多数据和更高的 I/O 带宽,可以显著提高多租户 SaaS 应用程序、面向客户的实时分析仪表板和时间序列工作负载的性能。

2. Citus 的功能
  • 分片和分布式表:Citus 支持将数据根据分片键自动分布到集群的不同节点上。

  • 分布式查询引擎:Citus 可以并行化查询执行,并随集群中工作节点的数量线性扩展。

  • 引用表和本地表:Citus 提供了引用表(在每个工作节点上复制)和本地表(存储在单个工作节点上),以满足不同的查询需求。

  • 高可用性和备份:Citus 支持 PostgreSQL 的复制机制,提供高可用性和数据备份。

3. Citus 的架构

Citus 集群由一个协调节点(coordinator)和多个工作节点(workers)构成:

  • 协调节点:存储元数据,接收客户端请求,并生成分布式执行计划。

  • 工作节点:存储实际数据,执行协调节点发来的查询请求。

4. Citus 的应用场景
  • 多租户数据库:Citus 支持为每个租户提供快速查询,分片逻辑在数据库中实现,而不是在应用程序中。

  • 实时分析:Citus 支持对大型数据集的实时查询,适用于事件系统和时间序列数据。

  • 高性能增删改查:Citus 可以处理高并发的增删改查操作。

  • 数据仓库:Citus 可以作为数据仓库使用,支持大规模数据的存储和查询。

5. Citus 的优势
  • 完整的 SQL 覆盖:Citus 支持完整的 SQL 功能,包括事务处理和 ACID 特性。

  • 水平扩展:Citus 支持水平扩展,可以通过添加新的工作节点来处理更多数据。

  • 高并发性能:Citus 可以在高并发下保持高性能,支持大量并发用户。

6. 使用 Citus 的注意事项
  • 数据模型和 SQL 功能的选择:Citus 的高性能需要考虑数据模型和 SQL 功能的选择。

  • 适用场景:Citus 适用于需要分布式处理和高并发的场景,但对于单节点 PostgreSQL 可以满足需求的场景,Citus 可能是不必要的。

总结

Citus 是一个强大的 PostgreSQL 扩展,将 PostgreSQL 转换为分布式数据库,适用于处理大规模数据集和高并发场景。它提供了分片、分布式查询引擎、引用表和本地表等功能,支持多租户数据库、实时分析、高性能增删改查和数据仓库等应用场景。

文档推荐

Citus集群拓扑结构介绍icon-default.png?t=O83Ahttps://zhuanlan.zhihu.com/p/374819244Citus Documentation icon-default.png?t=O83Ahttps://docs.citusdata.com/en/stable/index.html

如何在一台虚拟机上安装两个postgresql?

不需要把软件安装两遍,创建两个实例即可

user: postgres

准备环境(有很多命令都是在postgresql目录下的)

export PATH=$PATH:/usr/lib/postgresql/15/bin

首先创建一个区别于之前工作目录的文件夹

mkdir /var/lib/postgresql/15/worker

初始化工作目录:会生成各种配置文件

initdb -D /var/lib/postgresql/15/worker

此时不能直接启动,需要修改postgresql.conf和pg_hba.conf文件

postgresql.conf文件

# -----------------------------
# PostgreSQL configuration file
# -----------------------------

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'                  # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5433                             # (change requires restart)
max_connections = 100                   # (change requires restart)

#------------------------------------------------------------------------------
# CUSTOMIZED OPTIONS
#------------------------------------------------------------------------------

# Add settings for extensions here
shared_preload_libraries = 'citus'

pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     md5
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

重启postgresql:

systemctl restart postgresql

由于postgresql的管理问题,有可能postgresql这个service的status显示为active,但是事实上仍有错误出现。为了避免这种情况,进一步查看它的主要service:

systemctl status [email protected]

没有问题后,启动服务:

pg_ctl -D /var/lib/postgresql/15/worker -l worker_logfile start

work_logfile会被创建在当前工作目录下,用于记录日志,有报错时可以查看

验证是否启动成功:

pg_ctl -D /var/lib/postgresql/15/worker -o "-p 5433" status

如配置成功则显示running

其余集群相关配置请参考官方文档:

Ubuntu or Debian — Single Nodeicon-default.png?t=O83Ahttps://docs.citusdata.com/en/stable/installation/single_node_debian.html

Ubuntu or Debian — Multi-Nodeicon-default.png?t=O83Ahttps://docs.citusdata.com/en/stable/installation/multi_node_debian.html

你可能感兴趣的:(数据库)