博客 / 詳情

返回

藍易雲cdn:Heartbeat+Nginx實現高可用集羣

Heartbeat+Nginx實現高可用集羣實戰指南 🧩


一、整體思路概覽

通過 Heartbeat 實現虛擬IP(漂移IP)的接管,通過 Nginx 提供Web服務,當主節點故障時,VIP 自動切換到備用節點,業務幾乎無感知中斷。核心關鍵點有三個:

  • 一組真實服務器(如 node1node2
  • 一個可漂移的 VIP(虛擬IP)
  • 利用 Heartbeat 監控 + 接管 VIP + 啓停 Nginx

只要記住一句話:<font color="red">VIP 在哪台機器,Nginx 就在哪台機器對外提供服務</font>


二、基礎環境規劃(示例)

  • 主節點:node1,IP:192.168.1.10
  • 備節點:node2,IP:192.168.1.11
  • 漂移IP(VIP):192.168.1.100
  • 操作系統:同一發行版 Linux(如 CentOS / Rocky / Debian 等)
  • 兩台機器時間、主機名、網絡配置保持一致、互通 🔄

三、安裝 Nginx

1. 安裝命令示例

# 以基於 RHEL 的系統為例(node1、node2 都執行)
yum install -y nginx
systemctl enable nginx

解釋:

  • yum install -y nginx:使用系統包管理工具安裝 Nginx,-y 表示自動確認。
  • systemctl enable nginx:設置 Nginx 開機自啓,保證機器重啓後服務自動拉起。

四、安裝 Heartbeat

1. 安裝 Heartbeat

# node1、node2 都執行
yum install -y heartbeat
systemctl enable heartbeat

解釋:

  • yum install -y heartbeat:安裝 Heartbeat 高可用組件,用於節點間心跳檢測與資源接管。
  • systemctl enable heartbeat:設置開機自動啓動 Heartbeat,避免重啓後集羣失效。
不同發行版命令略有差異,用法類似,可用對應的包管理器(如 apt)進行安裝。

五、關鍵配置文件説明(Heartbeat 經典配置)

Heartbeat 經典版本主要關注三個文件(路徑示例 /etc/ha.d/):

  • <font color="red">ha.cf</font>:定義心跳通信方式、日誌級別等
  • <font color="red">authkeys</font>:認證配置,防止非法節點加入
  • <font color="red">haresources</font>:資源接管配置(VIP、Nginx 等)

1. ha.cf 示例(兩節點都配置)

# /etc/ha.d/ha.cf
logfacility     local0
keepalive       2
deadtime        10
warntime        5
initdead        20

bcast           eth0
node            node1
node            node2

解釋:

  • logfacility local0:將 Heartbeat 日誌寫入指定日誌設施,便於排查問題。
  • keepalive 2:每 2秒 發送一次心跳包。
  • deadtime 1010秒內收不到心跳就認為對方宕機,開始接管資源。
  • warntime 5:5秒未收到心跳時記錄告警,但尚不接管。
  • initdead 20:集羣啓動時等待對方上線的最長時間。
  • bcast eth0:使用 eth0 網卡廣播方式發送心跳(生產可用 ucast 或專用心跳網絡)。
  • node node1 / node2:顯式聲明集羣中的合法節點名稱,與系統 hostname 一致。

2. authkeys 示例(兩節點相同)

# /etc/ha.d/authkeys
auth 1
1 sha1 心跳共享密鑰

解釋:

  • auth 1:指定使用編號為 1 的認證配置。
  • 1 sha1:表示使用 SHA1 算法進行消息認證。
  • 心跳共享密鑰:兩台機器必須完全一致的密鑰字符串(建議設置為複雜隨機串)。
  • 最後需設置權限:
chmod 600 /etc/ha.d/authkeys

解釋:

  • chmod 600:限制只有文件所有者可讀寫,避免密鑰泄露,保證安全性。

3. haresources 示例(只需寫在主節點配置,通常兩邊保持一致便於管理)

# /etc/ha.d/haresources
node1 192.168.1.100 nginx

解釋:

  • node1默認主節點,正常情況下 VIP 和 Nginx 都在這台機器。
  • 192.168.1.100:要漂移的虛擬IP地址。
  • nginx:作為 Heartbeat 管理的服務資源,會自動執行 service nginx start/stop

邏輯含義:

  • node1 正常時:VIP 綁定在 node1,並啓動 Nginx。
  • node1 故障或心跳中斷:Heartbeat 判定其失效,將 VIP 和 Nginx 切換到 node2
  • node1 恢復:根據策略可能自動接回資源(或保持在 node2,視版本與配置而定)。

六、啓動與驗證 🔍

1. 在兩台節點上啓動 Heartbeat

# node1、node2 都執行
systemctl start heartbeat

解釋:

  • systemctl start heartbeat:啓動 Heartbeat 守護進程,建立心跳通信和資源管理。
  • 啓動順序通常:先備節點,後主節點,避免資源在啓動時來回漂移。

2. 查看 VIP 歸屬

在任意一台機器執行:

ip addr | grep 192.168.1.100

解釋:

  • ip addr:查看當前主機所有網絡地址。
  • grep 192.168.1.100:過濾出虛擬IP是否存在,判斷 VIP 當前在哪個節點上。
  • 若在 node1 上看到該 IP,説明當前由主節點提供服務。

3. 訪問驗證

在瀏覽器或命令行訪問:

curl http://192.168.1.100

解釋:

  • curl 用於通過 HTTP 請求測試訪問是否正常。
  • 若返回 Nginx 默認頁面內容,説明 VIP + Nginx 服務鏈路正常。

七、故障切換測試 ✅

  1. 在當前持有 VIP 的機器上停止 Heartbeat:
systemctl stop heartbeat

解釋:

  • 主動停止 Heartbeat,模擬節點故障或集羣服務異常。
  • 被動情況下也可能因為系統宕機、網絡中斷等觸發。
  1. 再次查看 VIP 所在節點:
ip addr | grep 192.168.1.100
  • 若 VIP 出現在另一台機器上,説明 <font color="red">故障切換成功</font>
  • 再次使用 curl 或瀏覽器訪問 VIP,驗證頁面是否仍能正常打開。

八、實踐中的注意事項 ⚠️

  • <font color="red">保證時間同步</font>:建議配置 NTP,避免時間差影響日誌分析與超時判斷。
  • <font color="red">心跳網絡可靠</font>:生產環境建議單獨心跳網卡或多路心跳,減少誤判。
  • <font color="red">數據目錄一致</font>:Nginx 讀取的頁面文件應放在共享存儲或通過同步工具保持一致。
  • 考慮採用更完善的資源管理框架(如 Pacemaker + Corosync)進行復雜業務的高可用設計,但 Heartbeat+Nginx 簡單直接,適合入門與中小場景。

通過以上步驟,就可以搭建一個 Heartbeat+Nginx 高可用集羣
當一台服務器宕機時,另一台自動接管虛擬IP和 Nginx 服務,實現業務連續性 ✨

如果需要繼續擴展到多節點、加上後端應用或數據庫,再在此基礎上逐步演進即可。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.