首页 > 其他分享 >Ciuts的MX模式

Ciuts的MX模式

时间:2024-12-13 09:03:20浏览次数:5  
标签:dist 模式 MX col Ciuts test table public chengang

Ciuts的MX模式

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

1. 什么是MX模式?

MX模式是Citus的扩展,允许app直接连接work节点进行数据的读取和写入并增加集群的并发数量,类似于多CN的架构。

2. MX原理

Citus将分布式表的元信息存储在系统表,当work节点拥有这些元信息后,便可以提供数据的读取和写入服务。

3. Citus版本:

Citus社区版
Citus商业版
Cloud [AWS,citus cloud]

我们通常使用的是社区版,而社区版存在其中一个限制是CN可能成为性能瓶颈;因为社区版只支持一个coordinator。

citus的架构中正常只有1个CN节点,有时候CN会成为性能瓶颈。在citus的具体实现中,CN和worker的区别就在于是否存储了相关的元数据,如果把CN的元数据拷贝一份到worker上,那么worker也可以向CN一样工作,这个多CN的模式早期被称做masterless。citus有一个开关,打开后,会自动拷贝CN的元数据到Worker上,让worker也可以当CN用。 这个功能官方称做Citus MX,社区版虽然没有公开说支持,但也没有从代码上限制这个功能。

4 Citus MX开启的前提:

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

5 Citus MX测试:

5.1 部署

5.2 分片参数调整

postgres=# show citus.shard_replication_factor;
 citus.shard_replication_factor 
--------------------------------
 1
(1 row)

postgres=# set citus.shard_replication_factor =2;
SET
postgres=# select pg_reload_conf();  
 pg_reload_conf 
----------------
 t
(1 row)

1.5.3 创建worker节点

postgres=# select * from master_add_node('172.16.166.52',5435);
 master_add_node 
-----------------
               1
(1 row)

postgres=# select * from master_add_node('172.16.166.53',5435);
 master_add_node 
-----------------
               2
(1 row)

postgres=# select * from master_get_active_worker_nodes();     
   node_name   | node_port 
---------------+-----------
 172.16.166.53 |      5435
 172.16.166.52 |      5435
(2 rows)

postgres=# select * from pg_dist_node;
 nodeid | groupid |   nodename    | nodeport | noderack | hasmetadata | isactive | noderole | nodecluster | metadatasynced | shouldhaveshards 
--------+---------+---------------+----------+----------+-------------+----------+----------+-------------+----------------+------------------
      1 |       1 | 172.16.166.52 |     5435 | default  | f           | t        | primary  | default     | f              | t
      2 |       2 | 172.16.166.53 |     5435 | default  | f           | t        | primary  | default     | f              | t
(2 rows)

1.5.4 MX节点配置

postgres=# SELECT citus_add_node('172.16.166.52',5435);
 citus_add_node 
----------------
              1
(1 row)

postgres=# SELECT start_metadata_sync_to_node('172.16.166.52', 5435);   
 start_metadata_sync_to_node 
-----------------------------
 
(1 row)

1.5.5 创建测试表

postgres=# create table test(id serial,updatetime timestamptz default now());
CREATE TABLE
postgres=# create table test_dist(id serial,updatetime timestamptz default now());
CREATE TABLE
postgres=# create table test_ref(id serial,updatetime timestamptz default now());
CREATE TABLE
postgres=# create table test_col(id serial,updatetime timestamptz default now());
CREATE TABLE

postgres=# insert into test select generate_series(1,100);	
INSERT 0 100
postgres=# insert into test_dist select generate_series(1,100);
INSERT 0 100
postgres=# insert into test_ref select generate_series(1,100);	
INSERT 0 100
postgres=# insert into test_col select generate_series(1,100);
INSERT 0 100

1.5.6 创建各类分片表

# 分片表:
postgres=# select create_distributed_table('test_dist','id');
 create_distributed_table 
--------------------------
 
(1 row)

# 亲和表:
postgres=# select create_distributed_table('test_col','id',colocate_with =>'test_dist');
NOTICE:  Copying data from local table...
NOTICE:  copying the data has completed
DETAIL:  The local data in the table is no longer visible, but is still on disk.
HINT:  To remove the local data, run: SELECT truncate_local_data_after_distributing_table($$public.test_col$$)
 create_distributed_table 
--------------------------
 
(1 row)

# 引用表(参考表):
postgres=# select create_reference_table('test_ref');
NOTICE:  Copying data from local table...
NOTICE:  copying the data has completed
DETAIL:  The local data in the table is no longer visible, but is still on disk.
HINT:  To remove the local data, run: SELECT truncate_local_data_after_distributing_table($$public.test_ref$$)
 create_reference_table 
------------------------
 
(1 row)

1.5.7 各节点查询测试

CN节点:

postgres=# \dt
           List of relations
 Schema |   Name    | Type  |  Owner   
--------+-----------+-------+----------
 public | test      | table | chengang
 public | test_col  | table | chengang
 public | test_dist | table | chengang
 public | test_ref  | table | chengang
(4 rows)

MX节点、worker节点1:

postgres=#  \dt
           List of relations
 Schema |   Name    | Type  |  Owner   
--------+-----------+-------+----------
 public | test_col  | table | chengang
 public | test_dist | table | chengang
 public | test_ref  | table | chengang
(3 rows)

worker节点2:

postgres=#  \dt
              List of relations
 Schema |       Name       | Type  |  Owner   
--------+------------------+-------+----------
 public | test_col_102041  | table | chengang
 public | test_col_102043  | table | chengang
 public | test_col_102045  | table | chengang
 public | test_col_102047  | table | chengang
 public | test_col_102049  | table | chengang
 public | test_col_102051  | table | chengang
 public | test_col_102053  | table | chengang
 public | test_col_102055  | table | chengang
 public | test_col_102057  | table | chengang
 public | test_col_102059  | table | chengang
 public | test_col_102061  | table | chengang
 public | test_col_102063  | table | chengang
 public | test_col_102065  | table | chengang
 public | test_col_102067  | table | chengang
 public | test_col_102069  | table | chengang
 public | test_col_102071  | table | chengang
 public | test_dist_102009 | table | chengang
 public | test_dist_102011 | table | chengang
 public | test_dist_102013 | table | chengang
 public | test_dist_102015 | table | chengang
 public | test_dist_102017 | table | chengang
 public | test_dist_102019 | table | chengang
 public | test_dist_102021 | table | chengang
 public | test_dist_102023 | table | chengang
 public | test_dist_102025 | table | chengang
 public | test_dist_102027 | table | chengang
 public | test_dist_102029 | table | chengang
 public | test_dist_102031 | table | chengang
 public | test_dist_102033 | table | chengang
 public | test_dist_102035 | table | chengang
 public | test_dist_102037 | table | chengang
 public | test_dist_102039 | table | chengang
 public | test_ref_102072  | table | chengang
(33 rows)

可以看到在同时作为MX节点的worker节点1上,在默认情况下,通过\dt只能看到各类分片表的元数据表,而看不到普通worker节点上的各个元数据表的实际分片(表),可以通过如下两种方法查看:
方法1.配置参数override_table_visibility为off或false

postgres=# show citus.override_table_visibility ;     
 citus.override_table_visibility 
---------------------------------
 on
(1 row)

postgres=# set citus.override_table_visibility =false;
SET
postgres=#  \dt
              List of relations
 Schema |       Name       | Type  |  Owner   
--------+------------------+-------+----------
 public | test_col         | table | chengang
 public | test_col_102040  | table | chengang
 public | test_col_102042  | table | chengang
 public | test_col_102044  | table | chengang
 public | test_col_102046  | table | chengang
 public | test_col_102048  | table | chengang
 public | test_col_102050  | table | chengang
 public | test_col_102052  | table | chengang
 public | test_col_102054  | table | chengang
 public | test_col_102056  | table | chengang
 public | test_col_102058  | table | chengang
 public | test_col_102060  | table | chengang
 public | test_col_102062  | table | chengang
 public | test_col_102064  | table | chengang
 public | test_col_102066  | table | chengang
 public | test_col_102068  | table | chengang
 public | test_col_102070  | table | chengang
 public | test_dist        | table | chengang
 public | test_dist_102008 | table | chengang
 public | test_dist_102010 | table | chengang
 public | test_dist_102012 | table | chengang
 public | test_dist_102014 | table | chengang
 public | test_dist_102016 | table | chengang
 public | test_dist_102018 | table | chengang
 public | test_dist_102020 | table | chengang
 public | test_dist_102022 | table | chengang
 public | test_dist_102024 | table | chengang
 public | test_dist_102026 | table | chengang
 public | test_dist_102028 | table | chengang
 public | test_dist_102030 | table | chengang
 public | test_dist_102032 | table | chengang
 public | test_dist_102034 | table | chengang
 public | test_dist_102036 | table | chengang
 public | test_dist_102038 | table | chengang
 public | test_ref         | table | chengang
 public | test_ref_102072  | table | chengang
(36 rows)

可以看到在执行set citus.override_table_visibility =false后,该节点除了可以看到各个分片表的元数据表,还能看到他们的实际的分片表。

方法2.查询citus_shards_on_worker视图:

postgres=# select * from citus_shards_on_worker;
 Schema |       Name       | Type  |  Owner   
--------+------------------+-------+----------
 public | test_col_102040  | table | chengang
 public | test_col_102042  | table | chengang
 public | test_col_102044  | table | chengang
 public | test_col_102046  | table | chengang
 public | test_col_102048  | table | chengang
 public | test_col_102050  | table | chengang
 public | test_col_102052  | table | chengang
 public | test_col_102054  | table | chengang
 public | test_col_102056  | table | chengang
 public | test_col_102058  | table | chengang
 public | test_col_102060  | table | chengang
 public | test_col_102062  | table | chengang
 public | test_col_102064  | table | chengang
 public | test_col_102066  | table | chengang
 public | test_col_102068  | table | chengang
 public | test_col_102070  | table | chengang
 public | test_dist_102008 | table | chengang
 public | test_dist_102010 | table | chengang
 public | test_dist_102012 | table | chengang
 public | test_dist_102014 | table | chengang
 public | test_dist_102016 | table | chengang
 public | test_dist_102018 | table | chengang
 public | test_dist_102020 | table | chengang
 public | test_dist_102022 | table | chengang
 public | test_dist_102024 | table | chengang
 public | test_dist_102026 | table | chengang
 public | test_dist_102028 | table | chengang
 public | test_dist_102030 | table | chengang
 public | test_dist_102032 | table | chengang
 public | test_dist_102034 | table | chengang
 public | test_dist_102036 | table | chengang
 public | test_dist_102038 | table | chengang
 public | test_ref_102072  | table | chengang
(33 rows)

标签:dist,模式,MX,col,Ciuts,test,table,public,chengang
From: https://www.cnblogs.com/zreo2home/p/18603989

相关文章

  • 转载:【AI系统】微分计算模式
    上一篇文章简单了解计算机中常用几种微分方式。本文将深入介绍AI框架离不开的核心功能:自动微分。而自动微分则是分为前向微分和后向微分两种实现模式,不同的实现模式有不同的机制和计算逻辑,而无论哪种模式都离不开雅克比矩阵,所以我们也会深入了解一下雅克比矩阵的原理。雅克比......
  • 探索自闭症寄宿学校的专属教育模式
    在教育的广阔天地中,有一群特殊的孩子,他们或因孤独症(自闭症)、ADHD(注意力缺陷多动障碍)、谱系障碍、发育迟缓、注意力缺失等问题,而在学习和社交上遇到重重困难。然而,正是这些孩子,更需要我们用心去理解、去关爱、去教育。星贝育园康复中心,作为全国规模较大的广泛性发育障碍全托寄宿......
  • 设计模式学习之——单例模式
    单例模式(SingletonPattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。这个模式的主要目的是控制对象的创建,确保在程序的整个生命周期中,某个类只有一个实例被创建和使用。(单例模式应该也是我们最熟悉的设计模式之一了,多少次面试环节中必......
  • 蓝桥杯嵌入式模板创建(STM32 CubeMx简单使用教程)
    蓝桥杯嵌入式新板模板创建&简单经验分享补充在最前:以下原文是22年还未毕业时写的,仅在把板子二手卖给别人的时候给别人分享了这份笔记。那时经验不多,现在也由于工作使用的芯片不同已很久没有使用CubeMX了,因此文章可能有很多错漏之处,欢迎在评论区指出。备注在前:uint8_t即un......
  • Java 设计模式——从冰雪经济看设计模式的综合运用(工厂、单例、策略、观察者)
    当冬季的寒风拂过大地,冰雪经济如同一颗璀璨的明珠,在寒冷中散发着炽热的魅力。滑雪场、冰雕展、冰雪主题酒店等各类冰雪产业蓬勃发展,其背后的运营逻辑和策略,与Java设计模式有着奇妙的相似之处,为我们深入理解和运用Java设计模式提供了独特的视角。一、工厂模式:冰雪项目的“生产......
  • 影响高层管理人员的薪酬模式有哪些?
    影响高层管理人员的薪酬模式有哪些?在构建和优化高层管理人员(简称“高管”)的薪酬体系时,我们需深刻认识到这些企业领航者不仅是战略的执行者,更是推动企业持续发展的核心驱动力。他们以其深厚的经营管理才能、敏锐的市场洞察力以及勇于承担风险的精神,引领企业破浪前行。在当今以......
  • 一个实例用全创建型模式-优化(冗余消除)
     上一篇:一个实例用全创建型模式-CSDN博客目录:《一个实例讲完23种设计模式》当前:单件+抽象工厂+创建者+工厂方法+优化需求:坦克大战创建两种坦克坦克类型   射程   速度b70   70米   时/70公里b50   50米   时/50公里设计说明1.抽象工......
  • 代理模式
    ​代理(Proxy)模式属于结构型模式的一种。代理模式为其他对象提供一种代理以控制对这个对象的访问。Java内置的RMI机制就是一个远程代理模式。JDBC的连接池返回的JDBC连接(Connection对象)是一个虚代理,到执行JDBC查询或更新操作时,才真正创建连接。用代理对象控制对原始对象的访问,是......
  • 前端必须掌握的设计模式——工厂模式
    目录定义简单工厂标准工厂抽象工厂总结定义    工厂模式(FactoryPattern)属于创建型设计模式。指的是利用工厂这个媒介,提供统一的接口,从而获得对象。对于客户端而言,只需将创建对象的命令告诉工厂,具体的创建逻辑客户端是不知道的。        工厂模式可......
  • 转载:【AI系统】CUDA 编程模式
    前面的文章对AI芯片SIMD和SIMT计算本质进行了分析,结合英伟达CUDA实现对SIMD和SIMT进行了对比,本文将以英伟达GPU为例,讲解GPU的编程模型。GPU编程模型CUDA英伟达公司于2007年发布了CUDA,支持编程人员利用更为通用的方式对GPU进行编程,更好地发挥底层硬件强大......