【转载】Citus架构介绍既实验总结

【转载】Citus架构介绍既实验总结1 Citus 是什么是 PostgreSQL 的扩展 可以同 PG 一同安装 之后通过 SQL 命令加入到数据库中

大家好,欢迎来到IT知识分享网。

1. Citus是什么

是PostgreSQL的扩展,可以同PG一同安装,之后通过SQL命令加入到数据库中。

【相关操作】

#创建Citus扩展: CREATE EXTENSION citus; 

2. 节点

2.1. 协调节点(coordinator node,简称CN)

存储所有的元数据,不存储实际数据。为应用系统提供服务,向各工作节点发送查询请求,并汇总结果。对于应用系统而言是服务端,对于工作节点而言有点像客户端。

2.2. 工作节点(worker node,简称WN)

#在协调节点上增加工作节点: SELECT * from master_add_node('192.168.7.130', 5432); SELECT * from master_add_node('192.168.7.131', 5432); SELECT * from master_add_node('192.168.7.132', 5432); #查看工作节点: SELECT * FROM master_get_active_worker_nodes(); node_name | node_port ---------------+----------- 192.168.7.130 | 5432 192.168.7.131 | 5432 192.168.7.132 | 5432 

3. 分片(shards)与副本(placement)

将同一张逻辑表中的数据按照一定策略,分别存储到不同的物理表中去。物理表被称为分片。分片和工作节点是不同的概念,同一个工作节点上可以放置许多的分片,甚至可以将一张逻辑表分为两个分片,并将这两个分片都存储在同一个工作节点上。

分片原则:

在设计分布式数据库的时候,设计者必须考虑数据如何分布在各个场地上,也就是全局数据应该如何进行逻辑划分和物理划分。哪些数据应该分布式存放,哪些不需要分布式存放,哪些数据需要复制。对系统惊醒全盘考虑,使系统性能最优。但是无论如何进行分片都应该遵循以下原则:

  • 完备性:所有全局数据都要映射到某个片段上。
  • 可重构性:所有片段必须可以重新构成全局数据。
  • 不相交性:划分的个片段所包含的数据无交集。
#配置分片策略(在CN上创建表之后): SELECT master_create_distributed_table('test_table', 'id', 'hash'); #进行分片操作(将表分为3片,每个分片有2个副本): SELECT master_create_worker_shards('test_table', 3, 2); #查看分片: SELECT * from pg_dist_shard; logicalrelid | shardid | shardstorage | shardminvalue | shardmaxvalue --------------+---------+--------------+---------------+--------------- test_table |  | t | - | - test_table |  | t | - | - test_table |  | t | - | - #查看分片分布: SELECT * from pg_dist_shard_placement order by shardid, placementid; shardid | shardstate | shardlength | nodename | nodeport | placementid ---------+------------+-------------+---------------+----------+-------------  | 1 | 0 | 192.168.7.130 | 5432 | 33  | 1 | 0 | 192.168.7.131 | 5432 | 34  | 1 | 0 | 192.168.7.131 | 5432 | 35  | 1 | 0 | 192.168.7.132 | 5432 | 36  | 1 | 0 | 192.168.7.132 | 5432 | 37  | 1 | 0 | 192.168.7.130 | 5432 | 38 

从上面的分析可以看出,表test_table被分成了3个分片(,,),每个分片有2个副本,分别存储在相邻的两个节点上。如下图所示。

分片分布表中shardstate为1时,表示当前副本的状态是有效(同步)的;shardstate为3时,表示当前副本的状态是有无效(失步)的。

4. 数据访问

5. 分片修复

【相关操作】

#先查看分片分布: SELECT * from pg_dist_shard_placement order by shardid, placementid; shardid | shardstate | shardlength | nodename | nodeport | placementid ---------+------------+-------------+---------------+----------+-------------  | 1 | 0 | 192.168.7.130 | 5432 | 33  | 1 | 0 | 192.168.7.131 | 5432 | 34  | 1 | 0 | 192.168.7.131 | 5432 | 35  | 3 | 0 | 192.168.7.132 | 5432 | 36  | 1 | 0 | 192.168.7.132 | 5432 | 37  | 1 | 0 | 192.168.7.130 | 5432 | 38 #用35号副本的数据去覆盖36号副本: SELECT master_copy_shard_placement(, '192.168.7.131', 5432, '192.168.7.132', 5432); #再次查看分片分布: SELECT * from pg_dist_shard_placement order by shardid, placementid; shardid | shardstate | shardlength | nodename | nodeport | placementid ---------+------------+-------------+---------------+----------+-------------  | 1 | 0 | 192.168.7.130 | 5432 | 33  | 1 | 0 | 192.168.7.131 | 5432 | 34  | 1 | 0 | 192.168.7.131 | 5432 | 35  | 1 | 0 | 192.168.7.132 | 5432 | 36  | 1 | 0 | 192.168.7.132 | 5432 | 37  | 1 | 0 | 192.168.7.130 | 5432 | 38 #可见36号副本已经修复。 

当且仅当分片时设置了副本数量大于1,且该分片目前存在有效副本时,才可以进行修复。从目前已知的情况来看,citus不能自动修复。可以通过开发守护进程检测各个节点和副本的状态,当发现出现失效副本时,在服务程序中调用master_copy_shard_placement的方法实现自动修复。

  1. 集群性能

通过搭建基于PostgreSQL10的1CN+2WN的Citus集群环境(两分片,单副本)和单节点传统PostgreSQL10进行对比的方法,采用PgBench测试工具的TPC-B模式,在记录数100万的情况下得出如下结果:TPS[Citus]=258,TPS[PG10]=688。即该配置下Citus集群的整体读写效率为传统单节点PG10的37.5%。

通过合理的分片,使得大多数操作可以直接在WN进行,能有有效的提高Citus集群的效率,但是在存在副本的情况下,需要应用程序人为的保证Citus系统同一分片的不同副本间的一致性。


免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/133519.html

(0)
上一篇 2025-07-22 15:15
下一篇 2025-07-22 15:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信