首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Heartbeat 2.0.3 + MySQL 5.0.18 高可用集群部署實戰 (RedHat Linux 9)

     編輯:MySQL 資料庫相關知識

前言

Heartbeat 是 Linux-HA 經典雙機熱備組件,配合 MySQL 複製與共享存儲 (NAS/DRBD/SAN),可構建主備切換、VIP 漂移、資源監控、自動故障轉移的高可用架構。本文基於 RedHat Linux 9 + MySQL 5.0.18 + Heartbeat 2.0.3,給出生產級部署全流程。

一、架構規劃

節點HostnameHeartbeat IP (eth0)Service IP (eth1)角色
Node1mysql5192.168.0.5010.4.66.35Primary
Node2mysql6192.168.0.6010.4.66.36Standby
  • VIP:10.4.66.88/24 (eth1),網關 10.4.66.2
  • 共享存儲:NAS 10.4.66.251:/data → 本地掛載 /data
  • Heartbeat 通訊:eth0 直連交叉線 (心跳專用),防止腦裂

二、MySQL 5.0.18 安裝與配置 (雙節點同步執行)

# 1. 移除系統自帶 MySQL
rpm -e mysql-server
userdel mysql
mv /etc/my.cnf /etc/my.cnf.bak

# 2. 建立用戶、解壓、權限
useradd mysql
tar xzf mysql-max-5.0.18-linux-i686-glibc23.tar.gz
mv mysql-max-5.0.18-linux-i686-glibc23 /usr/local/mysql
cd /usr/local/mysql
chown -R root .
chown -R mysql ./data
chgrp -R mysql .

# 3. 掛載共享存儲並初始化數據目錄 (僅 Node1 執行)
mount 10.4.66.251:/data /data
mkdir /data/mysqldata
./scripts/mysql_install_db --user=mysql
chown -R mysql:mysql /data/mysqldata

三、my.cnf 關鍵配置 (雙節點一致)

[mysqld]
# 數據目錄指向共享存儲
datadir = /data/mysqldata

# InnoDB 文件放本地磁盤 (避免 NFS 鎖衝突、性能差)
innodb_data_home_dir = /usr/local/mysql/data
innodb_log_group_home_dir = /usr/local/mysql/data
innodb_data_file_path = ibdata1:50M;ibdata2:50M:autoextend

# 複製配置 (主從雙向,見下文)
server-id = 1   # Node2 改為 2
log-bin = mysql-bin
binlog-format = ROW
sync_binlog = 1
expire_logs_days = 7

# PID 文件放本地 (啟停腳本依賴)
pid-file = /usr/local/mysql/data/mysql.pid

四、啟動腳本修改 (PID 文件路徑)

cp support-files/mysql.server /etc/rc.d/init.d/mysql
vi /etc/rc.d/init.d/mysql
# 修改第 222 行左右
pid_file=/usr/local/mysql/data/mysql.pid
server_pid_file=/usr/local/mysql/data/mysql.pid

五、Heartbeat 2.0.3 安裝配置

1. 安裝 (源碼編譯或 RPM)

tar xzf heartbeat-2.0.3.tar.gz
cd heartbeat-2.0.3
./configure --prefix=/usr/local/heartbeat
make && make install

2. 三大核心配置文件 (/etc/ha.d/)

# ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
bcast eth0           # 心跳廣播介面
auto_failback on     # 故障恢復後自動切回主節點
node mysql5
node mysql6

# haresources
mysql5 10.4.66.88/24/eth1::10.4.66.2 mysql

# authkeys
auth 1
1 sha1 HeartbeatSecretKey123!
# chmod 600 authkeys

六、MySQL 主從雙向複製配置 (雙主模式)

Node1 (server-id=1) 追加

master-host = 192.168.0.60
master-user = repl
master-password = ReplPass123!
master-connect-retry = 10
replicate-do-db = business_db
auto-increment-increment = 2
auto-increment-offset = 1

Node2 (server-id=2) 追加

log-bin = mysql-bin
binlog-do-db = business_db
auto-increment-increment = 2
auto-increment-offset = 2

重啟雙節點 MySQL,驗證 SHOW SLAVE STATUS\G 雙向 Running=Yes。

七、資源代理腳本: mysql (haresources 調用)

#!/bin/bash
# /etc/ha.d/resource.d/mysql
# 參數: start | stop | status

MYSQLD="/usr/local/mysql/bin/mysqld_safe"
MYSQLADMIN="/usr/local/mysql/bin/mysqladmin"
DATADIR="/data/mysqldata"
PIDFILE="/usr/local/mysql/data/mysql.pid"
SOCKET="/tmp/mysql.sock"

case $1 in
    start)
        # 確保共享存儲已掛載
        mountpoint -q /data || mount 10.4.66.251:/data /data
        # 啟動 MySQL
        $MYSQLD --user=mysql --datadir=$DATADIR --pid-file=$PIDFILE --socket=$SOCKET &
        # 等待就緒
        for i in {1..30}; do
            $MYSQLADMIN -S $SOCKET ping && break
            sleep 1
        done
        ;;
    stop)
        $MYSQLADMIN -S $SOCKET shutdown
        # 等待進程結束
        while kill -0 $(cat $PIDFILE 2>/dev/null) 2>/dev/null; do sleep 1; done
        ;;
    status)
        $MYSQLADMIN -S $SOCKET ping >/dev/null 2>&1
        ;;
esac

chmod +x /etc/ha.d/resource.d/mysql

八、啟動驗證與故障演練

  1. service heartbeat start (雙節點)
  2. ip addr show eth1 確認 VIP 漂移到 Primary。
  3. mysql -h 10.4.66.88 -u root -p 連接 VIP 測試。
  4. 故障演練:
    - 拔掉 Primary eth0 (心跳線) → 30s 內 VIP 漂移到 Standby、MySQL 啟動。
    - Kill Primary mysqld 進程 → Heartbeat 檢測資源失效 → 切換。
    - 斷開 NAS 網絡 → 雙節點均不可用 (需 STONITH 防腦裂)。

九、生產環境增強建議

  • 替換 Heartbeat → Corosync + Pacemaker (現代集群棧、功能更豐富、社區活躍)。
  • 共享存儲 NAS → DRBD (雙機同步塊設備) 或 SAN 多路徑,消除單點。
  • MySQL 5.0 → MySQL 8.0 / Percona 8.0 / MariaDB 10.6 (MGR 原生高可用、無需外部集群軟件)。
  • 加入 STONITH (Shoot The Other Node In The Head):IPMI/PDU/REST API 物理斷電,徹底解決腦裂。
  • 監控整合:Prometheus + mysqld_exporter + heartbeat_exporter + Grafana 告警。

十、總結

Heartbeat + MySQL + NAS 架構雖屬經典,但單點風險 (NAS)、腦裂風險 (無 STONITH)、版本老舊 (MySQL 5.0/Heartbeat 2.0)在生產環境已難以接受。現代高可用首選:MySQL InnoDB Cluster (MGR) + Router + Orchestrator 或 Galera Cluster + ProxySQL + Keepalived,純資料庫層解決高可用,運維更簡、效能更強、生態更新。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved