天天看點

drbd+ocfs2建構的共享存儲方案

 如下内容要利用到drbd的雙主模型,并且要加上叢集檔案系統OCFS2,建構一個共享存儲方案:

隻用drbd裝置的話,當兩個節點同時網一個檔案系統寫資料會導緻檔案系統崩潰,而應以OCFS2叢集檔案系統,會提供一個檔案鎖管理器,防止檔案系統崩潰。

一,DRBD的介紹及配置過程:

 DRBD:(distributed replication block device)即分布式複制塊裝置。它的工作原理是:在A主機上有對指定磁盤裝置寫請求時,資料發送給A主機的kernel,然後通過kernel中的一個子產品,把相同的資料傳送給B主機的kernel中一份,然後B主機再寫入自己指定的磁盤裝置,進而實作資料的備份,并能解決資料檔案集中存放的問題,這是一種企業常用的廉價備份機制。

DRBD一般是一主一從,并且所有的讀寫操作隻能在主伺服器上進行,并且從節點裝置也不能挂載,但是主從伺服器之間是可以進行調換的。

下面為drbd的配置過程:

前提:

1)本配置共有兩個測試節點,分别node1.magedu.com和node2.magedu.com,相應的IP位址分别為172.16.30.4和172.16.30.6;

2)node1和node2兩個節點上各提供了一個大小相同的分區作為drbd裝置;我們這裡為在兩個節點上均為/dev/sda5,大小為512M;(請事先建好)

# fdisk /dev/sda  (不要格式化)

# partprobe /dev/sda

3)系統為rhel5.4,x86平台;

1、準備工作

兩個節點的主機名稱和對應的IP位址解析服務可以正常工作,且每個節點的主機名稱需要跟"uname -n“指令的結果保持一緻;是以,需要保證兩個節點上的/etc/hosts檔案均為下面的内容:

172.16.30.4 node1.magedu.com node1

172.16.30.6 node2.magedu.com node2

為了使得重新啟動系統後仍能保持如上的主機名稱,還分别需要在各節點執行類似如下的指令:

Node1:

# sed -i 's@\(HOSTNAME=\).*@\1node1.magedu.com@g' /etc/sysconfig/network

# hostname node1.magedu.com

Node2:

# sed -i 's@\(HOSTNAME=\).*@\1node2.magedu.com@g' /etc/sysconfig/network

# hostname node2.magedu.com

設定兩個節點可以基于密鑰進行ssh通信,這可以通過類似如下的指令實作:

# ssh-keygen -t rsa

# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2

Node2:

# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1

2、安裝軟體包

drbd共有兩部分組成:核心子產品和使用者空間的管理工具。其中drbd核心子產品代碼已經整合進Linux核心2.6.33以後的版本中,是以,如果您的核心版本高于此版本的話,你隻需要安裝管理工具即可;否則,您需要同時安裝核心子產品和管理工具兩個軟體包,并且此兩者的版本号一定要保持對應。

目前在用的drbd版本主要有8.0、8.2和8.3三個版本,其對應的rpm包的名字分别為drbd, drbd82和drbd83,對應的核心子產品的名字分别為kmod-drbd, kmod-drbd82和kmod-drbd83。各版本的功能和配置等略有差異;我們實驗所用的平台為x86且系統為rhel5.4,是以需要同時安裝核心子產品和管理工具。我們這裡選用最新的8.3的版本(drbd83-8.3.8-1.el5.centos.i386.rpm和kmod-drbd83-8.3.8-1.el5.centos.i686.rpm),下載下傳位址為:http://mirrors.sohu.com/centos/5.6/extras/i386/RPMS/。

實際使用中,您需要根據自己的系統平台等下載下傳符合您需要的軟體包版本

下載下傳完成後在兩個節點上直接安裝即可:

# yum -y --nogpgcheck localinstall drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm

3、配置drbd

drbd的主配置檔案為/etc/drbd.conf;為了管理的便捷性,目前通常會将些配置檔案分成多個部分,且都儲存至/etc/drbd.d目錄中,主配置檔案中僅使用"include"指令将這些配置檔案片斷整合起來。通常,/etc/drbd.d目錄中的配置檔案為global_common.conf和所有以.res結尾的檔案。其中global_common.conf中主要定義global段和common段,而每一個.res的檔案用于定義一個資源。

在配置檔案中,global段僅能出現一次,且如果所有的配置資訊都儲存至同一個配置檔案中而不分開為多個檔案的話,global段必須位于配置檔案的最開始處。目前global段中可以定義的參數僅有minor-count, dialog-refresh, disable-ip-verification和usage-count。

common段則用于定義被每一個資源預設繼承的參數,可以在資源定義中使用的參數都可以在common段中定義。實際應用中,common段并非必須,但建議将多個資源共享的參數定義為common段中的參數以降低配置檔案的複雜度。

resource段則用于定義drbd資源,每個資源通常定義在一個單獨的位于/etc/drbd.d目錄中的以.res結尾的檔案中。資源在定義時必須為其命名,名字可以由非空白的ASCII字元組成。每一個資源段的定義中至少要包含兩個host子段,以定義此資源關聯至的節點,其它參數均可以從common段或drbd的預設中進行繼承而無須定義。

下面的操作在node1.magedu.com上完成

1)複制樣例配置檔案為即将使用的配置檔案:

# cp /usr/share/doc/drbd83-8.3.8/drbd.conf  /etc

2)配置/etc/drbd.d/global-common.conf,添加啟用這些向,#号為注釋:

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;

#fencing dont-care;

        net {

cram-hmac-alg "sha1";

  shared-secret "mydrbdlab";

  allow-two-primaries;  這個的意思就是允許兩台主節點,很重要

  #after-sb-0pri discard-zero-changes;

     #after-sb-1pri discard-secondary;

     #after-sb-2pri disconnect;

        syncer {

                rate 1000M;

以上檔案在兩個節點上必須相同,是以,可以基于ssh将剛才配置的檔案全部同步至另外一個節點。

# scp /etc/drbd.conf node2:/etc/

# scp  /etc/drbd.d/*  node2:/etc/drbd.d

4、在兩個節點上初始化已定義的資源并啟動服務:

1)初始化資源,在Node1和Node2上分别執行:

# drbdadm create-md web

2)啟動服務,在Node1和Node2上同時執行:

/etc/init.d/drbd start

3)檢視啟動狀态:

# cat /proc/drbd

version: 8.3.8 (api:88/proto:86-94)

GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by [email protected], 2010-06-04 08:04:16

 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----

    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:505964

也可以使用drbd-overview指令來檢視:

# drbd-overview 

  0:web  Connected Secondary/Secondary Inconsistent/Inconsistent C r---- 

從上面的資訊中可以看出此時兩個節點均處于Secondary狀态。于是,我們接下來需要将其中一個節點設定為Primary。在要設定為Primary的節點上執行如下指令:

# drbdsetup /dev/drbd0 primary –o

而後再次檢視狀态,可以發現資料同步過程已經開始:

  0:web  SyncSource Primary/Secondary UpToDate/Inconsistent C r---- 

[============>.......] sync'ed: 66.2% (172140/505964)K delay_probe: 35

等資料同步完成以後再次檢視狀态,可以發現節點已經牌實時狀态,且節點已經有了主次:

  0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- 

我們把node2也設為主節點:

# drbdsetup /dev/drbd0 primary –o

  0:web  Connected Primary/Primary UpToDate/UpToDate C r---- 

到這裡我們的drbd就是雙主模型了!

雖然,現在的雙主模型建立好了,并且都可以網drbd裝置寫檔案,但是一旦兩個節點同時向一個檔案寫入,drbd檔案系統就會崩潰,這時候我們就用到了叢集檔案系統,下面我們介紹ocfs2叢集檔案系統

二、安裝配置ocfs2

說明:ocfs2自己可以通過ocfs2專有的叢集管理ocfs2檔案系統

1、下載下傳安裝軟體包:

我的系統是2.6.18.164的版本,故我要下載下傳相對應的軟體包,ocfs2的版本一定要和kernel的版本相對應,要不然不能使用:

ocfs2-2.6.18-164.el5-1.4.7-1.el5.i686.rpm 

ocfs2-tools-1.4.4-1.el5.i386.rpm 

ocfs2console-1.4.4-1.el5.i386.rpm

2,安裝(兩個節點都要安裝)

# rpm -ivh \

ocfs2-2.6.18-164.el5-1.4.7-1.el5.i686.rpm \

ocfs2-tools-1.4.4-1.el5.i386.rpm \

3、配置ocfs2叢集檔案系統

1)首先編輯主配置檔案(這裡在node1.magedu.com上進行)

# mkdir /etc/ocfs2

# vim  /etc/ocfs2/cluster.conf

添加如下内容:

node:

ip_port = 7777

ip_address = 172.16.30.4

number = 0

name = node1.magedu.com

cluster = ocfs2

ip_address = 172.16.30.6

number = 1

name = node2.magedu.com

cluster:

node_count = 2

name = ocfs2

而後需要将此配置檔案同步至另一節點node2.magedu.com

# scp  -r  /etc/ocfs2  node2:/etc/

說明:以上配置過程也可以簡單地通過ocfs2console來進行配置。執行ocfs2console指令會打開一個圖形視窗:

# ocfs2console

配置過程如下:

Cluster > Configure Nodes

Node configuration > Add > node1.magedu.com / ... / 7777

Node configuration > Add > node2.magedu.com / ... / 7777

...

Cluster > Propagate Configuration

2)配置并啟動ocfs2

以下指令需要在兩個節點上分别執行:

# /etc/init.d/o2cb enable

# /etc/init.d/o2cb stop

# /etc/init.d/o2cb start

#/etc/init.d/ocfs2 stop

#/etc/init.d/ocfs2 start

3)檢視ocfs2叢集的運作狀态

[[email protected] ~]# /etc/init.d/o2cb status

Driver for "configfs": Loaded

Filesystem "configfs": Mounted

Driver for "ocfs2_dlmfs": Loaded

Filesystem "ocfs2_dlmfs": Mounted

Checking O2CB cluster ocfs2: Online

Heartbeat dead threshold = 31

  Network idle timeout: 30000

  Network keepalive delay: 2000

  Network reconnect delay: 2000

Checking O2CB heartbeat: Not active

在格式化和挂載檔案系統之前,應驗證O2CB在兩個節點上均為online狀态;上述資訊最後一行顯示O2CB心跳未激活是因為檔案系統還沒有挂載,其挂載之後就會變成active狀态。

4)建立并挂載ocfs2檔案系統,實作ocfs2與drbd結合工作

在drbd的任一主節點上建立ocfs2檔案系統,其中-N選項用于指明最多允許多少個節點同時使用此檔案系統:

[[email protected] ~]# mkfs -t ocfs2 -N 2 -L ocfs2_drbd1 /dev/drbd0

在兩個節點分别執行如下指令挂載ocfs2檔案系統:

[[email protected] ~]# mount /dev/drbd0 /mnt

在兩個節點上檢視:

[[email protected] ~]# ls /mnt/

lost+found

[[email protected] ~]# ls /mnt/

當然,上面的挂載指令還可以使用如下方式進行,以擷取更好的性能:

mount -o noatime,nodiratime /dev/drbd0  /mnt

本文轉自 leejia1989 51CTO部落格,原文連結:http://blog.51cto.com/leejia/924132,如需轉載請自行聯系原作者

繼續閱讀