2020-03-16

作者 : 开心源码 本文共1023个字,预计阅读时间需要3分钟 发布时间: 2022-05-14 共393人阅读

k3s之前的multi-master的支持 Mysql, PostgreSql, etcd 这3个方案,现在正在试验一个内嵌的multi-master方案,使用一个sqlite的HA版本-dqlite,dqlite-顾名思义,distibution sqlite,以后稳固的话,可能会成为官方推荐的HA方案。

Dqlite用主要做了几个事情:

  1. 提供一个基于raft的处理方案,基于一个叫 c-raft 的 raft轻量级实现,

  2. 把sqlite封装起来,给它存储层注册一个定制driver来操作数据

  3. CAP理论里,和绝大多分布式数据库一样,dqlite选择了(CP without A), 就是选择了Consistency(一致性)、Partition tolerance(分区容错性),而不保证 Availability(可用性),也即是:

  4. 保证了数据一致性

  5. 保持强一致性,客户请求需要在服务器中所有的分区里面完成了一致性才返回

  6. 但是,不保证每个请求都能得到没有报错的响应

一般,我们用sqlite是这样的:

image

应用程序直接调用一个单节点的sqlite实例

使用dqlite,则是这样的

image

应用程序不直接操作sqlite的接口,调用的是dqlite提供的接口,dqlite通过c-raft来保证数据一致性和容错行

目前官方提供了一个go的binding, 可以直接在go里使用dqlite的接口

作者有一个demo的演讲,演示了一个go写的分布式氧饱和度检测仪的例子

image

这段代码很简单,模拟插入氧饱和度的数据,而后提供一个http接口查询平均饱和度返回给调用者

其中getDatabase方法,假如用单实例的sqlite,它是这样的:

image

假如用dqlite变成这样

image

startEngine实际上是调用dqlite的接口创立一个新的dqlite节点

image

而后调用dqlite client这个接口连到集群

image

往sqlite的存储层注入一个dqlite定制的driver

image

可以看到,用go来使用这HA方案,还是挺方便易用。

目前k3s的dqlite HA版本目前还是试验状态,不要在生产环境使用,还有少量问题,比方:

  • cpu使用率高

  • 第一个启动的节点假如崩溃了,leader选举不出来

总的来讲,这个k3s的嵌入式HA方案还是非常值得期待,毕竟在IOT这种蝇级设施里面包mysql或者者etcd这种程序还是有点太重了

参考:

  1. 作者的演讲

  2. go的binding和demo

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 2020-03-16

发表回复