- 參考資料
這篇說明的很好 http://wiselysong.blogspot.com/2009/01/heartbeatdrbdmysql-on-debian-etch.html
這篇步驟很詳細 http://forum.icst.org.tw/phpbb/viewtopic.php?f=10&t=17893
- 環境
作業系統 Debian Lenny
機器一 Hostname: deb01 IP: 192.168.1.121
機器二 Hostname: deb02 IP: 192.168.1.122
HeartBeat 控制服務對外 IP: 192.168.1.123
對外服務 MySQL
- 大部分動作兩台都要設定
看情形可以先在一台設定好
再將設定檔複製到另外一台
簡單註明 deb01 deb02
表示兩台都要做的動作
- Debian Lenny 加入 backports
deb01 deb02
http://backports.org/dokuwiki/doku.php?id=instructions
vi /etc/apt/sources.list.d/lenny-backports.list - 寫入這行設定
deb http://www.backports.org/debian lenny-backports main contrib non-free - 更新
apt-get update
apt-get install debian-backports-keyring
- DRBD 備份的硬碟分割
deb01 deb02
兩邊的分割大小需相同
不要格式化也不要掛載
- 安裝 backports 裡的 DRBD
deb01 deb02
apt-get install -t lenny-backports drbd8-source drbd8-utils
module-assistant auto-install drbd8
- 設定 DRBD 設定檔
deb01 => deb02
deb01 設定好複製到 deb02
vi /etc/drbd.d/global_common.conf - 在 syncer 區塊裡加入
rate 100M;
DRBD 資源設定
vi /etc/drbd.d/r0.res
resource r0 {
on deb01 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.121:7789;
meta-disk internal;
}
on deb02 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.122:7789;
meta-disk internal;
}
}
- 建立 /dev/drbd0 裝置和資源
deb01 deb02
sudo mknod /dev/drbd0 b 147 0
drbdadm create-md r0
- 啟動 DRBD 服務
deb01 deb02
如果遇到 drbd module 無法載入 kernel 的錯誤訊息
/etc/init.d/drbd start
請更新系統後再試試
apt-get update
apt-get dist-upgrade
- 檢查 DRBD 連線狀態
deb01 deb02
cat /proc/drbd
- 第一次設定主要主機
deb01
設定完這個步驟會進行同步
可檢查兩台主機的連線狀態
- drbdsetup 只有第一次設定需要
- 以後用 drbdadm 即可
drbdsetup /dev/drbd0 primary -o
drbdadm primary r0
- 第一次同步時的注意事項
一開始設定的 rate 100M
第一次同步完後可以調整這個 rate
以免以後 drbd 佔住過多頻寬影響服務效能
通常建議設定頻寬的 30%
參考資料:http://www.drbd.org/users-guide/s-configure-syncer-rate.html
- 分割格式化 DRBD 使用的硬碟
deb01
請等第一次硬碟同步完在進行
- 使用 xfs 格式
apt-get install xfsdump - 格式化硬碟分割
mkfs.xfs /dev/drbd0 - 掛載分割磁區
mkdir /db
mount -o noatime /dev/drbd0 /db
- 停止 MySQL
deb01 deb02
/etc/init.d/mysql stop
- 移動 MySQL 資料
deb01
mv /var/lib/mysql /db
- 修改 MySQL 設定
deb01 => deb02
兩邊的 MySQL 設定也要相同
因此在 deb01 改完複製到 deb02 上
vi /etc/mysql/my.cnf
datadir = /db/mysql
vi /etc/mysql/debian.cnf
datadir = /db/mysql
- 啟動 MySQL
deb01
/etc/init.d/mysql start
- 取消開機自動啟動 MySQL
deb01 deb02
因為之後要交給 HeartBeat 接管
mv /etc/rc2.d/S19mysql /etc/rc2.d/K21mysql
- deb01
先登入 MySQL 做一些修改
停止 MySQL
mysql -u root -p
create database created_at_deb01;
quit;
卸載 /db
/etc/init.d/mysql stop
將 DRBD 切回 Secondary
umount /db
drbdadm secondary r0
- deb02
將 deb02 上的 DRBD 切成 Primary
掛載 /dev/drbd0 到 /db
drbdadm primary r0
啟動 MySQL
mount /dev/drbd0 /db
檢查在 deb01 的修改是否有同步過來
/etc/init.d/mysql start
mysql -u root -p
show databases;
- 安裝 backports 裡的 HeartBeat
deb01 deb02
apt-get install -t lenny-backports heartbeat
- 編輯 DRBD 設定加入 HeartBeat dopd (DRBD outdate-peer daemon)
deb01 deb02
vi /etc/drbd.d/global_common.conf - handlers 的區域裡加入
outdate-peer “/usr/lib/heartbeat/drbd-peer-outdater -t 6”; - disk 的區域裡加入
fencing resource-only;
- HeartBeat 的 dopd plugin 需要有 root 的權限執行 drbdsetup 和 drbdmeta
deb01 deb02
chgrp haclient /sbin/drbdsetup
chmod o-x /sbin/drbdsetup
chmod u+s /sbin/drbdsetup
chgrp haclient /sbin/drbdmeta
chmod o-x /sbin/drbdmeta
chmod u+s /sbin/drbdmeta
- HeartBeat 三個主要檔案
deb01 deb02
/etc/ha.d/authkeys
/etc/ha.d/ha.cf
/etc/ha.d/haresources - 可以複製系統的範例檔修改
cp /usr/share/doc/heartbeat/authkeys
cp /usr/share/doc/heartbeat/ha.cf.gz
cp /usr/share/doc/heartbeat/haresources.gz
- 產生 HeartBeat 驗證檔案 authkeys
deb01 => deb02
deb01 做完複製到 deb02
( echo -ne "auth 1\n1 sha1 "; dd if=/dev/urandom bs=512 count=1 | openssl md5 ) > /etc/ha.d/authkeys - 修改權限
chmod 0600 /etc/ha.d/authkeys
- 編輯 HeartBeat 設定檔
deb01 => deb02
deb01 做完複製到 deb02
vi /etc/ha.d/ha.cf
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 15
warntime 10
initdead 60
udpport 694
bcast eth0
auto_failback off
node deb01
node deb02
ping 192.168.1.1
respawn hacluster /usr/lib/heartbeat/ipfail
respawn hacluster /usr/lib/heartbeat/dopd
apiauth dopd gid=haclient uid=hacluster
- 設定 HeartBeat 資源檔
deb01 => deb02
deb01 做完複製到 deb02
啟動時由左到右
關閉時由右到左
vi /etc/ha.d/haresources
deb01 192.168.1.123/24 drbddisk::r0 Filesystem::/dev/drbd0::/db::xfs::noatime mysql
- deb01
設定為 HeartBeat 主要主機 - 192.168.1.123/24
設定給 HeartBeat 控制提供服務的 IP - drbddisk::r0
設定 DRBD 的資源 - Filesystem::/dev/drbd0::/db::xfs::noatime
設定 DRBD 的硬碟掛載到 /db ,格式為 xfs ,掛載時帶入參數 noatime - mysql
設定啟動或關閉的服務
deb01 上關閉 HeartBeat
deb02 應該接手跑以下流程
/etc/init.d/heartbeat stop
- 啟動 deb02 上的服務 IP: 192.168.1.123
- 將 DRBD 設為 Primary
- 將 /dev/drbd0 掛載 /db
- 啟動 MySQL 服務