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自己是否为主,并进行切换。

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

  • 相关阅读:
    python全栈学习--day57(响应式页面-@media介绍,移动端单位介绍,Bootstrap学习)
    网络编程-Socket介绍
    网络编程-五层协议详解
    python-封装
    python- 类的多态与多态性
    python-接口类与抽象类
    python-类的组合和使用
    python-类继承与重用
    python-面向对象编程小结
    python-属性的查找与绑定方法
  • 原文地址:https://www.cnblogs.com/seasonsluo/p/ha_design.html
Copyright © 2011-2022 走看看