设备节点在单机-集群下的容灾和数据同步方案

94 阅读2分钟

根据最近的研究,做个笔记,设备集群数据同步方案。就那个设备,诶,就那个,对不能说的,但是就是那个设备,懂了吧。。。。。。

什么样的设备需要考虑集群问题?

设备介绍:一台物联网设备,里面装了很多软件,以及硬件,从而提供服务。该设备的特点是,拔掉网线能够独立使用,插上网线能够作为集群使用,并且能够在设备压力大的时候,进行动态扩容,集群模式下一台设备出现问题的时候,其它的设备能够很好的运行,不会出现不可用的情况。主打就是一个灵活轻便。

一台设备的架构大致如下:

2023-05-30-20-39-09-image.png

约束条件:数据库DB是无法暴露出去被其它节点访问,只能当前设备访问,被设置了只能127.0.0.1访问,硬件设备数据存储数据库。

使用场景:在单个设备使用的时候,该设备可以插上电,接上交换机作为一个独立的web服务工作站,提供服务,并且对接某些硬件设备,如对硬件设备身份信息注册,调试,鉴权等等功能。当有多个同型号的设备的互联的时候,可以作为一个工作站集群使用,保证高可用和高并发的目的。

面临的问题:当设备作为集群的时候最大的问题就是如何保证多节点的数据同步(数据库无法互通情况下),并且保证数据的一致性问题。其实就是将我们以前的什么Redis集群,ZK集群那种软件式的集群给应用到硬件设备中。

方案设计

要将整个设备的所有服务看做一个整体,即任何一个服务不可用都视为节点故障,就将该节点剔除,因此心跳检测不能单单只检测web服务是否可用还得对整个设备的服务状态进行健康检查。

为了保证数据一致性必须要选举出主节点,然后所有的写数据操作都由主节点完成,主节点写完后再同步到其它节点。其次在同步过程中,失败的节点要有补偿机制,这个需要区分模式是CP还是AP,如果是CP则需要有回滚机制(可以模仿mysql undo log将写入的sql进行预先生成),如果是AP需要有补偿机制(短时间允许数据不一致性,后台默默同步数据)。

选举机制需要有自定义实现,自己实现选举以及主从切换的逻辑,保证在设备加入的时候被感知,并且将数据同步。