現在位置: 首頁 > Mysql > 正文

架設 HA 高可用性:MySQL DRBD + Heartbeat – 兩台式架構 HA (Master/Slave)

在 MySQL HA 架構,企業中使用最頻繁的就是 DRBD + Heartbeat,其原因沒有別的,就是最省錢;只需要兩台 Database Server,並且使用 Master / Slave Fail-over 進行備援,若是 Master 掛掉,只需要在短短的幾秒內即可讓 Slave 升上 Master 上線服務。

 

MySQL HA 有幾種選擇 MHA、MMM、Keepalived、Heartbeat、Pacemaker ..

使用兩台式的 Master / Slave 的缺點上就是沒有第三台 Monitor Server 協助判定主機 Active / Dead以及切換,所以在技術上如果沒有處理好的話就會造成 split-brain 的狀況,這樣就必須要人為介入處理

 

DRBD + Heartbeat 官方也提供了 split-brain 的自動復原功能 Configure-split-brain-behavior

 

在這篇是採用 DRBD + Heartbeat 做 LAB 使用,架構如下:

MySQL DRBD + Heartbeat (two host)

採用兩台 Database Server,平時僅有 Master 運作,而 Slave 處於 stand by 的狀態,只有發生狀況才會替補上。

 

Client 端都是使用 VIP 在進行連線,Master / Slave 之間使用 heartbeat 心跳偵測彼此是否 Active / Dead,當 Master dead 狀態成立,heartbeat 會將 Slave 升級為 Master、掛載 Disk 資源池、啟動 MySQLd,整個流程的 down time 時間可以自己依照網路環境調整,若對你的內網很有信心,整個 MySQL 的 downtime 可以不超過 5 秒。

 

建立高可用性(HA) 的 MySQL – DRBD + Heartbeat

  • mysql-node1:192.168.50.20
  • mysql-node2:192.168.50.21
  • Virtual IP:192.168.50.22
  • meta disk:/dev/sdb1

 

**** 以下設定請在 mysql-node1、mysql-node2 同步作業 ****

 

建立 DRBD

Step.1 安裝 EL repo、drbd84

 

Step.2 檢查 kernel 版本是否支援對應的 DRBD 版本,並且載入 kernel drbd module,若沒有載入你的 drbd 是無法使用的

此篇是採用 drbd84 所支援的 kernel 最少要是 2.6.32-573.xx,在這之前的 kernel 請使用 drbd83

 

Step.3 設定 hosts、hostname,DRBD 的設定會需要 hostname 和 hosts

 

 

Step.4 設定 drbd 的 global_common.conf 全局設定

 

Step.5 設定 drbd 的 meta data 資源池,

如上的設定方式是 mysql-node1、mysqlnode2 具有相同的 /dev/sdb1、所以我寫在 resource meta 變數內而不是寫在 node 內。

 

Step.6 初始化 metadata

 

Step.7 兩邊都啟動 drbd

 

Step.8 查看 drbd 狀態

因為還沒有決定要以哪邊的資料為主,所以 ds:Inconsistent,兩邊都是 Secondary

 

Step.9 在要決定是 Master 的 mysql-node1 執行 primary 使他升上 Master

 

Step.10 同步完成 ds 狀態為 UpToDate/UpToDate。

 

Step.11 先格式化 drbd 磁區,然後準備資料

 

Step.12 將 MySQL data 指定到要 mount 的 metadata

 

Step.13 在 mysql-node1 嘗試 mount metadata,因為在 drbd 啟動時僅有 Master 有權限可以 mount metadata

測試 create data 檢查是否可以寫入,如果你檢測 cat /proc/drbd 可以看到 dw 一直在寫入。

 

DRBD 測試

你可以在 mysql-node1、mysql-node2 之間切換 Primary/Secondary 並且寫入一些資料,確認同步OK

若是你只用 DRBD 的話就只能手動切換,這樣就沒有意義了,所以要搭配像是 Heartbeat 或是 Keepalive 這類型的東西來 Failover。

 

建立 Heartbeat

Step.1 直接下載 heartbeat

 

Step.2 ha.cf 主要設定檔

 

Step.3 heartbeat 連線所使用的認證密碼檔,使用目前安全性尚OK的 sha1,權限必須為 600,並且加入 heartbeat 的都必須擁有此 authkeys

 

Step.4 設定 haresources,當發生故障異常時,heartbeat 要幫你做的事情就在 haresources 進行設定

  • mysql-node1:預設啟動時mysql-node1為Master
  • IPaddr:VIP 設定,IP:192.168.50.22、netmask:255.255.255.0、interface:eth0:1,如果沒有設定netmask/interface將會自動幫你掛載在第一張網卡,如果你希望啟動另一張網卡就必須指定 netmask/interface
  • haresources 的啟動順序是由左至右,停止則是由右至左!這個順序務必要寫好,否則你的 haresources 就會順序失敗。

 

當 mysql-node1、mysql-node2 都 ready 好之後就可以啟動服務

 

 

測試:

case.1 將master中斷時,slave偵測到並升上primary

 

case.2 slave復原,master 偵測到復原通知,僅更改slave狀態由dead轉avtive

 

當然在這中間還處理了 haresources 裡的動作,在這裡只擷取部分狀態的判定 log

 

 

 

 

 

架設技巧:

如果你的 DRBD 同步線路為獨立網卡,若是不想浪費資源可以直接設定為網卡最大傳輸速率,在 Linux 可以這樣看網卡速率

 

Debug:

Q1:在啟動 heartbeat 服務時出現『Unable to find nic or netmask.』

Ans:這個訊息是 heartbeat 掛載 VIP 失敗,無法找到 netmask,如果沒設定 netmask 會預設抓你第一張網卡的 netmask,若是有誤就無法掛載上去,可以使用 ifconfig up 的方式測試是否可以成功掛上VIP。

 

 

 

參考資料:

DRBD Users Guide 8.4

Configure-split-brain-behavior

0000626: kmod-drbd84 do not build on CentOS 6.6 final 2.6.32-504.30.3.el6.x86_64

Add a secondary IP to Linux

 

文章連結: https://shazi.info/%e6%9e%b6%e8%a8%ad-ha-%e9%ab%98%e5%8f%af%e7%94%a8%e6%80%a7%ef%bc%9amysql-drbd-heartbeat-%e5%85%a9%e5%8f%b0%e5%bc%8f%e6%9e%b6%e6%a7%8b-ha-masterslave/ | Mr. 沙先生

該文章由 shazi7804 於2016年07月21日發表在 Mysql 分類下, 你可以發表回文,並在保留原文地址及作者的情况下引用到你的網站或部落格。
原文轉載請註明: 架設 HA 高可用性:MySQL DRBD + Heartbeat – 兩台式架構 HA (Master/Slave) | Mr. 沙先生
標籤: , , , ,

架設 HA 高可用性:MySQL DRBD + Heartbeat – 兩台式架構 HA (Master/Slave):給Mr.沙先生一點建議

發表回文