首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切分、复制和复制

切分、复制和复制
EN

Stack Overflow用户
提问于 2022-08-16 05:51:24
回答 1查看 239关注 0票数 1

我使用正式的停靠器和对接者组合指令来设置citus 11集群。我将集群缩放到5个工作节点,并创建了一个具有复制因子3的分布式表。

如果我关闭一个工作节点,我就希望Citus集群能够正常工作。但是当我测试的时候,通过阻止一名工人。整张桌子停下来工作。像select *或select (*)这样的简单查询将被阻塞,直到我重新启动worker节点。

所以,我的问题是,这是否意味着,Citus现在没有内置的高可用性功能?我对分片、复制和分布式查询引擎感到困惑。理论上,即使有一个节点关闭,集群中仍然有2个数据副本。Citus可以很容易地找到那些复制碎片,并从那里查询数据。这就是大多数分布式数据库的工作方式。

如果这是事实,增加服务器数量将显着地增加整个集群的故障率,如果我使用旧的热备用节点来复制每个工作人员,这将大大增加预算。

请告诉我我错了。我正试图规划一个SaaS服务,而关系数据库现在是该系统的唯一瓶颈。因此,我正在尝试制作一个“可伸缩的解决方案”,具有复杂的备份/恢复功能和高度可用的功能。

EN

回答 1

Stack Overflow用户

发布于 2022-08-30 08:18:53

Citus本机具有高可用性的读取查询,但是如果一个节点出现故障,写查询将失败(否则,它们将得到不同的数据)。

我的第一个问题是:你是如何阻止你的工人的?你停止了postgres程序吗?你关掉机器了吗?你把所有网络流量都堵住了吗?

在最后两种情况下,Linux内核可能还没有报告TCP套接字已损坏,因此citus只是继续等待响应。在许多分布式系统中,这是要考虑的问题,并且需要使用合适的TCP超时来配置客户机。这可以通过将以下内容放入postgresql.conf文件并重新加载/重新启动postgres来实现:

代码语言:javascript
复制
citus.node_conninfo = 'keepalives=1 keepalives_idle=30 keepalives_interval=15 keepalives_count=2 tcp_user_timeout=10000 connect_timeout=25 sslmode=require'

这些设置做了三件事:

  1. 检测到空闲缓存的连接在对方失去响应(30 + 15 *2)后最多60秒中断,如果对方10秒内不确认任何TCP消息,则将连接标记为
  2. ,允许20秒在连接尝试被认为失败之前成功地建立连接。

如果需要更严格的超时,可以相应地更改这些值。

推荐什么?

但是,对于高可用性,我们建议使用常规的postgres高可用性解决方案,比如Patroni或pg_auto_failover。这些也可以用于HA的写入。其中一些有用的资源是:https://laravel.wiki/62687acd9a725.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73369314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档