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

MySQL 高可用架構實戰:Corosync + Pacemaker + DRBD 搭建雙主熱備詳細教程

     編輯:MySQL 綜合教學

架構拓撲

+----------------+     DRBD 同步      +----------------+
|  Node1 (Master) | ◄─────────────────► |  Node2 (Slave) |
| nginxha001      |   /dev/drbd0        | nginxha002     |
| 10.0.15.31      |   protocol C        | 10.0.15.32     |
|                 |                     |                |
|  VIP: 10.0.15.30 (漂移)               |                |
+----------------+                     +----------------+
          ▲                                     ▲
          └──────── Corosync/Pacemaker 叢集管理 ────┘

環境規格

  • OS:CentOS 6.5 / Kernel 2.6.32
  • 節點:`nginxha001` (10.0.15.31)、`nginxha002` (10.0.15.32)
  • 虛擬 IP (VIP):10.0.15.30
  • 共享存儲:`/dev/sdc1` → DRBD `/dev/drbd0` → 掛載 `/mysqldata`

核心組件安裝

# 依賴
yum -y install gcc rpm-build kernel-devel kernel-headers flex ncurses-devel

# DRBD (ELRepo 源)
wget https://elrepo.org/linux/elrepo/el6/x86_64/RPMS/kmod-drbd84-8.4.3-1.el6_4.elrepo.x86_64.rpm
wget https://elrepo.org/linux/elrepo/el6/x86_64/RPMS/drbd84-utils-8.4.3-1.el6.elrepo.x86_64.rpm
yum -y localinstall *.rpm

DRBD 資源配置 (/etc/drbd.d/mysql.res)

resource mysql {
  protocol C;
  device /dev/drbd0;
  disk /dev/sdc1;
  meta-disk internal;
  on nginxha001 { address 10.0.15.31:7789; }
  on nginxha002 { address 10.0.15.32:7789; }
}

DRBD 初始化與主從建立

# 兩節點均執行
fdisk /dev/sdc  # 創建同大小分區 sdc1
drbdadm create-md mysql
service drbd start

# 僅主節點執行
drbdadm -- --overwrite-data-of-peer primary mysql
mkfs -t ext4 /dev/drbd0
mount /dev/drbd0 /mysqldata

Corosync + Pacemaker 叢集配置 (CRM Shell)

crm configure
# 基礎屬性
property stonith-enabled=false
property no-quorum-policy=ignore

# 1. MySQL 服務資源 (LSB 腳本)
primitive Mysqld lsb:mysqld

# 2. DRBD 主從資源
primitive Drbd ocf:linbit:drbd \
  params drbd_resource="mysql" \
  op start timeout="240" op stop timeout="100"
ms My_Drbd Drbd \
  meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"

# 3. 文件系統資源
primitive FileSys ocf:heartbeat:Filesystem \
  params device="/dev/drbd0" directory="/mysqldata" fstype="ext4" \
  op start timeout="60" op stop timeout="60"

# 4. VIP 資源
primitive vip ocf:heartbeat:IPaddr \
  params ip="10.0.15.30" nic="eth0" cidr_netmask="24" \
  op monitor interval="10s"

# 5. 位置/順序約束 (關鍵!)
# 文件系統跟隨 DRBD Master
colocation FileSys_on_My_Drbd inf: FileSys My_Drbd:Master
# DRBD 先於 文件系統
order FileSys_after_My_Drbd inf: My_Drbd:promote FileSys:start
# MySQL 跟隨 文件系統
colocation Mysqld_on_FileSys inf: Mysqld FileSys
order Mysqld_after_FileSys inf: FileSys Mysqld:start
# VIP 跟隨 MySQL
colocation vip_on_Mysqld inf: vip Mysqld

commit
exit

MySQL 配置適配 (/etc/my.cnf)

[mysqld]
datadir = /mysqldata
socket = /mysqldata/mysql.sock
user = mysql
symbolic-links = 0

[mysqld_safe]
log-error = /mysqldata/mysqld.log
pid-file = /mysqldata/mysqld.pid

[client]
socket = /mysqldata/mysql.sock

常用運維命令

操作命令
查看 DRBD 同步進度`watch -n1 drbd-overview` / `cat /proc/drbd`
手動切主`drbdadm primary mysql` (另一節點自動降為 Secondary)
掛載/卸載`mount /dev/drbd0 /mysqldata` / `umount /mysqldata`
清理資源故障`crm resource cleanup Mysqld` / `vip` / `FileSys`
查看叢集狀態`crm status` / `crm_mon -1`

關鍵避坑指南

  1. **DRBD 同步未完成切主會數據不一致** → `drbd-overview` 確認 `UpToDate/UpToDate` 後再操作。
  2. **MySQL 數據目錄必須在 DRBD 掛載點** → `datadir=/mysqldata`,否則漂移後數據不跟隨。
  3. **應用連接用 VIP** → 避免應用層感知主備切換。
  4. **STONITH 生產必須開啟** → 防腦裂,本教程為演示關閉。
  5. **防火牆放行**:3306 (MySQL)、7789 (DRBD)、5405/5404 (Corosync)、2224 (Pacemaker)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved