这里写自定义目录标题
前言
作为新一代的数据库系统,MatrixOne也是以当今流行的分布式架构为基础来设计的。除了存储引擎与计算引擎之外,分布式组件也已经成为现代数据库设计的必选项。MatrixCube的设计目标是让开发人员能够轻松地实现各种强一致的分布式存储服务。今天我们通过一个简单的分布式存储demo实验来完整地体验下MatrixCube的功能。
MatrixKV是一个简单的分布式强一致KV存储系统,采用Pebble作为底层的存储引擎,MatrixCube作为分布式组件,以及自定义了最简单的读写请求接口。用户可以非常简单的在任意一个节点发起读写数据的请求,也可以从任意一个节点读到需要的数据。
本次实验以Docker模拟一个小型MatrixKV集群的形式,来进一步说明MatrixCube的功能与运作机制。
Step1.环境准备
需要使用到docker、docker-compose、go
安装完毕之后,将MatrixKV代码Clone到本地
git clone https://github.com/matrixorigin/matrixkv
Step2.集群配置
MatrixCube基于Raft构建分布式共识协议,因此需要至少三个节点来作为最小部署规模,而最初的三个节点都属于调度用的Prophet节点。我们这次实验准备的这个小型集群有四个节点,其中三个为Prophet节点, 一个为数据节点。我们以docker进行容器包装的形式来在单机上进行模拟。
节点配置文件均在/cfg目录下,开始只需使用默认配置就可以进行初步体验
Step3.集群启动
使用make docker打包MartixKV
使用docker-compose up启动集群!](https://img-
通过docker ps命令可以看到四个node已经启动,集群正在正常运行
Step4.体验请求接口
- 调用写接口
结果:
{“key”:“k1”,“error”:“”}
- 调用读接口
结果:
{“key”:“k1”,“value”:“v1”,“error”:“”}
- 调用删除接口
结果:
{“key”:“k1”,“error”:“”}
- 再次调用读接口,读取刚刚删除过的k1的value
结果:
{“key”:“k1”,“value”:“”,“error”:“”}
可以看到没有读出来k1的value值
我们可以从集群的任意一个节点发起请求,不管是写入,读取还是删除的请求,Shard Proxy都会自动将请求路由到相应的处理节点上。
比如我们可以在node0上写入数据,而在node0到node3上都可以进行读取,是完全一样的。
Step5.数据分片查询与分裂
MatrixCube会在写入的数据量达到一定级别的时候产生Shard分裂,在MatrixKV中,我们将Shard的大小设置成了1024Byte。因此写入数据超过这个尺寸的数据会产生分裂。MatrixKV提供了一个简单的查询当前集群或者当前节点中有多少个Shard的接口。
可以看到集群下有三个id为3,7,8的Shard
当我们写入一个超过1024Byte的数据之后,集群下的Shard会进行分裂
Step6.节点变化
我们现在将node3手动关掉
再次访问node3,会发现拒绝访问
而其他节点还是可以继续正常访问的
体验
总的来说,MatrixKV的可用性还是非常高的,用户体验也会很丝滑。包括简单易用的读写请求接口,可以让用户可以非常简单的在任意一个节点发起读写数据的请求,也可以从任意一个节点读到需要的数据。希望MatrixOne社区能够发展的越来越好,让广大用户体验到更多更丰富的产品。