首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 高可用架構實戰:DRBD + Heartbeat + MySQL 共享存儲雙機熱備完整部署指南

     編輯:MySQL 綜合教學

MySQL 高可用架構實戰:DRBD + Heartbeat + MySQL 共享存儲雙機熱備完整部署指南

本文詳細記錄基於 DRBD(分塊複製設備)+ Heartbeat(心跳監控)+ MySQL 的高可用集群搭建全過程,採用「共享存儲」模式實現雙機熱備,包含架構設計、DRBD 配置、MySQL 數據目錄遷移、權限設置、故障切換驗證等完整步驟,為生產環境部署提供可落地的操作手冊。

一、架構設計

MySQL 拓撲

  • Master:10.24.6.4:3306
  • Slave:10.24.6.6:3306(作為 DRBD 從節點,平時不提供服務)

虛擬 IP (VIP)

  • 10.24.6.20
  • **必須與 MySQL 服務器處於同一網段**,否則無法 ping 通

二、DRBD 共享存儲部署

1. 環境準備

  • 共享硬盤設備:/dev/sdb1(新建硬盤,**不掛載任何目錄**)
  • 修改 /etc/hosts 與主機名:
    • Master (10.24.6.4):drbd01
    • Slave (10.24.6.6):drbd02

2. 安裝 DRBD

sudo apt-get install drbd8-utils

3. 配置文件體系

/etc/drbd.conf 默認包含:

include "/etc/drbd.d/global_common.conf";
include "/etc/drbd.d/*.res";

4. 全局公共配置 /etc/drbd.d/global_common.conf

global {
    usage-count no;  // 不統計使用量
}
common {
    protocol C;  // C 協議:最安全且性能最好的寫確認模式
    syncer {
        rate 100M;  // 同步速率限制
    }
}

5. 資源配置 /etc/drbd.d/r0.res(雙節點同配)

resource r0 {
    on drbd01 {
        device    /dev/drbd0;      // 邏輯設備路徑
        disk      /dev/sdb1;       // 物理設備
        address   10.24.6.4:7788;  // 主節點地址端口
        meta-disk internal;        // 元數據存儲於設備末尾
    }
    on drbd02 {
        device    /dev/drbd0;
        disk      /dev/sdb1;
        address   10.24.6.6:7788;  // 從節點地址端口
        meta-disk internal;
    }
}

⚠️ **配置文件不可包含註釋**,否則解析報錯。

6. 初始化元數據(主節點執行)

sudo drbdadm create-md r0

若報錯 Found some data on /dev/sdb1,執行清零:

dd if=/dev/zero bs=1M count=1 of=/dev/sdb1; sync

再次執行 drbdadm create-md r0 直至顯示 success。

7. 啟動 DRBD 服務(雙節點)

/etc/init.d/drbd start

8. 狀態檢查與同步啟動

cat /proc/drbd

初始狀態:ro:Secondary/Secondary、ds:Inconsistent/Inconsistent(數據未同步)。

**主節點強制升級為 Primary 並覆蓋對端數據:**

drbdadm -- --overwrite-data-of-peer primary r0

觀察同步進度:cat /proc/drbd,直至雙方均為 UpToDate/UpToDate、ro:Primary/Secondary。

9. 數據同步驗證

# 主節點
mkfs.ext4 /dev/drbd0
mount /dev/drbd0 /mnt/data
cd /mnt/data
mkdir testfile  # 創建測試文件
umount /dev/drbd0
drbdadm secondary r0  # 降為 Secondary

# 從節點
drbdadm primary r0    # 升為 Primary
mount /dev/drbd0 /mnt/data
ls -l /mnt/data       # 應看到 testfile

驗證成功證明 DRBD 塊級複製正常,為 MySQL 數據同步奠基。

三、MySQL 數據目錄遷移至共享存儲

1. 停止 MySQL 服務(雙節點)

service mysql stop

2. 複製數據目錄(主節點)

cp -r /var/lib/mysql /share_mysql/

3. 修改配置文件 /etc/mysql/my.cnf(雙節點)

[mysqld]
datadir = /share_mysql/mysql

4. 權限設置(雙節點)

chown -R mysql:mysql /share_mysql/mysql
# 系統級權限:AppArmor/SELinux 需允許 mysql 訪問新路徑
# Ubuntu AppArmor 示例:
# vim /etc/apparmor.d/usr.sbin.mysqld
# 添加: /share_mysql/mysql/ r, /share_mysql/mysql/** rwk,
# service apparmor restart

5. 啟動 MySQL(僅主節點)

service mysql start

從節點**不啟動** MySQL,由 Heartbeat 控制故障切換時啟動。

四、Heartbeat 高可用配置(下一步)

本文重點完成 DRBD 存儲層與 MySQL 數據層整合。後續需配置 Heartbeat 實現:

  1. VIP 綁定/漂移
  2. MySQL 服務啟停監控與切換
  3. DRBD Primary/Secondary 角色自動切換
  4. 資源監控腳本(haresources 或 CRM 配置)

五、關鍵問題排查記錄

  • 主節點降級失敗: drbdadm secondary r0 報錯 device is held open。原因:掛載點 /mnt/data 正在被使用(如 shell 當前目錄在該路徑)。**解決:cd /; umount /mnt/data 後再降級。**
  • 端口連通性: 確保雙向 7788 端口通暢(telnet ip 7788 驗證)。
  • 防火牆: 生產環境需放行 7788、3306、Heartbeat 端口(694/udp 等)。
  • meta-disk internal 要求物理設備有空間存元數據,新硬盤需預留或使用外部元數據設備。

六、總結

DRBD + Heartbeat + MySQL 共享存儲架構通過**塊級同步**實現數據零丟失(同步模式下),VIP 漂移實現秒級故障切換。核心要點:

  1. DRBD 配置嚴格規範(無註釋、協議 C、內部元數據)
  2. MySQL 數據目錄完全遷移至 DRBD 設備掛載點
  3. 權限鏈完整:文件系統權限 + 強制訪問控制
  4. 運維熟練掌握 drbdadm 角色切換、同步監控、分離/掛載流程
  5. Heartbeat 作為大腦統籌 VIP、服務、存儲角色三位一體切換

此架構適合對數據零丟失要求高、可接受秒級切換、硬件資源有限的中小型核心業務場景。

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