heartbeat+drbd+mysql 高可用方案~

  DRBD的英文全稱爲Distributed Replicated Block Device(分佈式塊設備複製),是linux內核的存儲層中的一個分佈式存儲系統,可利用DRBD在兩臺linux服務器之前共享塊設備、文件系統和數據,類似於一個網絡RAID1的功能。

同步過程如下:

1)、在NODE1上寫操作被提交,然後通過內核傳給DRBD模塊。

2)、DRBD發送寫操作到NODE2。

3)、在NODE2上的DRBD發送寫操作給本地磁盤。

4)、在NODE2上的DRBD向NODE1發送確認消息,確認已經接收到寫操作併發送給本地磁盤。

5)、在NODE1上的DRBD發送寫操作給本地磁盤。

6)、NODE1的內核迴應寫操作完成。

此同步過程還依賴於DRBD的3種同步協議:

 protocol A,寫I/O到達本地磁盤和本地的TCP發送緩存區之後,返回操作成功。

 protocol B,寫I/O到達本地磁盤和遠程節點的緩存區之後,返回操作成功。

 protocol C, 寫I/O到達本地磁盤和遠程節點的磁盤之後,返回操作成功。

heartbeat+DRBD方案中IP信息:

 192.168.0.223(drbd1)        

 192.168.0.224(drbd2)

heartbeat使用的VIP:

 192.168.0.222

配置之前的準備

 1.設置hostname及解析

   hostname drbd1

   hostname drbd2

 2.編輯/etc/hosts文件,添加如下內容:

 192.168.0.223 drbd1

 192.168.0.224 drbd2

保證兩臺主機的hostname 能分別解析到兩臺機器內網IP。

DRBD的部署

  從官方網站下載源碼包來編譯或者直接yum來安裝,這以Centos爲例:

  通過yum安裝DRBD服務:  

  yum -y install drbd83 kmod-drbd83(2.6.33及以上的內核不需要安裝此模塊包了)

  檢查DRBD是否安裝成功:

  [root@drbd1 ~]# modprobe -l |grep -i drbd

  /lib/modules/2.6.18-194.el5/weak-updates/drbd83/drbd.ko

  [root@drbd1 ~]# lsmod |grep drbd

  drbd                  300440  4

  安裝成功之後,在/sbin下面有drbdadmin drbdmeta drbdsetup 以及/etc/init.d/drbd 啓動本。

DRBD的配置

  drbd使用的分區最好一樣,也可以使用LVM進行分區。

  這裏給兩臺機器添加一個10G的分區給數據庫使用。(添加分區簡單,這裏就不貼出來了!)

 [root@drbd1 ~]# cp /usr/share/doc/drbd83-8.3.13/drbd.conf /etc/drbd.conf

 [root@drbd1 ~]# cat /etc/drbd.conf 

# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

include "drbd.d/global_common.conf";

include "drbd.d/*.res";

 [root@drbd1 ~]# cat /etc/drbd.d/global_common.conf |grep -v "#"

global {

        usage-count no; #是否參加DRBD使用者統計,默認yes

}

common {

        protocol C;#使用DRBD的第三種協議。

        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";

        }

       startup {

                wfc-timeout 120;

                degr-wfc-timeout 120;

        }

        disk {

                on-io-error detach;

                fencing resource-only;

        }

        net {

                cram-hmac-alg "sha1"; 

                shared-secret "1111";

                #DRBD同步使用的驗證方式和密碼信息。

        }

        syncer {

                rate 200M;#同步時網絡速率最大值,單位是字節。

        }

}

 

[root@drbd1 ~]# cat /etc/drbd.d/ha.res

resource r0 {

        on drbd1 {

                device /dev/drbd0;#掛載的設備名爲drbd0

                disk /dev/sda5;#使用的磁盤分區爲/dev/sda5

                address 192.168.0.223:7788;#設置DRBD的監聽端口,用於與另一臺機器通信。

                meta-disk internal; #DRBD的元數據存放方式

        }

        on drbd2 {

                device /dev/drbd0;

                disk /dev/sda5;

                address 192.168.0.224:7788;

                meta-disk internal;

        }

}

 上面的的文件分別放在drbd1和drbd2上。drbd.conf的配置參數很多,可以man drbd.conf來查看說  明。

DRBD的啓動

 在啓動DRBD服務之前,要在兩臺機器上/dev/sha5上創建DRBD元數據庫信息。

[root@drbd1 ~]# drbdadm create-md r0

 分別在兩臺機器上執行,成功了會打印出successfully created.

 出現不成功時,需要使用如下命令覆蓋文件系統中的設備塊信息,操作時確認此分區數據已經備  份。

 dd if=/dev/zero of=/dev/sda5 bs=1M count=128

 執行完後,再次執行drbdadm create-md r0

 兩臺機器同時啓動服務: [root@drbd1 ~]# /etc/init.d/drbd start

 設置primary節點 :[root@drbd1 ~]# drbdadm primary r0

 如果上一步不成功 則執行此命令把此節點設置爲primary節點,從頭開始同步:

 drbdadm -- --overwrite-date-of-peef primary r0

 此時DRBD完成,查看/proc/drbd

 [root@drbd1 ~]# cat /proc/drbd 

 version: 8.3.13 (api:88/proto:86-96)

 GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by  [email protected], 2012-05-07 11:56:36

 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

    ns:1744 nr:880 dw:2624 dr:39882 al:13 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

 從輸出信息可知,磁盤狀態都是UpToDate,表示數據同步完成。

 HA有時間在弄上來!

 

 

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