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 |      5432192.168.7.131 |      5432192.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   |  102001 | t            | -2147483648   | -1610612737test_table   |  102002 | t            | -1610612736   | -1073741825test_table   |  102003 | t            | -1073741824   | -536870913
#查看分片分布:
SELECT * from pg_dist_shard_placement order by shardid, placementid;shardid | shardstate | shardlength |   nodename    | nodeport | placementid
---------+------------+-------------+---------------+----------+-------------102001 |          1 |           0 | 192.168.7.130 |     5432 |          33102001 |          1 |           0 | 192.168.7.131 |     5432 |          34102002 |          1 |           0 | 192.168.7.131 |     5432 |          35102002 |          1 |           0 | 192.168.7.132 |     5432 |          36102003 |          1 |           0 | 192.168.7.132 |     5432 |          37102003 |          1 |           0 | 192.168.7.130 |     5432 |          38

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

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

4. 数据访问

通过CN对表test_table进行插入操作,根据先前定义的分片策略,citus会根据id的哈希值自动为插入的记录选择一个分片进行写入。
当WN3离线时,通过CN对表test_table进行查询操作,因为WN1和WN2上已经包含了所有的分片,所以查询能够正常返回应有的结果。此时查看分片分布,发现所有副本状态都仍然为有效。
当WN3离线时,通过CN对表test_table进行插入/更新/删除操作,如果受影响的记录属于201001分片,那么citus会修改WN1和WN2上test_table_102001表的数据,且不会对任何副本的状态产生影响;如果受影响的记录属于201002分片,(因为WN3离线),citus会修改WN2上test_table_102002表的数据,并在分布分片信息中将36号副本的状态置为“无效(失步)”,注意此时37号副本的状态仍然是“有效(同步)”。
之后让WN3重新上线,检查分布分片信息,可以看到36号副本的状态仍为“无效(失步)”,可见其不会自动修复。此时对201002分片的所有读写操作,都只对35号副本进行。

5. 分片修复

【相关操作】

#先查看分片分布:
SELECT * from pg_dist_shard_placement order by shardid, placementid;shardid | shardstate | shardlength |   nodename    | nodeport | placementid
---------+------------+-------------+---------------+----------+-------------102001 |          1 |           0 | 192.168.7.130 |     5432 |          33102001 |          1 |           0 | 192.168.7.131 |     5432 |          34102002 |          1 |           0 | 192.168.7.131 |     5432 |          35102002 |          3 |           0 | 192.168.7.132 |     5432 |          36102003 |          1 |           0 | 192.168.7.132 |     5432 |          37102003 |          1 |           0 | 192.168.7.130 |     5432 |          38
#用35号副本的数据去覆盖36号副本:
SELECT master_copy_shard_placement(102002, '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
---------+------------+-------------+---------------+----------+-------------102001 |          1 |           0 | 192.168.7.130 |     5432 |          33102001 |          1 |           0 | 192.168.7.131 |     5432 |          34102002 |          1 |           0 | 192.168.7.131 |     5432 |          35102002 |          1 |           0 | 192.168.7.132 |     5432 |          36102003 |          1 |           0 | 192.168.7.132 |     5432 |          37102003 |          1 |           0 | 192.168.7.130 |     5432 |          38
#可见36号副本已经修复。

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

6. 集群性能

通过搭建基于PostgreSQL10的1CN+2WN的Citus集群环境(两分片,单副本)和单节点传统PostgreSQL10进行对比的方法,采用PgBench测试工具的TPC-B模式,在记录数100万的情况下得出如下结果:TPS[Citus]=258,TPS[PG10]=688。即该配置下Citus集群的整体读写效率为传统单节点PG10的37.5%。
通过合理的分片,使得大多数操作可以直接在WN进行,能有有效的提高Citus集群的效率,但是在存在副本的情况下,需要应用程序人为的保证Citus系统同一分片的不同副本间的一致性。

7.参考文献

《分布式数据库的分片方法》
《在CentOS7.2上部署基于PostgreSQL10的citus分布式数据库》
《Citus初步测试》
《Citus性能测试》
《Citus数据分片分布研究(一 在工作节点直接操作表)》
《Citus数据分片分布研究(二 副本与故障)》
《Citus数据分片分布研究(三 节点故障的手动修复)》

Citus架构介绍既实验总结相关推荐

  1. Kafka剖析:Kafka背景及架构介绍

    Kafka剖析:Kafka背景及架构介绍 <Kafka剖析:Kafka背景及架构介绍> <Kafka设计解析:Kafka High Availability(上)> <K ...

  2. MindSpore Lite整体架构介绍

    MindSpore Lite整体架构介绍 MindSpore Lite框架的总体架构如下所示: • 前端(Frontend): 负责模型生成,用户可以通过模型构建接口构建模型,将第三方模型和MindS ...

  3. MindSpore整体架构介绍

    MindSpore整体架构介绍 MindSpore框架架构总体分为MindSpore前端表示层.MindSpore计算图引擎和MindSpore后端运行时三层. • MindSpore前端表示层(Mi ...

  4. 微服务架构介绍和RPC框架对比

    微服务架构介绍和RPC框架对比 1.微服务架构 1.1 特征 自动化部署,端点智能化,语言和数据的去中心化控制. 1.2架构 一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中 ...

  5. 伍哥原创之豆荚商城商品搜索架构介绍

    为什么80%的码农都做不了架构师?>>>    豆荚商城(www.dou55.com)商品搜索架构介绍 1,需求分析 伍哥所在的豆荚商城是一个家电行业的B2C网上零售平台.作为这样一 ...

  6. 12.1 LNMP架构介绍;12.2 MySQL安装;12.3-2.4 PHP安装(上下);12.5

    扩展: Nginx为什么比Apache Httpd高效:原理篇 http://www.toxingwang.com/linux-unix/linux-basic/1712.html apache和ng ...

  7. Kafka系列一之架构介绍和安装

    Kafka架构介绍和安装 写在前面 还是那句话,当你学习一个新的东西之前,你总得知道这个东西是什么?这个东西可以用来做什么?然后你才会去学习它,使用它.简单来说,kafka既是一个消息队列,如今,它也 ...

  8. LAMP架构介绍、MySQL和MariaDB介绍、MySQL安装

    2019独角兽企业重金招聘Python工程师标准>>> LAMP架构介绍 Linux+Apache+MySQL+PHP 就是在linux系统上安装httpd. mysql .PHP, ...

  9. 互联网直播云计算架构介绍

    互联网直播云计算架构介绍 原文:互联网直播云计算架构介绍 思想 拆分 URL分层 模块化 云服务结构 ECS 云计算的优势 -------------------------------------- ...

最新文章

  1. 二级联动菜单,简单实现
  2. 删除vector指定位置的元素
  3. C++描述杭电OJ 2023.求平均成绩 ||
  4. 《零基础》MySQL 连接的使用(二十)
  5. 盘绕过苹果id方法_如何更换苹果ID?
  6. 【每日scrum】NO.7
  7. 当启动文档转换负载平衡器服务时出现如下问题The system cannot find the file specified的解决方案...
  8. c++ pdflib 生成中文内容
  9. delphi 类的写法 和 控制台程序的制作---深入Delphi编程 数据库
  10. matlab如何打开dcm_MatLab 与 visual studio 混合编程环境配置
  11. 记录Cannot find class问题
  12. 深度学习word2vec笔记之算法篇
  13. javascript 过滤_功能性JavaScript中的过滤和链接
  14. 图片放大出现锯齿问题
  15. 老用户WAU以及老用户周活跃度
  16. 修改Adobe Reader显示背景
  17. 易基因|精准医学: TERT启动子DNA甲基化在癌症中的双重作用
  18. 一篇文章讲清楚什么是数据网格和数据网格的原则
  19. 怎样让计算机默认记事本格式,怎么让记事本一直显示_如何让记事本保持在屏幕最前的图文步骤...
  20. JS实现复制功能的三种方式,有坑

热门文章

  1. 矿点三星android版本,三星Android系统文件夹全解
  2. win7 操作注册表
  3. 帆软FineReport学习篇(一)
  4. 毫无基础的人如何入门 Python ?Python入门教程拿走不谢啦!
  5. Axialis IconWorkshop图标制作软件一次性制作多个尺寸图标ico
  6. 【bzoj4488: [Jsoi2015]最大公约数】性质题
  7. mysql周排行_文章点击周排行、月排行榜功能开发总结
  8. Android 微信分享,微信分享图片
  9. 控制来电显示的Android
  10. 3-9 I: 唱歌比赛评分