DRBD (Distributed Replicated Block Device) 提供塊級同步鏡像,配合 Heartbeat 故障切換,可在無共享存儲情況下構建低成本 MySQL 高可用集群 (HA)。本文記錄雙節點 (Master/Slave) 完整部署流程:MySQL 安裝、DRBD 配置、文件系統掛載、Heartbeat 資源管理、VIP 漂移與故障演練。
groupadd mysql
useradd -g mysql -s /sbin/nologin -M mysql
tar zxvf mysql-5.0.67.tar.gz
cd mysql-5.0.67
./configure --prefix=/usr/local/mysql --with-charset=gbk --localstatedir=/var/data --with-extra-charset=all --enable-thread-safe-client
make && make install
cp support-files/my-large.cnf /etc/my.cnf
chown -R mysql:mysql /usr/local/mysql/
/usr/local/mysql/bin/mysql_install_db --user=mysql
chown -R root:root /usr/local/mysql/
chown -R mysql:mysql /var/data
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
/usr/local/mysql/bin/mysqladmin -u root password '123456'
# 環境變數
echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf && ldconfig
echo "export PATH=\$PATH:/usr/local/mysql/bin" >> /etc/profile && source /etc/profile
tar zxvf drbd-8.3.0.tar.gz
cd drbd-8.3.0
make KDIR=/usr/src/kernels/$(uname -r) # 需 kernel-devel
make install
modprobe drbd
lsmod | grep drbd # 確認模組載入
resource r0 {
protocol C; # 同步寫入,最高數據一致性
startup {
degr-wfc-timeout 120;
}
disk {
on-io-error detach;
}
net {
# 可加啟用校驗、加密
}
syncer {
rate 10M; # 同步速率限制
}
on master {
device /dev/drbd0;
disk /dev/sdb1; # 專用分區,建議空分區
address 192.168.100.20:7788;
meta-disk internal;
}
on slave {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.100.21:7788;
meta-disk internal;
}
}
# 兩節點同步執行
drbdadm create-md all # 輸入 yes 確認
/etc/init.d/drbd start
# 查看狀態
cat /proc/drbd
# 期望: cs:Connected, ro:Primary/Secondary (或 Secondary/Primary)
# Master 節點提升為 Primary
drbdadm primary all
drbdsetup /dev/drbd0 primary -o
mkfs.ext3 /dev/drbd0
mkdir -p /var/data
mount /dev/drbd0 /var/data
# 測試寫入數據,再降級/提升驗證同步
umount /var/data
drbdadm secondary all
# Slave 節點
drbdadm primary all
mount /dev/drbd0 /var/data
# 檢查數據是否同步
# libnet
tar zxvf libnet.tar.gz && cd libnet && ./configure && make && make install
# Heartbeat
groupadd haclient
useradd -g haclient hacluster
tar jxvf heartbeat-STABLE-2.1.4.tar.bz2
cd heartbeat-STABLE-2.1.4
./ConfigureMe configure --disable-swig --disable-snmp-subagent
make && make install
cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/
auth 3
3 md5 Hello!
master drbddisk Filesystem::/dev/drbd0::/var/data::ext3 mysqld 192.168.100.25
資源順序:drbddisk (DRBD Primary) → Filesystem (掛載) → mysqld (啟動 MySQL) → VIP (綁定服務 IP)。
debugfile /var/log/ha-debug
logfile /var/log/ha-log
keepalive 2
deadtime 15
warntime 5
initdead 120
udpport 694
bcast eth0
auto_failback off # 建議關閉自動切回,避免震盪
node master
node slave
ping_group group1 192.168.100.20 192.168.100.21
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
hopfudge 1
/etc/init.d/heartbeat start
ps -ef | grep heartbeat # 應見 heartbeat, ipfail, drbddisk 等進程
# 檢查 VIP 是否綁在 Master
ip addr show eth0 | grep 192.168.100.25
# MySQL 是否在 VIP:3306 監聽
netstat -nplt | grep 3306
reboot / killall mysqld。auto_failback 設定)。noatime,nodiratime。my.cnf 設 datadir=/var/data。disk { on-io-error detach; }、Heartbeat 配置 stonith (如 IPMI、APC PDU) 物理隔離故障節點。/proc/drbd 連接狀態、Heartbeat 進程、VIP 歸屬、MySQL 存活、Replication 延遲 (若開啟 Binlog 同步)。