DRBD簡介
DRBD (Distributed Replicated Block Device) 是 Linux 平台上的分散式儲存系統。其中包含了核心模組,數個使用者 空間管理程式及 shell scripts,通常用于高可用性(high availability, HA)叢集。DRBD 類似磁盤陣列的RAID 1(鏡像),隻不過 RAID 1 是在同一台電腦内,而 DRBD 是透過網絡。
DRBD 是以 GPL2 授權散布的自由軟體。 --- 此處摘自 wikipedia
規劃:
ip 主機名 存儲磁盤 drbd裝置
172.16.43.1 slave1.king.com /dev/sda3
/dev/drbd0
172.16.43.2 slave2.king.com /dev/sda3 /dev/drbd0
一. 實作基本DRBD功能
以下操作沒有特殊說明,皆為雙個節點都要操作
i) 主機互信(雙節點之間)
# 確定 hostname 與 uname -n 一緻
sed -i 's@^\(HOSTNAME=\).*@\slave1.king.com@' /etc/sysconfig/network
hostname slave1.king.com
uname -n
# 確定 /etc/hosts 檔案中添加兩節點非DNS解析資訊
172.16.43.1 slave1.king.com
172.16.43.2 slave2.king.com
# 雙機互信
ssh-keygen -t rsa -P ''
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
ii) drbd配置安裝
# 下載下傳drbd rpm包(注意drbd-kmdl版本号前一半與作業系統要相對應)
drbd-8.4.3-33.el6.x86_64.rpm
drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm
rpm -ivh *.rpm
1 配置/etc/drbd.d/global-common.conf
global {
usage-count no;
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C;
handlers {
# 當承載drbd的實體檔案損壞時處理
# echo b > /proc/sysrq-trigger
# 立即重新開機機器,而且不會将緩沖區同步到硬碟,也不會解除安裝已挂載的硬碟
pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
# 當同步過程中主裝置失去聯系處理
# echo b > /proc/sysrq-trigger
# 立即重新開機機器,而且不會将緩沖區同步到硬碟,也不會解除安裝已挂載的硬碟
pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
# 當同步過程中發生io錯誤處理
# echo o > /proc/sysrq-trigger
# 關閉系統
local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
# split-brain "/usr/lib/drbd/notify-split-brain.sh root";
# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
}
startup {
#wfc-timeout 120;
#degr-wfc-timeout 120;
}
disk {
# 當磁盤io異常,将分離目前裝置
on-io-error detach;
#fencing resource-only;
}
net {
# 消息驗證校驗碼
cram-hmac-alg "sha1";
shared-secret "9bb9f0ea87ca30cfbc094c7dad12d1ea";
# openssl dgst sha1 install.log 對任意檔案進行資訊摘要取得交換碼
}
syncer {
# drbd裝置同步速率
rate 1000M;
}
}
2. 格式化磁盤
fdisk /dev/sda
3、定義一個資源/etc/drbd.d/web.res,内容如下:
resource web {
device /dev/drbd0;
disk /dev/sda3;
meta-disk internal;
on master1.king.com {
address 172.16.43.1:7789;
}
on master2.king.com {
address 172.16.43.2:7789;
}
}
4. 同步以上操作或檔案,并初始化資源及啟動服務
drbdadm create-md web
service drbd start
# 此處隻能提升一個節點為主資源
drbdadm primary --force web
# 檢視資訊等待同步完成
drbd-overview
#0:web Connected Primary/Secondary UpToDate/UpToDate C r----
5. 挂載使用
mke2fs -j -L DRBD /dev/drbd0 # 僅在一個節點執行
mkdir /mnt/drbd
mount /dev/drbd0 /mnt/drbd
# 如果之前提升二個節點都為主資源時,在這個 /mnt/drbd
# 目錄下同時讀寫可能會有IO異常,導緻drbd裝置失效
# 為了解決這個問題則使用 gfs + cman 實作分布式檔案鎖方案
二) gfs叢集檔案系統(重點)
1. 在 /etc/drbd.d/global-common.conf檔案common 中添加
# 在配置檔案的 net 選項中
allow-two-primaries yes;
2. 安裝 cman 底層消息通訊 + 全局鎖功能
ccs_tool create gfscluster
ccs_tool addnode -n 1 -v 1 slave1.king.com
ccs_tool addnode -n 2 -v 1 slave2.king.com
# 檢視節點
ccs_tool lsnode
#Cluster name: gfscluster, config_version: 3
.
#Nodename Votes Nodeid Fencetype
#slave1.king.com 1 1
#slave2.king.com 1 2
3. 啟動cman之前禁用 NetworkManager
chkconfig NetworkManager off
service cman restart
4. 準備新磁盤
fdisk /dev/sda
partx -a /dev/sda
5. 再次啟動 drbd 服務
# 如果之前做過 ii) 步實驗的話,請确定彈出的資訊
drbdadm create-md web
service drbd start
#
# 提升第一節點為主資源
[slave1: ~] drbdadm primary --force web
#
# 此處可以提升二個節點為主資源(分别執行)
# 請注意請確定一個主已經同步完成
# 0:web/0 Connected Primary/Secondary UpToDate/UpToDate C r-----
# 再提升一下個為主節點
[slave2: ~] drbdadm primary --force web
6. 格式化gfs2并多處挂載
# 将drbd格式化為gfs2 (這一步隻需要一個節點操作即可)
mkfs.gfs2 -j 2 -p lock_dlm -t gfscluster:gfslocktable /dev/drbd0
#
# 多處挂載使用
mount /dev/drbd0 /gfs
iv) 測試