Citus数据分片分布研究(三 节点故障的手动修复)
服务器主机配置:
CPU:单核2GHz
RAM:2GB
DISK:30GB HDD
Citus部署配置:
Coordinator X 1 (192.168.7.129)
Worker X 2 (192.168.7.130,192.168.7.131)
1.创建数据库,创建citus插件,部署citus扩展
在所有节点上:
psql -h 192.168.7.129/130/131 -p 5432 -U postgres
create extension citus;
在协调节点上:
psql -h 192.168.7.129 -p 5432 -U postgres
SELECT * from master_add_node('192.168.7.130', 5432);
SELECT * from master_add_node('192.168.7.131', 5432);
SELECT * FROM master_get_active_worker_nodes();
2.创建表,插入初始数据,查看分片分布
在协调节点上:
psql -h 192.168.7.129 -p 5432 -U postgres
#创建表
create table test_table(id int, name varchar(16));
#表分片
SELECT master_create_distributed_table('test_table', 'id', 'hash');
#设定分片个数(2)及每个分片副本数(2)
SELECT master_create_worker_shards('test_table', 2, 2);
#插入初始数据
INSERT INTO test_table VALUES(1,'a');
INSERT INTO test_table VALUES(2,'b');
INSERT INTO test_table VALUES(3,'c');
INSERT INTO test_table VALUES(4,'d');
--查看分片分布情况
SELECT * from pg_dist_shard_placement;shardid | shardstate | shardlength | nodename | nodeport | placementid
---------+------------+-------------+---------------+----------+-------------102010 | 1 | 0 | 192.168.7.130 | 5432 | 3102011 | 1 | 0 | 192.168.7.130 | 5432 | 6102010 | 1 | 0 | 192.168.7.131 | 5432 | 4102011 | 1 | 0 | 192.168.7.131 | 5432 | 5
(4 rows)
一共有4个分片,分布在130和131两个工作节点上。
在工作节点上:
psql -h 192.168.7.130/131 -p 5432 -U postgres
\d
List of relations
Schema | Name | Type | Owner
--------+-------------------+-------+----------
public | test_table_102010 | table | postgres
public | test_table_102011 | table | postgres
(2 rows)pgbench=# select * from test_table_102010;
id | name
----+------
1 | a
3 | c
4 | d
(3 rows)pgbench=# select * from test_table_102011;
id | name
----+------
2 | b
(1 row)
这里通过查询可知,id=4的记录,经过哈希后,存储在编号为102010的分片上。(下一步实验会用到)
3.断开工作节点131后(拔网线),进行写操作,然后考察分片分布情况
在协调节点上查看数据及分片分布
select * from test_table;
WARNING: connection error: 192.168.7.131:5432
DETAIL: could not connect to server: No route to hostIs the server running on host "192.168.7.131" and acceptingTCP/IP connections on port 5432?id | name
----+------1 | a3 | c4 | d2 | b
(4 rows)
SELECT * from pg_dist_shard_placement;shardid | shardstate | shardlength | nodename | nodeport | placementid
---------+------------+-------------+---------------+----------+-------------102010 | 1 | 0 | 192.168.7.130 | 5432 | 3102011 | 1 | 0 | 192.168.7.130 | 5432 | 6102010 | 1 | 0 | 192.168.7.131 | 5432 | 4102011 | 1 | 0 | 192.168.7.131 | 5432 | 5
(4 rows)
在对表test_table进行数据查询的时候,出现了节点不可达的警告,但是因为没有写操作,所以所有分片分布状态仍然是正常的(同步的)。
插入id=4的记录
INSERT INTO test_table VALUES(4,'99');
WARNING: connection error: 192.168.7.131:5432
DETAIL: could not send data to server: No route to host
could not send SSL negotiation packet: No route to host
INSERT 0 1
根据前面的分析,这条记录应该被哈希到编号为102010的分片上。但此时节点131已经离线,所以只能写到节点位于130的102010号分片。此时再进行分片分布查询,发现节点131上的102010号分片状态从1变成了3,据此推断1表示“同步”,3表示“失步”。
SELECT * from pg_dist_shard_placement;shardid | shardstate | shardlength | nodename | nodeport | placementid
---------+------------+-------------+---------------+----------+-------------102010 | 1 | 0 | 192.168.7.130 | 5432 | 3102011 | 1 | 0 | 192.168.7.130 | 5432 | 6102010 | 3 | 0 | 192.168.7.131 | 5432 | 4102011 | 1 | 0 | 192.168.7.131 | 5432 | 5
(4 rows)
4.故障修复
此时接上节点131的网线,再次查询分片分布,发现citus不能自动修复故障节点上的数据。
SELECT * from pg_dist_shard_placement;shardid | shardstate | shardlength | nodename | nodeport | placementid
---------+------------+-------------+---------------+----------+-------------102010 | 1 | 0 | 192.168.7.130 | 5432 | 3102011 | 1 | 0 | 192.168.7.130 | 5432 | 6102010 | 3 | 0 | 192.168.7.131 | 5432 | 4102011 | 1 | 0 | 192.168.7.131 | 5432 | 5
(4 rows)
于是,使用master_copy_shard_placement命令将好节点上的分片,复制到坏节点上。
SELECT master_copy_shard_placement(102010, '192.168.7.130', 5432, '192.168.7.131', 5432);master_copy_shard_placement
-----------------------------(1 row)
此时再进行分片分布查询,发现节点131上的分片102010状态已经恢复。
SELECT * from pg_dist_shard_placement;shardid | shardstate | shardlength | nodename | nodeport | placementid
---------+------------+-------------+---------------+----------+-------------102010 | 1 | 0 | 192.168.7.130 | 5432 | 3102011 | 1 | 0 | 192.168.7.130 | 5432 | 6102010 | 1 | 0 | 192.168.7.131 | 5432 | 4102011 | 1 | 0 | 192.168.7.131 | 5432 | 5
(4 rows)
写在最后
分片的同步和失步是以分片(shard)而不是节点(node)进行管理的。在本例中,插回131的网线后,在不执行master_copy_shard_placement的情况下,插入id=1、3、4的记录(对应分片102010),只能写入到节点130中,因为节点131上的102010分片状态仍被标记为失步;但是如果插入id=2的记录(对应分片为102011),是能够正常写入到两个节点中去的。
Citus数据分片分布研究(三 节点故障的手动修复)相关推荐
- Citus数据分片分布研究(二 副本与故障)
(本文中凡是未显式指出的SQL,均在协调节点上执行) 工作节点 mydb1=# SELECT * FROM master_get_active_worker_nodes();node_name | n ...
- Citus数据分片分布研究(一 在工作节点直接操作表)
(本文中凡是未显式指出的SQL,均在协调节点上执行) 工作节点 mydb1=# SELECT * FROM master_get_active_worker_nodes();node_name | n ...
- 分布式存储系统设计(2)—— 数据分片
在分布式存储系统中,数据需要分散存储在多台设备上,数据分片(Sharding)就是用来确定数据在多台存储设备上分布的技术.数据分片要达到三个目的: 分布均匀,即每台设备上的数据量要尽可能相近: 负载均 ...
- [原创]分布式系统之缓存的微观应用经验谈(三)【数据分片和集群篇】
分布式系统之缓存的微观应用经验谈(三)[数据分片和集群篇] 前言 近几个月一直在忙些琐事,几乎年后都没怎么闲过.忙忙碌碌中就进入了2018年的秋天了,不得不感叹时间总是如白驹过隙,也不知道收获了什么和 ...
- Azure数据仓库表中的数据经常使用的三种分布策略(hash、round_robin 或 replicated)简介
目录 (一)前言 (二)基础概念 1. Azure Synapse Analytics概念 2. Synapse SQL 体系结构组件 3. Azure 存储 4. 控制节点 5. 计算节点 6. 数 ...
- 计算机网络实验IP数据报分片,实验报告三IP数据分片.doc
实验报告三IP数据分片 计算机网络实验报告 实验名称:IP数据分片 组号:一组 角色号:B 姓 名: 班 级: 学 号: 日 期:2014.4.21 一,实验目的 学习IP数据报分片原理 二,实验步骤 ...
- R(13):第三章:3.2数据的分布
<统计建模与R软件>薛毅 第3章 数据描述性分析 3.2 数据的分布 总结:绘制图形语法,直方图hist(),密度估计函数density(),绘图需配合plot()绘图,例如:plot(d ...
- 大数据图数据库之数据分片
节选自<大数据日知录:架构与算法>十四章,书籍目录在此 对于海量待挖掘数据,在分布式计算环境下,首先面临的问题就是如何将数据比较均匀地分配到不同的服务器上.对于非图数据来说,这个问题解决起 ...
- 一文讲透,分布式系统的数据分片难题
一般来说,数据分片是将整体数据分摊在多个存储设备上,这样每个存储设备的数据量相对就会小很多,以此满足系统的性能需求.本文主要讨论数据分片的三个问题:如何做数据分片.数据分片的特征值以及数据分片元数据的 ...
最新文章
- CNN 模型的参数(parameters)数量和浮点运算数量(FLOPs)是怎么计算的
- 【转】HTTP Response Header 的 Content-Disposition
- WampServer修改MySQL密码的问题
- 【opencv系列05】OpenCV4.X鼠标回调函数
- Qt QByteArray 转换 QString QT5.12.7
- 为啥用redis解决会话呢?
- php适用于什么服务器,php – 找不到laravel类(适用于localhost但不适用于DO服务器)...
- php this validate,php扩展ZF——Validate扩展
- beautifulsoup解析动态页面div未展开_实战|Python轻松实现动态网页爬虫(附详细源码)...
- BoltDB 一个简单的纯 Go key/value 存储 [译]
- node.js 学习
- 什么情况下使用 if()后面的else可以省略不写
- 用SetCapture捕获鼠标消息
- 总结软考(软件设计师中级)——计算机语言基础的知识
- php 7.4 编译安装
- 如何使用虚拟机运行“小HomeKit”智汀家庭云
- 【游戏开发实战】Unity Unlit ShaderGraph实现与PBR的自发光贴图类似的叠加效果
- java语言会在很短的时间内迅速流行_在短时间内流行起来又迅速平息的时尚状态是()A.阵热B.时髦C.时狂D.狂热...
- C++画图之GOC编程 第6课 通天云梯
- java:java8新特性(Lambda 表达式、方法引用、构造器引用、数组引用、Stream API)
热门文章
- ​提高免疫力,没你想得这么难!
- QT Creator 代码自动补全---快捷键设定
- pr里去频闪的插件叫什么_Ae/Pr 视频去闪烁插件 Digital Anarchy Flicker Free v1.1.6 CE
- 京东js加密 nloginpwd 破解
- 【AngularJs学习笔记三】Grunt任务管理器
- 修改文本文件默认编辑器
- 图文详解AO打印(标准模式)
- 大学生简单个人静态HTML网页设计作品 HTML+CSS制作我的家乡杭州 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载 HTML5期末大作业
- Linux wine 字体发虚,解决QQ(wine)因字体卡死宋体发虚太难看的一种方法
- 趣味IT知识:你知道千年虫吗