Distributed Replicated Block Device(DRBD)是一個用軟件實現的、無共享的、服務器之間鏡像塊設備內容的存儲複製解決方案。數據鏡像:實時、透明、同步(所有服務器都成功後返回)、異步(本地服務器成功後返回)
DBRD的核心功能通過Linux的內核實現,最接近系統的IO棧,但它不能神奇地添加上層的功能比如檢測到EXT3文件系統的崩潰。
DBRD的位置處於文件系統以下,比文件系統更加靠近操作系統內核及IO棧。
------《百度百科》
實驗環境:
主 192.168.43.128 drbd-M CentOS 5.4 64bit
從 192.168.43.129 drbd-S CentOS5.4 64bit
準備工作:
Vim /etc/hosts
192.168.43.129 drbd-M
192.168.43.130 drbd-S
修改hostname名,
主:hostname drbd-M
從:hostname drbd-S
確保與uname -n輸出一致。PS:很重要,後面的drbd和heartbeat都要依賴於主機名來通信。
搭建環境,採用yum安裝:
- # yum install -y drbd83 kmod-drbd83
- # yum search heartbeat*
- heartbeat所需的安裝包主要有以下幾個:
- heartbeat-devel-2.1.3-3.el5.centos
- heartbeat-stonith-2.1.3-3.el5.centos
- heartbeat-gui-2.1.3-3.el5.centos
- heartbeat-ldirectord-2.1.3-3.el5.centos
- heartbeat-pils-2.1.3-3.el5.centos
- heartbeat-2.1.3-3.el5.centos
一 DRBD的安裝使用
加載安裝drbd模塊:
- # modprobe drbd
檢查是否加載成功:
- # modprobe drbd
- drbd 277272 2
PS:一般使用yum安裝的話系統會自動加載的,此步可以跳過,如果使用源碼包編譯就一定要記得這一步。
添加一塊硬盤,存放數據,主從服務器的硬盤大小可以不一致,但是如果數據超過小的硬盤,後果自己考慮吧!這裏添加的是一塊2G的硬盤,設備名稱爲/dev/sdb2,注意先別急着格式化。
開始drbd的配置:
drbd主配置文件,很重要:
- global {
- }
- common {
- syncer { rate 100M; } //設置兩個節點間的同步速率;
- }
- resource db {
- protocol C; //定義當數據被寫入塊設備時候的一致性級別(數據同步協議),A、B、C三個級別,C爲數據被確認寫到本地磁盤和遠程磁盤後返回,確認成功
- startup { wfc-timeout 0; degr-wfc-timeout 120; }
- disk { on-io-error detach; }
- syncer { rate 100M; }
- on drbd-M { //節點名稱一定要與hostname保持一致;
- device /dev/drbd0; //創建的虛擬磁盤
- disk /dev/sdb2; //物理分區
- address 192.168.43.129:7788; //監聽端口
- meta-disk internal; //局域網類型
- }
- on drbd-S {
- device /dev/drbd0;
- disk /dev/sdb2;
- address 192.168.43.130:7788;
- meta-disk internal;
- }
- }
檢測配置文件:
- #drbdadm ajust db
至此drbd已經配置完畢,以上步驟在主從服務器上都要做,而且drbd的配置文件要保持一致。
主服務器和從服務器上創建matadata:
- # drbdadm create-md all
主從服務器啓動drbd:
- # /etc/init.d/drbd start
此時主從服務器之間開始同步數據,第一次的話時間會稍微長一些。
將drbd-M 設爲主節點
第一次的話要使用:
- # drbdsetup /dev/drbd0 primary -o
以後可以使用drbdadm primary all命令。
將新創建的設備格式化並且掛載:
- # mkfs.ext3 /dev/drbd0 //破壞文件系統:dd if=/dev/zero bs=1M of=/dev/sdb2;sync
- # mount /dev/drbd0 /data/
- # df –H
在/data目錄下創建文件進行測試:
- # cd /data/
- # mkdir linna
- # touch database
- # ls
- database linna lost+found
下面進行測試:
drbd-M:
將主服務器降爲從:
先卸載設備:
- # umount /data/
- # drbdadm secondary all
PS:臨時切斷節點之間的連接可以使用:#drbdadm connect all
查看系統日誌/var/log/message:
Drbd-S:
我們再將從服務器提升爲主服務器看下數據能否同步過來:
- # drbdadm primary all
- # mount /dev/drbd0 /data
- # cd /data/
看,數據已經同步過來了!
我們可以通過查看/proc/drbd來監控主從節點間之間數據同步的過程:
- #Watch -n 10 ‘cat /proc/drbd’
二 MySQL+Heartbeat+DRBD構建高可用環境
圖 MySQL+Heartbeat+DRBD構建高可用MySQL
1 Heartbeat主配置文件/etc/ha.d/ha.cf:
- # cat /etc/ha.d/ha.cf
- logfacility local0 //定義日誌,使用syslog;
- keepalive 2 //定義心跳頻率;
- deadtime 15 //如果其他節點15S內沒有迴應,則確認其死 亡;
- warntime 5 //確認一個節點連接不上5S之後將警告信息寫入日誌;
- initdead 120 //在其他節點死掉之後,系統啓動前需要等待的時間,一般爲deadtime的兩倍;
- udpport 694 // 用來通信的端口;
- bcast eth0 // 在eth0上進行心跳測試
- watchdog /dev/watchdog //可選項
- auto_failback off // 設置當死亡節點恢復正常之後是否重新啓用;容易發生數據不一致的情況,必須項,不然後面hb_standby命令無法使用;
- node drbd-M
- node drbd-S
- respawn hacluster /usr/lib64/heartbeat/ipfail
2 設置兩個節點之間的通信密鑰:
- #cat authkeys
- auth 3
- 3 md5 Hello!
3 定義資源:
- # cat haresources
- drbd-M drbddisk Filesystem::/dev/drbd0::/data::ext3 mysqld 192.168.43.20
drbd-M //主節點;
drbddisk Filesystem::/dev/drbd0::/data::ext3 mysqld //定義Heartbeat需要管理的資源,並且每一部分在/etc/ha.d/haresources.d下有對應的腳本;如果主節點失效,備節點將通過執行這些腳本來啓用資源;如果腳本有參數可以使用“::”來進行分割;
drbddisk 管理drbd資源的腳本;
filesystem 管理文件系統資源的腳本,後面參數定義drbd設備,掛載點,文件系統類型
mysqld 管理mysql的腳本,需要從/etc/init.d/mysqld 拷貝
192.168.43.20 //VIP,用來連接MySQL的IP,當Heartbeat啓用之後會自動分配;
圖 Resource.d 下的內容
在主從節點上啓動Heartbeat
- # /etc/init.d/heartbeat start
查看下資源啓動情況:
先看下主節點drbd-M的日誌:
再看下drbd-S的日誌,已經處在監聽等待狀態:
虛擬IP已經啓動:
Drbd和MySQL的端口已經在監聽:
主節點/data目錄下:
我們切換到drbd-S來試一下,看資源能不能切換過來:
使用/usr/lib64/heartbeat/hb_standby命令可以來模擬主節點死掉的情況。
- 2011/07/18_20:49:53 Going standby [all].
從服務器drbd-S日誌:
再看下資源是否已經搶佔過來:
/data目錄下的文件:
PS:Heartbeat啓動之前必須保證drbd服務已經啓動,並且主服務器已經設置爲primary併成功掛載/dev/drbd0.不然主服務器Heartbeat在啓動的時候會提示找不到/dev/drbd0設備,並造成其他的資源也無法啓動的情況。
PS:心跳探測和數據複製不建議在同一個網卡上進行,本實驗只是爲了方便採取了這樣的方式。
dopd進程:當主從節點之間的失去連接,那麼主從節點之間的數據就無法同步,就會發生從節點的數據過期的情況(數據不一致的情況)。如果此時主服務器發生宕機的情況,那麼dopd進程會阻止從服務器提升爲主服務器。具體實現:
1 修改/etc/ha.d/ha.cf 文件:
- respawn hacluster /usr/lib64/heartbeat/dopd
- apiauth dopd gid=haclient uid=hacluster
2 修改/etc/drbd.conf 文件:
- common {
- handlers {
- outdate-peer “/usr/lib64/heartbeat/drbd-peer-outdater”;
- }
- }
- resource db {
- disk {
- Fencing resource-only;
- }
- }
3 重新加載配置文件:
- # /etc/init.d/heartbeat reload
- #/drbdadm adjust all
MySQL+Heartbeat+DRBD方案可以單獨使用,也可以在構建MySQL主從架構時實現主服務器的高可用,在此不再詳細實現,有興趣的朋友可以嘗試一下(完)!
參考文章:MySQL and DRBD Guide