zoukankan      html  css  js  c++  java
  • 简单可用好实现的 HA 高可用设计

    本文为作者原创,如需转载请注明出处。

    1. 实现的功能

      • 一主多备,自动选主
      • 启动记录可查询

    2. 前置需求

    一台数据库用以记录,如 MySQL、Redis、MongoDB 等。关键是设计中的思想,用啥数据库都行。

    3. 设计实现

    在数据库中,存一张表,结构如下:

    列名 说明
    id 自增数字,nosql的话想实现也不难
    instance 存放程序实例名,如 app1, app2
    startTime 实例启动时间
    heartBeat 心跳时间

     

    现以2个实例组成的cluster (心跳为1秒)举例说明:

    a. 实例启动

    当实例启动时,插入一条记录,例如:

    0 app1 2016-08-01 13:00:00 2016-08-01 13:00:00

    当全部实例启动时,例如:

    0 app1 2016-08-01 13:00:00 2016-08-01 13:01:00
    1 app2 2016-08-01 13:01:00 2016-08-01 13:01:00

     

    b.选主

    原则:一个实例认为自己是主,当且仅当表中heartbeat有效的行中最小id是自己。上面的两个表中都可以看出app1为主。

    select min(id) from table where heartbeat > now – heartbeat_interval

    c.心跳

    每个心跳周期,每个实例自己更新表中的自己的心跳字段:

    update table set heartbeat=now where id=myid and heartbeat > now-heartbeat_interval

    如果更新结果为0,即失败了,那么说明心跳超时,这时新加入一条记录,例如 app1 超时了:

    0 app1 2016-08-01 13:00:00 2016-08-01 13:58:00
    1 app2 2016-08-01 13:01:00 2016-08-01 14:00:00
    2 app1 2016-08-01 14:00:00 2016-08-01 14:00:00

     

    最后,在每个心跳周期结束的时候检查按步骤b自己是否为主,并进行切换。

    本文为作者原创,如需转载请注明出处。

  • 相关阅读:
    Echarts之美国新冠疫情地图制作
    前端三件套--CSS(pink老师课程笔记)
    数据预处理与转存(Hive--Mysql)
    HDFS的命令行使用
    hdfs的写入过程和读取过程
    树(一)树的基本知识
    指针中容易混淆的概念
    顺序查找、单链表查找、折半查找
    JAVA之I/O流
    SpringBoot-自定义spring-boot-starter
  • 原文地址:https://www.cnblogs.com/seasonsluo/p/ha_design.html
Copyright © 2011-2022 走看看