HA專題: 編譯安裝并配置DRBD
前言
上篇我們講到使用
corosync
+pacemaker
實現MySQL
高可用, 但是NFS
容易成為單點故障從而導致數據丟失等嚴重問題, 我們可以使用drbd
來實現MySQL
數據的高可用, 本文介紹如何編譯安裝drbd
并配置drbd
實現不同主機的分區鏡像
實驗環境
今天實驗環境比較簡單, 所以就不畫圖了
主機 | IP | 功用 |
---|---|---|
node1.anyisalin.com | 172.16.1.2 | drbd節點 |
node2.anyisalin.com | 172.16.1.3 | drbd節點 |
注意: 本文實驗中所有主機SElinux和iptables都是關閉的
DRBD介紹
The Distributed Replicated Block Device (DRBD) is a software-based, shared-nothing, replicated storage solution mirroring the content of block devices (hard disks, partitions, logical volumes etc.) between hosts. 轉自官方文檔: Chapter 1. DRBD Fundamentals
分布式文件塊(DRBD)是一種基于軟件, 無共享的, 復制, 鏡像主機間塊設備的內容(lvm, partition, disk..)的解決方案
DRBD鏡像數據的特點:
實時(in real time): 實時復制鏡像設備的內容
透明(transparently): 對于用戶和應用程序鏡像數據的過程是透明的
同步、異步(synchronously、asynchronously): 同步模式下, 程序會通知所欲主機并在所有的寫操作寫入所有主機才會寫入本地磁盤、異步模式下, 程序會在通知寫操作寫入其他主機之前就寫入本地磁盤
DRBD在Linux內核I/O棧的位置
DRBD的三種協議
上面的圖可以看出DRBD在I/O棧的位置, 也大體可以了解DRBD的工作流程, 其實DRBD有三種工作模型, 我們稱它為三種工作協議, 分別為protcol A, protcol B, protocol C, 我們大體說一下這三種工作協議
Protocol A: Asynchronous, 也稱為異步模型, 當DRBD將數據流傳到本機網卡接口時就視為完成傳輸
Protocol B: Semi-Synchronous, 也成為半同步模型, 當DRBD將數據流傳到目標主機的網卡接口時視為完成傳輸
Protocol C: Synchronous, 也成為同步模型, 當DRBD將數據流傳到目標主機并且目標主機將數據寫入DRBD設備時才視其為完成傳輸
DRBD在用戶空間的管理命令
drbdadm: 在drbd套件用較為高級的程序, 配置方法較為簡單, 獲取配置文件中的參數來進行配置, 算是drbdsetup和drbdmeta的前端工具
drbdsetup: 可以直接配置加載的DRBD模塊, 配置較為復雜
drbdmeta: 允許創建、轉儲、還原和修改DRBD元數據結構, 配置更為復雜
安裝前準備工作
配置一個HA集群的前提需要配置時間同步, 雙機互信, 主機名解析
由于我們以前的博文已經講解過如何配置:可以查看HA配置準備工作
獲取并編譯安裝DRBD
我這里系統是
CentOS 6.7
, 通過官方站點DRBD DownLoad下載drbd-8.4.4.tar.gz
[root@node1 ~]# yum groupinstall "Development Tools" "Server Platform Development" -y --nogpgcheck #安裝開發包組 [root@node1 ~]# wget http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz #下載drbd [root@node1 ~]# tar xf drbd-8.4.4.tar.gz -C /usr/src/ [root@node1 ~]# cd /usr/src/drbd-8.4.4/ #編譯安裝 [root@node1 drbd-8.4.4]# ./configure --prefix=/usr/local/drbd --sysconfdir=/etc/ --with-km [root@node1 drbd-8.4.4]# make DIR=/usr/src/kernels/2.6.32-573.el6.x86_64/ [root@node1 drbd-8.4.4]# make install [root@node1 drbd-8.4.4]# cd drbd [root@node1 drbd]# make KDIR=/usr/src/kernels/2.6.32-573.el6.x86_64/ [root@node1 drbd]# cp drbd.ko /lib/modules/2.6.32-573.el6.x86_64/kernel/lib/ #裝載模塊 [root@node1 drbd]# depmod [root@node1 drbd]# modprobe drbd [root@node1 drbd]# lsmod | grep drbd drbd 327242 0 libcrc32c 1246 1 drbd node2的操作同上, 由于篇幅原因不做敘述
配置DRBD
分區
注意:創建完分區后不能對其進行格式化, 下面的操作在node1和node2都需要執行
[root@node1 ~]# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xa5927bb4. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +10G Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@node1 ~]# partx -a /dev/sdb BLKPG: Device or resource busy error adding partition 1 [root@node1 ~]# partx -a /dev/sdb BLKPG: Device or resource busy error adding partition 1
配置文件
配置文件如下,
/etc/drbd.d/glob-common.conf
, 并復制到node2上
global { usage-count no; # minor-count dialog-refresh disable-ip-verification } common { protocol C; handlers { 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"; 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"; 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 { on-io-error detach; #fencing resource-only; } net { cram-hmac-alg "sha1"; shared-secret "mydrbdlab"; } syncer { rate 1000M; }
配置文件如下,
/etc/drbd.d/data.res
, 并復制到node2上
resource data { on node1.anyisalin.com { device /dev/drbd0; disk /dev/sdb1; address 172.16.1.2:7789; meta-disk internal; } on node2.anyisalin.com { device /dev/drbd0; disk /dev/sdb1; address 172.16.1.3:7789; meta-disk internal; } }
啟動并設置DRBD
首先我們先在
node1
和node2
分別初始化資源
[root@node1 drbd.d]# drbdadm create-md data #node1運行 [root@node2 drbd.d]# drbdadm create-md data #node2運行
同時在
node1
和node2
上啟動drbd
[root@node1 drbd.d]# service drbd start #node1運行 [root@node2 drbd.d]# service drbd start #node2運行
設置
node1
為主節點
[root@node1 drbd.d]# drbdadm primary --force data [root@node1 drbd.d]# cat /proc/drbd #可以看到同步過程, 手慢了沒截到圖 # 同步完成后 0: cs:Connected ro:Primary/Secondary ds:UpToDate/Diskless C r----- ns:0 nr:0 dw:0 dr:792 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:10490052
格式化并掛載
我們需要對drbd設備格式化并掛載才能使用,
P.S
drbd正常情況下只有主節點能夠掛載
[root@node1 drbd.d]# mkfs.ext4 /dev/drbd0 #格式化drbd設備 [root@node1 drbd.d]# mkdir /data [root@node1 drbd.d]# mount /dev/drbd0 /data/ #掛載到data目錄 [root@node1 drbd.d]# cd /data/ [root@node1 data]# touch node1.anyisalin.com #創建文件在data目錄
驗證冗余性
我們將
node1
設置為seondary
并將node2
設置為primary
[root@node1 ~]# umount /data/ #首先要卸載drbd0 [root@node1 ~]# drbdadm secondary data #設置為secondary [root@node2 ~]# drbdadm primary data #設置node2為primary [root@node2 ~]# cat /proc/drbd #現在為Primary 2016-04-12 10:29:41 0: cs:Connected ro:Primary/Secondary ds:Diskless/UpToDate C r----- ns:0 nr:664 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 [root@node2 ~]# mkdir /data [root@node2 ~]# mount /dev/drbd0 /data/ #掛載到/data [root@node2 ~]# cd /data/ [root@node2 data]# ls #還是能查看到node1創建的文件 lost+found node1.anyisalin.com [root@node2 data]# touch node2.anyisalin.com
總結
本篇文章的
DRBD
還不算特別完整, 只能通過手動來切換主從, 我們下篇文章介紹如何將DRBD
配置成集群資源并結合MySQL
, 實現MySQL
數據庫的高可用作者水平很低, 如果有錯誤及時指出, 如果你覺得本文寫的好請點一波贊~(≧▽≦)/~
作者: AnyISaIln QQ: 1449472454
感謝: MageEdu
原創文章,作者:Net18-AnyISalIn,如若轉載,請注明出處:http://www.www58058.com/14703