MySQL+Heartbeat+DRBD構建高可用MySQL環境

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安裝:

  1. # yum install -y drbd83 kmod-drbd83 
  2.  
  3. # yum search heartbeat* 
  4.  
  5. heartbeat所需的安裝包主要有以下幾個: 
  6.  
  7. heartbeat-devel-2.1.3-3.el5.centos 
  8.  
  9. heartbeat-stonith-2.1.3-3.el5.centos 
  10.  
  11. heartbeat-gui-2.1.3-3.el5.centos 
  12.  
  13. heartbeat-ldirectord-2.1.3-3.el5.centos 
  14.  
  15. heartbeat-pils-2.1.3-3.el5.centos 
  16.  
  17. heartbeat-2.1.3-3.el5.centos 

一 DRBD的安裝使用

加載安裝drbd模塊:

  1. # modprobe drbd 

檢查是否加載成功:

  1. # modprobe drbd 
  2. drbd                  277272  2 

PS:一般使用yum安裝的話系統會自動加載的,此步可以跳過,如果使用源碼包編譯就一定要記得這一步。

添加一塊硬盤,存放數據,主從服務器的硬盤大小可以不一致,但是如果數據超過小的硬盤,後果自己考慮吧!這裏添加的是一塊2G的硬盤,設備名稱爲/dev/sdb2,注意先別急着格式化。

開始drbd的配置:

drbd主配置文件,很重要:

  1. global {  
  2.  
  3. common {  
  4. syncer { rate 100M; }    //設置兩個節點間的同步速率;  
  5.  
  6. resource db {  
  7. protocol C;     //定義當數據被寫入塊設備時候的一致性級別(數據同步協議),A、B、C三個級別,C爲數據被確認寫到本地磁盤和遠程磁盤後返回,確認成功  
  8. startup { wfc-timeout 0; degr-wfc-timeout 120; } 
  9. disk { on-io-error detach; } 
  10. syncer { rate 100M; } 
  11.  
  12. on drbd-M {  //節點名稱一定要與hostname保持一致; 
  13.   device /dev/drbd0;     //創建的虛擬磁盤 
  14.   disk   /dev/sdb2;      //物理分區 
  15. address 192.168.43.129:7788;    //監聽端口 
  16.   meta-disk internal;         //局域網類型 
  17.  
  18.  
  19. on drbd-S { 
  20.    device /dev/drbd0; 
  21.    disk   /dev/sdb2; 
  22.    address 192.168.43.130:7788; 
  23.    meta-disk internal; 
  24.  
  25.  

檢測配置文件:

  1. #drbdadm ajust db 

至此drbd已經配置完畢,以上步驟在主從服務器上都要做,而且drbd的配置文件要保持一致。

主服務器和從服務器上創建matadata:

  1. # drbdadm create-md all 

主從服務器啓動drbd:

  1. # /etc/init.d/drbd start 

此時主從服務器之間開始同步數據,第一次的話時間會稍微長一些。

將drbd-M 設爲主節點

第一次的話要使用:

  1. # drbdsetup /dev/drbd0 primary -o 

以後可以使用drbdadm  primary all命令。

將新創建的設備格式化並且掛載:

  1. # mkfs.ext3 /dev/drbd0  //破壞文件系統:dd if=/dev/zero bs=1M of=/dev/sdb2;sync 
  2. # mount /dev/drbd0 /data/  
  3. # df –H 

wps_clip_p_w_picpath-17319

在/data目錄下創建文件進行測試:

  1. # cd /data/ 
  2. # mkdir linna 
  3. # touch database 
  4. # ls 
  5. database  linna  lost+found 

下面進行測試:

drbd-M:

將主服務器降爲從:

先卸載設備:

  1. # umount /data/ 
  2. # drbdadm secondary all 

PS:臨時切斷節點之間的連接可以使用:#drbdadm connect all

查看系統日誌/var/log/message:

wps_clip_p_w_picpath-27705

Drbd-S:

我們再將從服務器提升爲主服務器看下數據能否同步過來:

  1. # drbdadm primary all 

wps_clip_p_w_picpath-11042

  1. # mount /dev/drbd0 /data 
  2. # cd /data/ 

wps_clip_p_w_picpath-5498

看,數據已經同步過來了!

我們可以通過查看/proc/drbd來監控主從節點間之間數據同步的過程:

  1. #Watch  -n 10 ‘cat /proc/drbd’ 

二 MySQL+Heartbeat+DRBD構建高可用環境

wps_clip_p_w_picpath-11886

                  圖 MySQL+Heartbeat+DRBD構建高可用MySQL

1 Heartbeat主配置文件/etc/ha.d/ha.cf:

  1. # cat /etc/ha.d/ha.cf 
  2. logfacility local0       //定義日誌,使用syslog; 
  3. keepalive 2           //定義心跳頻率; 
  4. deadtime 15          //如果其他節點15S內沒有迴應,則確認其死     亡;       
  5. warntime 5           //確認一個節點連接不上5S之後將警告信息寫入日誌;   
  6. initdead 120          //在其他節點死掉之後,系統啓動前需要等待的時間,一般爲deadtime的兩倍; 
  7. udpport 694          // 用來通信的端口; 
  8. bcast eth0            // 在eth0上進行心跳測試 
  9. watchdog /dev/watchdog  //可選項 
  10. auto_failback off        // 設置當死亡節點恢復正常之後是否重新啓用;容易發生數據不一致的情況,必須項,不然後面hb_standby命令無法使用; 
  11. node drbd-M 
  12. node drbd-S 
  13. respawn hacluster /usr/lib64/heartbeat/ipfail 

2 設置兩個節點之間的通信密鑰:

  1. #cat authkeys 
  2. auth 3 
  3. 3 md5 Hello! 

3 定義資源:

  1. # cat haresources 
  2. 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啓用之後會自動分配;

wps_clip_p_w_picpath-13327

                     圖 Resource.d 下的內容

在主從節點上啓動Heartbeat

  1. # /etc/init.d/heartbeat start 

查看下資源啓動情況:

先看下主節點drbd-M的日誌:

wps_clip_p_w_picpath-26722

再看下drbd-S的日誌,已經處在監聽等待狀態:

wps_clip_p_w_picpath-6070

虛擬IP已經啓動:

wps_clip_p_w_picpath-4355

Drbd和MySQL的端口已經在監聽:

wps_clip_p_w_picpath-2739

主節點/data目錄下:

wps_clip_p_w_picpath-17322

我們切換到drbd-S來試一下,看資源能不能切換過來:

使用/usr/lib64/heartbeat/hb_standby命令可以來模擬主節點死掉的情況。

  1. 2011/07/18_20:49:53 Going standby [all]. 

wps_clip_p_w_picpath-5686

從服務器drbd-S日誌:

wps_clip_p_w_picpath-28906

再看下資源是否已經搶佔過來:

wps_clip_p_w_picpath-29561

/data目錄下的文件:

wps_clip_p_w_picpath-22200

PS:Heartbeat啓動之前必須保證drbd服務已經啓動,並且主服務器已經設置爲primary併成功掛載/dev/drbd0.不然主服務器Heartbeat在啓動的時候會提示找不到/dev/drbd0設備,並造成其他的資源也無法啓動的情況。

wps_clip_p_w_picpath-17254

PS:心跳探測和數據複製不建議在同一個網卡上進行,本實驗只是爲了方便採取了這樣的方式。

dopd進程:當主從節點之間的失去連接,那麼主從節點之間的數據就無法同步,就會發生從節點的數據過期的情況(數據不一致的情況)。如果此時主服務器發生宕機的情況,那麼dopd進程會阻止從服務器提升爲主服務器。具體實現:

1 修改/etc/ha.d/ha.cf 文件:

  1. respawn  hacluster /usr/lib64/heartbeat/dopd 
  2. apiauth  dopd gid=haclient uid=hacluster  

2 修改/etc/drbd.conf 文件:

  1. common { 
  2. handlers { 
  3.          outdate-peer “/usr/lib64/heartbeat/drbd-peer-outdater”; 
  4.       } 
  5. resource db { 
  6. disk { 
  7. Fencing resource-only; 
  8.      } 
  9.    } 

3 重新加載配置文件:

  1. # /etc/init.d/heartbeat reload 
  2. #/drbdadm adjust all 

     MySQL+Heartbeat+DRBD方案可以單獨使用,也可以在構建MySQL主從架構時實現主服務器的高可用,在此不再詳細實現,有興趣的朋友可以嘗試一下(完)!

參考文章:MySQL and DRBD Guide

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章