Citus 多CN部署与Citus MX

简介: Citus MX是Citus集群中横向扩展CN能力的技术,本文件聊一下Citus MX使用的话题

再谈Citus 多CN部署与Citus MX

Citus集群由Coordinator(CN节点)和Worker节点组成。CN节点上放元数据负责SQL分发; Worker节点上放实际的分片,各司其职。
但是,Citus里它们的功能也可以灵活的转换。

1. Worker as CN

当一个普通的Worker上存储了元数据后,就有了CN节点分发SQL的能力,可以分担CN的负载。
这样的Worker按官方的说法,叫做Citus MX节点。

配置Citus MX的前提条件为Citus的复制模式必须配置为streaming。即不支持在多副本的HA部署架构下使用

citus.replication_model = streaming

然后将普通的Worker变成Citus MX节点

select start_metadata_sync_to_node('127.0.0.1',9002);

默认情况下,Citus MX节点上也会分配分片。官方的Citus MX架构中,Citus MX集群中所有Worker都是Citus MX节点。

如果我们只想让少数几个Worker节点专门用于分担CN负载,那么这些节点上是不需要放分片的。
可以通过设置节点的shouldhaveshards属性进行控制。

SELECT master_set_node_property('127.0.0.1', 9002, 'shouldhaveshards', false);

2. CN as Worker

Citus里CN节点也可以作为一个Worker加到集群里。

SELECT master_add_node('127.0.0.1', 9001, groupid => 0);

CN节点作为Worker后,参考表也会在CN上存一个副本,但默认分片是不会存在上面的。
如果希望分片也在CN上分配,可以把CN的shouldhaveshards属性设置为true。

SELECT  master_set_node_property('127.0.0.1', 9001, 'shouldhaveshards', true);

配置后Citus集群成员如下:

postgres=# select * from pg_dist_node;
 nodeid | groupid | nodename  | nodeport | noderack | hasmetadata | isactive | noderole | nodecluster | metadatasynced | shouldhaveshards 
--------+---------+-----------+----------+----------+-------------+----------+----------+-------------+----------------+------------------
      1 |       1 | 127.0.0.1 |     9001 | default  | f           | t        | primary  | default     | f              | t
      3 |       0 | 127.0.0.1 |     9000 | default  | t           | t        | primary  | default     | f              | t
      2 |       2 | 127.0.0.1 |     9002 | default  | t           | t        | primary  | default     | t              | f
(3 rows)

把CN作为Worker用体现了Citus的灵活性,但是其适用于什么场景呢?

官方文档的举的一个例子是,本地表和参考表可以Join。

这样的场景我们确实有,那个系统的表设计是:明细表分片,维表作参考表,报表作为本地表。
报表之所以做成本地表,因为要支持高并发访问,但是又找不到合适的分布键让所有SQL都以路由方式执行。
报表做成参考表也不合适,副本太多,影响写入速度,存储成本也高。

那个系统用的Citus 7.4,还不支持这种用法。当时为了支持报表和参考表的Join,建了一套本地维表,通过触发器确保本地维表和参考维表同步。

3. 分片隐藏

在Citus MX节点(含作为Worker的CN节点)上,默认shard是隐藏的,即psql的'd'看不到shard表,只能看到逻辑表。
Citus这么做,可能是担心有人误操作shard表。

如果想在Citus MX节点上查看有哪些shard以及shard上的索引。可以使用下面的视图。

  • citus_shards_on_worker
  • citus_shard_indexes_on_worker

或者设置下面的参数

citus.override_table_visibility = false

4. Citus是怎么隐藏分片的?

Citus的plan hook(distributed_planner)中篡改了pg_table_is_visible函数,将其替换成citus_table_is_visible
这个隐藏只对依赖pg_table_is_visible函数的地方有效,比如psql的\d。直接用SQL访问shard表是不受影响的。

static bool
ReplaceTableVisibleFunctionWalker(Node *inputNode)
{
...
        if (functionId == PgTableVisibleFuncId())
        {
            ...
            functionToProcess->funcid = CitusTableVisibleFuncId();
        ...

5. Citus多CN方案的限制和不足

  1. 不能和多副本同时使用
  2. Citus MX节点不能访问本地表
  3. 不能控制Citus MX节点上不部署参考表

6. 参考

相关文章
|
5月前
|
SQL 关系型数据库 MySQL
由于Flink CDC在同步MySQL数据时,没有正确地处理并行度和server-id导致的
由于Flink CDC在同步MySQL数据时,没有正确地处理并行度和server-id导致的
155 1
|
SQL 存储 大数据
SQL Server 跨版本数据迁移实践
SQL Server 的导入和导出向导是一个非常有用的工具,可以帮助用户快速导入和导出数据,而无需编写复杂的 SQL 查询或程序代码。使用导入和导出向导,用户可以选择数据源、目标数据、映射源和目标列、指定导入或导出选项以及完成导入或导出操作,整个使用体验也非常简单便捷。
243 0
|
12月前
|
关系型数据库 MySQL 网络安全
PolarDB-X中的DN启动不了的问题
PolarDB-X中的DN启动不了的问题
72 0
|
SQL 安全 关系型数据库
RDS SQL Server通过配置镜像为高性能模式提高写入性能
RDS SQL Server通过配置镜像为高性能模式提高写入性能
|
存储 NoSQL 分布式数据库
Kudu 架构(master\tablet server) | 学习笔记
快速学习 Kudu 架构(master\tablet server)
398 0
Kudu 架构(master\tablet server) | 学习笔记
|
存储 SQL 负载均衡
Citus 11 for Postgres 完全开源,可从任何节点查询(Citus 官方博客)
Citus 11.0 来了! Citus 是一个 PostgreSQL 扩展,它为 PostgreSQL 添加了分布式数据库的超能力。 使用 Citus,您可以创建跨 PostgreSQL 节点集群透明分布或复制的表。 Citus 11.0 是一个新的主版本,这意味着它带有一些非常令人兴奋的新功能,可以实现更高级别的可扩展性。
461 1
Citus 11 for Postgres 完全开源,可从任何节点查询(Citus 官方博客)
|
关系型数据库 测试技术 OLTP
PostgreSQL sharding : citus 系列1 - 多机部署(含OLTP(TPC-B)测试)- 含Citus MX模式
标签 PostgreSQL , citus , tpc-b , cn mx 背景 《(TPC-H测试 SF=10) PostgreSQL 11 vs 10 vs Deepgreen》 测试结果证明PG已经是一个HTAP数据库,可以同时满足OLTP,OLAP的需求。
2776 0
|
SQL 关系型数据库 OLAP
PostgreSQL sharding : citus 系列5 - worker节点网络优化
标签 PostgreSQL , citus , pgbouncer , 网络优化 , worker节点 背景 citus 节点间的网络需求: 1、cn节点访问所有worker节点。oltp业务的访问较频繁。
1465 0
|
SQL 负载均衡 关系型数据库
RDS 发布 SQL Server AlwaysOn集群版
信息摘要: RDS 发布 SQL Server AlwaysOn 集群版,支持创建只读实例,实现业务读写分离架构适用客户: 使用SQL Server的客户,客户对数据库有读写分离的需求,期望利用只读实例实现读业务的分离,如数据的统计智能分析、业务热点流量分担等。
1533 0
|
SQL 关系型数据库 存储
citus实战系列之四多CN部署
citus的架构中正常只有1个CN节点,有时候CN会成为性能瓶颈。我们可以通过减少分片数,垂直扩容CN节点等手段缓解CN的性能问题,但这些都不能治本。某些业务场景部署多个CN节点是非常必要的。
4772 0