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

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

  • 相关阅读:
    让windows cmd也用上linux命令
    数据库工具toad与plsql
    Oracle表&DATA复制
    主流WEB开发语言简单对比
    游戏中的碰撞检测
    LRU算法总结及其C算法实现
    MTU
    多款as3游戏框架
    请问2.3e+71,是不是表示23后面有70个0?
    希望OFFICE有一个小阳台,在阳光斜照的下午,开发人员能喝着茶,在蓝色的天空下讨论问题,这样思绪更为清楚
  • 原文地址:https://www.cnblogs.com/seasonsluo/p/ha_design.html
Copyright © 2011-2022 走看看