DRBD簡介
node
DRBD (Distributed Replicated Block Device) 是 Linux 平臺上的分散式儲存系統。其中包含了核心模組,數個使用者 空間管理程式及 shell scripts,一般用於高可用性(high availability, HA)叢集。DRBD 相似磁盤陣列的RAID 1(鏡像),只不過 RAID 1 是在同一臺電腦內,而 DRBD 是透過網絡。web
DRBD 是以 GPL2 受權散佈的自由軟件。 --- 此處摘自 wikipediashell
規劃:bash
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功能ssh
如下操做沒有特殊說明,皆爲雙個節點都要操做
分佈式
i) 主機互信(雙節點之間)ide
# 確保 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 root@slave2.king.com
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
三、定義一個資源/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) 測試
v) 總結
基於drbd的單,雙主配置到此爲止,有些童鞋會問雙主模型用在什麼狀況下,它的用法偏偏在不須要集羣的場景.例如兩臺httpd服務器作負載均衡,兩臺httpd都須要
訪問一個共享儲存,不管那一臺httpd服務器均可以上傳修改共享存儲的數據,這是單主的drbd所不能實現的.固然這裏的gfs也能夠作集羣lvm,在下一篇中咱們將繼續