drbd_logo_small

DRBD建置要領

DRBD是三小?以下來自wiki的資料
DRBD (Distributed Replicated Block Device) 是 Linux 平台上的分散式儲存系統。其中包含了核心模組,數個使用者空間管理程式及 shell scripts,通常用於高可用性(high availability, HA)叢集。DRBD 類似磁碟陣列的RAID 1(鏡像),只不過 RAID 1 是在同一台電腦內,而 DRBD 是透過網路。

建置一個DRBD的架構,必需要一些條件:
二台以上的伺服器。
每台伺服器中都要再多一個分割區給DRBD同步資料。

DRBD運作時只有一台為Primary並且這台才有權將DRBD的磁區掛載,其餘機器只能同步。

實作

===環境 Debian DRBD + MySQL=====
*作業系統 Debian 6
*機器一 Hostname: deb01 IP: 192.168.1.121
*機器二 Hostname: deb02 IP: 192.168.1.122
*HeartBeat 控制服務對外 IP: 192.168.1.123
*對外服務 MySQL

大部分動作兩台都要設定,看情形可以先在一台設定好再將設定檔複製到另外一台

*簡單註明 +deb01 deb02+ 表示兩台都要做的動作

**DRBD 備份的硬碟分割 +deb01 deb02+
兩邊的分割大小需相同,不要格式化也不要掛載。

===安裝 DRBD 8.3===

安裝 DRBD (deb01 deb02)
[cc lang=”bash”]
apt-get install drbd8*
[/cc]

===設定 DRBD===

設定 DRBD 設定檔 (deb01 => deb02) deb01 設定好複製到 deb02

[cc lang=”bash”]
vi /etc/drbd.d/global_common.conf
# 在 syncer 區塊裡加入
rate 100M;
[/cc]

DRBD 資源設定

[cc lang=”bash”]
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;
}
}
[/cc]

建立 /dev/drbd0 裝置和資源(deb01 deb02)

[cc lang=”bash”]
sudo mknod /dev/drbd0 b 147 0
drbdadm create-md r0
[/cc]

===啟動DRBD===
啟動 DRBD 服務 (deb01 deb02)

[cc lang=”bash”]
/etc/init.d/drbd start
[/cc]

如果遇到 drbd module 無法載入 kernel 的錯誤訊息,請更新系統後再試試。

[cc lang=”bash”]
apt-get update
apt-get dist-upgrade
[/cc]

檢查 DRBD 連線狀態 (deb01 deb02)

[cc lang=”bash”]
cat /proc/drbd
[/cc]

===進行MySQL on DRBD 磁區同步===

第一次設定主要主機 (only deb01) 設定完這個步驟會進行同步,可檢查兩台主機的連線狀態:

[cc lang=”bash”]
# drbdsetup 只有第一次設定需要
# 以後用 drbdadm 即可
drbdsetup /dev/drbd0 primary -o
drbdadm primary r0
[/cc]

* 第一次同步時的注意事項
**一開始設定的 rate 100M ,第一次同步完後可以調整這個 rate ,以免以後 drbd 佔住過多頻寬影響服務效能,通常建議設定頻寬的 30% 。

分割格式化 DRBD 使用的硬碟(deb01) ,請等第一次硬碟同步完在進行

[cc lang=”bash”]
# 使用 xfs 格式
apt-get install xfsdump
# 格式化硬碟分割
mkfs.xfs /dev/drbd0
# 掛載分割磁區
mkdir /db
mount -o noatime /dev/drbd0 /db
[/cc]

===更動 MySQL 的資料位置===

停止 MySQL (deb01 deb02)

[cc lang=”bash”]
/etc/init.d/mysql stop
[/cc]

移動 MySQL 資料 (deb01)

[cc lang=”bash”]
mv /var/lib/mysql /db
[/cc]

修改 MySQL 設定 (deb01 => deb02) ,兩邊的 MySQL 設定也要相同,因此在 deb01 改完複製到 deb02 上。

[cc lang=”bash”]
vi /etc/mysql/my.cnf
datadir = /db/mysql
#bind-address=127.0.0.1
vi /etc/mysql/debian.cnf
datadir = /db/mysql
[/cc]

啟動 MySQL (deb01)

[cc lang=”bash”]
/etc/init.d/mysql start
[/cc]

取消開機自動啟動 MySQL (deb01 deb02) 因為之後要交給 HeartBeat 接管。

[cc lang=”bash”]
mv /etc/rc2.d/S19mysql /etc/rc2.d/K21mysql
[/cc]

===測試 DRBD 同步情形===

on deb01 ,先登入 MySQL 做一些修改

[cc lang=”bash”]
mysql -u root -p
create database created_at_deb01;
quit;
[/cc]

停止 MySQL

[cc lang=”bash”]
/etc/init.d/mysql stop
[/cc]

卸載 /db

[cc lang=”bash”]
umount /db
[/cc]

將 DRBD 切回 Secondary

[cc lang=”bash”]
drbdadm secondary r0
[/cc]

on deb02 ,將 deb02 上的 DRBD 切成 Primary

[cc lang=”bash”]
drbdadm primary r0
[/cc]

掛載 /dev/drbd0 到 /db

[cc lang=”bash”]
mount /dev/drbd0 /db
[/cc]

啟動 MySQL

[cc lang=”bash”]
/etc/init.d/mysql start
[/cc]

檢查在 deb01 的修改是否有同步過來

[cc lang=”bash”]
mysql -u root -p
show databases;
[/cc]

Related Posts Plugin for WordPress, Blogger...

Leave a Reply