本文示範在 Ubuntu 8.04 上部署 DRBD 8.0.11 搭配 MySQL 5.1.36,採用雙節點主備模式實現資料庫高可用。兩台伺服器資訊如下:
核心思路:利用 DRBD 在區塊層面將磁碟分區即時鏡像到備機,MySQL 資料目錄掛載於 DRBD 設備之上,故障時透過切換 DRBD 角色並掛載檔案系統實現秒級切換。
在兩台節點上分別執行:
tar -zxvf mysql-5.1.36.tar.gz
cd mysql-5.1.36
./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-plugins=max-no-ndb
make && make install
useradd mysql
安裝完成後暫不啟動 MySQL,先部署 DRBD。
apt-get update && apt-get install drbd8-utils
驗證模組載入:
lsmod | grep drbd
# 輸出包含 drbd 模組即表示成功
假設新磁碟為 /dev/sdb,於兩節點建立相同大小的分區 /dev/sdb1 供 DRBD 使用:
fdisk /dev/sdb
# 新建主分區,類型 Linux (83),寫入分區表
編輯 /etc/drbd.conf,兩節點內容完全一致:
global { usage-count no; }
common { syncer { rate 10M; } }
resource mysql {
protocol C;
on DBTest1 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.0.101:7788;
meta-disk internal;
}
on DBTest2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.0.102:7788;
meta-disk internal;
}
}
drbdadm create-md all
/etc/init.d/drbd start
drbdadm primary all
mkfs.ext3 /dev/drbd0
mkdir /dbfile
mount /dev/drbd0 /dbfile
drbdadm create-md all
/etc/init.d/drbd start
# 從節點無需建立檔案系統,資料會自動同步
執行 cat /proc/drbd,關鍵欄位解讀:
Connected 表示雙向通訊正常Primary/Secondary 符合預期UpToDate/UpToDate 代表資料一致同步完成後,ds 會顯示 UpToDate/UpToDate。
cd /usr/local/mysql
bin/mysql_install_db --datadir=/dbfile --user=mysql
建立 /dbfile/my.cnf,重點設定:
[mysqld]
datadir=/dbfile
basedir=/usr/local/mysql
port=3306
socket=/tmp/mysql.sock
server-id=2
log-bin=DBTest_bin
# 其他效能參數依實際硬體調整
create database crn; create table t(i int); insert into t values(1),(2),(3);mysqladmin shutdown && umount /dbfile && drbdadm secondary alldrbdadm primary all && mount /dev/drbd0 /dbfile && bin/mysqld_safe --defaults-file=/dbfile/my.cnf --user=mysql &use crn; select * from t; 應回傳 1,2,3。測試通過即證明 DRBD 同步與故障切換機制運作正常。