簡單可用好實現的 HA 高可用設計

來源:互聯網
上載者:User

標籤:

本文為作者原創,如需轉載請註明出處。

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自己是否為主,並進行切換。

本文為作者原創,如需轉載請註明出處。

簡單可用好實現的 HA 高可用設計

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.