2018/5/19更新改用Alias IP: Google Cloud Platform使用Alias IP簡易達成DRBD + Heartbeat HA
基本上安裝方法與一般實體機器相同, 但是Google Cloud Platform VPC(Virtual Private Cloud)網路的隔離下, 自己開啟Heartbeat產生Virtual IP來當MySQL server所服務的IP完全不可行, 替代方案是使用路由方式, 讓其他虛擬機能夠連接MySQL server, 以下虛擬機均採用Debian 9, 其他Linux系統大同小異。
接著先說明建立虛擬機(Compute Engine)要設定的地方:
1. DRBD與Heartbeat要指定對方IP, 所以我使用了預留內部IP分別是Primary Node的db1 (10.140.0.11), Secondary Node的db2 (10.140.0.12)
另外服務用的Virtual IP 10.141.0.1則需要跳脫default VPC subnet使用範圍(10.140.0.x)
虛擬機也額外連接SSD Persistent disk, 當作MySQL server的資料碟, 同樣建議兩台虛擬機規格與磁碟大小一致
2. 虛擬機網路需要額外開啟"IP 轉送(IP Forwarding)", 而且是建立虛擬機時就得設定, 若沒有開啟, 虛擬機建立後是無法修改的
3. 需要動到路由, 所以要讓虛擬機有對Compute Engine API的讀寫權限
建立了兩台虛擬機後, 依照上述方法設定DRBD與Heartbeat, 比較不同的地方是haresources不需要建立Virtual IP, 這裡用shell script來改動路由, 讓其他Web server虛擬機可以連接資料庫
db1與db2均要修改/etc/network/interface檔案, 增加虛擬介面eth0:0, 並綁上Virtual IP
nano /etc/network/interface
最後一行加上
auto eth0:0
iface eth0:0 inet static
address 10.141.0.1
netmask 255.255.255.255
*兩台虛擬機都是相同介面設定, 如果您的虛擬機內網介面不是eth0, 請照著增加"介面名稱:0"的方式加入新介面
啟動新介面
ifup eth0:0
接著個別加入控制路由的shell script
db1虛擬機上
nano /etc/heartbeat/resource.d/db-route
貼上shell script
#!/bin/bash
gcloud compute routes delete db-service-ip --quiet
sleep 1
gcloud compute routes create db-service-ip --network=default --priority=400 --destination-range=10.141.0.1/32 --next-hop-instance=db1 --next-hop-instance-zone=asia-east1-a --quiet
設為可執行
chmod +x /etc/heartbeat/resource.d/db-route
"db-service-ip"是我自定的路由名稱, 其他設定值請參考您的Google Cloud Platform實際環境
所以db2虛擬機上
nano /etc/heartbeat/resource.d/db-route
貼上shell script
#!/bin/bash
gcloud compute routes delete db-service-ip --quiet
sleep 1
gcloud compute routes create db-service-ip --network=default --priority=400 --destination-range=10.141.0.1/32 --next-hop-instance=db2 --next-hop-instance-zone=asia-east1-a --quiet
兩者只差別在--next-hop-instance參數
設為可執行
chmod +x /etc/heartbeat/resource.d/db-route
共通的haresources即是
db1 drbddisk::r0 Filesystem::/dev/drbd0::/srv::xfs::noatime,nodiratime db-route mysql
1. 啟動DRBD r0資源
2. 掛載/dev/drbd0到/srv, XFS格式, noatime與nodiratime參數
3. db-route為路由修改shell script
4. mysql為MySQL Server resource script, 啟動MySQL Server
當嘗試failover測試, 可以在VPC網路的路由中看到"db-service-ip"路由規則加入
實際測試整個failover切換費時2分30秒左右, 光是修改路由就需30秒, 頗慢...
由於我開啟的虛擬機規格與空間頗高, 費用驚人在測試完成後就暫且關機, 免得生出一大堆費用