天天看點

DRBD安裝與運維演練1 概述

DRBD,即Distributed Replicated Block Device分布式複制塊裝置。它是被設計成建構高可用叢集(HA)的一個建構元件的塊裝置。它通過網絡實作塊裝置資料實時鏡像。DRBD可以被了解為一種基于網絡的raid-1。

從概述來看,DRBD有以下幾個特點

l DRBD是一種塊裝置

2 可用于高可用叢集中(HA)

3 通過網絡實作塊裝置資料實時鏡像

4 類似于一個網絡的raid-1

工作特點:

l DRBD工作在核心空間,它鏡像複制的是二進制資料,這也是它速度快的根本原因

2 DRBD至少需要兩個節點來工作。

如上圖所示,左右兩部分相當于兩台伺服器,黑色箭頭代表了各個核心元件之間的資料流方向。橙色箭頭代表了通過網絡實作的從本地節點到遠端節點的實時塊裝置資料流方向。

<a href="http://s3.51cto.com/wyfs02/M00/6D/0C/wKiom1VaxgOxh2yJAAGU4_N1x28956.jpg" target="_blank"></a>

DRBD的三種複制模式:

l 協定A

即 異步複制協定。當本地磁盤寫入完成,并且拷貝資料包進入本地TCP發送緩沖區裡後,就認為在主節點的本地寫操作完成。這種模式,在發生強制故障轉移的時候可能發生資料丢失的現象。協定A常用在長距離複制環境中。當它和DRBD代理結合使用的時候,它成為一個有效的災難恢複解決方案。

l 協定B

即 記憶體同步複制協定。當本地磁盤寫入發生,并且拷貝資料包到達對等層節點時,就認為在主節點中的本地寫操作完成。正常情況下,在故障轉移事件中,寫入的資料不會丢失。然而,如果節點同時停電,主節點的資料存儲将發生不可逆的損壞,大部分最近在主節點中寫入完成的資料可能會丢失。

l 協定C

即 同步複制協定。隻有當本地磁盤和遠端磁盤都确認寫入完成時,就認為在主節點的本地寫操作完成。結果,即使一個節點崩潰,也不會丢失任何資料。唯一丢失資料的可能是兩個節點同時崩潰。

到目前為止,協定C是安裝DRBD是最常使用的複制協定。在部署DRBD是可以根據安

<a href="http://s3.51cto.com/wyfs02/M01/6D/07/wKioL1Vax5KxnaCdAAIEAxFcV5g936.jpg" target="_blank"></a>

從圖中可以看出,DRBD是作為排程伺服器的存儲高可用套件來實作資料的在排程伺服器保持同步,完成相關的業務服務。

系統環境: centos-6.4 64bit

drbd: drbd-8.4.4.tar.gz

 第一步:在如下網站下載下傳源碼包(本次采用Version drbd-8.4.4)

源碼下載下傳位址:http://oss.linbit.com/drbd/

在此之前。請安裝一下一些簡單的工具  

yum install -y kernel-devel

推薦源碼安裝:

tar xvf drbd-8.4.4.tar.gz

./configure --prefix=/usr/local/drbd --with-km    生成drbd.ko檔案

make KDIR=/usr/src/kernels/2.6.32-131.0.15.el6.x86_64      核心版本根據具體情況

make install

cp drbd/drbd.ko /lib/modules/`uname -r`/kernel/lib/   

# modprobe drbd 

檢視子產品是否加載成功 

# lsmod | grep drbd

drbd                  344534  0

libcrc32c               1180  1 drbd cp

設定開機啟動

cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d/

chkconfig --add drbd

chkconfig drbd on

mkdir -p /usr/local/drbd/var/run/drbd      添加必要運作目錄

       到此drbd安裝完成。

    主備兩台都如上安裝。

基本的主備配置主伺服器:

檢視drbd的主配置檔案 

# pwd 

/usr/local/drbd/etc 

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

由此可見:主配置檔案裡面已經包含了全局配置檔案和drbd目錄下以.res結尾的檔案 

修改全局配置檔案: 

/usr/local/drbd/etc/drbd.d 

# ls 

global_common.conf 

配置檔案内容如下修改(紅色新增): 

# cat global_common.conf 

global { 

usage-count yes; #是否參加drbd的使用者統計,預設此選項為yes 

# minor-count dialog-refresh disable-ip-verification 

common { 

protocol C; #使用drbd的同步協定

handlers { 

# These are EXAMPLE handlers only. 

# They may have severe implications, 

# like hard resetting the node under certain circumstances. 

# Be careful when chosing your poison. 

pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b &gt; /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 &gt; /proc/sysrq-trigger ; reboot -f"; 

local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o &gt; /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 degr-wfc-timeout outdated-wfc-timeout wait-after-sb 

options { 

# cpu-mask on-no-data-accessible 

disk { 

on-io-error detach; #配置I/O錯誤處理政策為分離

# size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes 

# disk-drain md-flushes resync-rate resync-after al-extents 

# c-plan-ahead c-delay-target c-fill-target c-max-rate 

# c-min-rate disk-timeout 

net { 

# protocol timeout max-epoch-size max-buffers unplug-watermark 

# connect-int ping-int sndbuf-size rcvbuf-size ko-count 

# allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri 

# after-sb-1pri after-sb-2pri always-asbp rr-conflict 

# ping-timeout data-integrity-alg tcp-cork on-congestion 

# congestion-fill congestion-extents csums-alg verify-alg 

# use-rle 

syncer { 

rate 1024M; #設定主備節點同步時的網絡速率 

資源配置檔案配置如下需自己建立,這是關鍵

# vim /usr/local/drbd/etc/drbd.d/drbd.res 

resource r1 { #這個r1是定義資源的名字 

on rh10 { #on開頭,後面是主機名稱 

device /dev/drbd0; #drbd裝置名稱 

disk /dev/xvdb1; #drbd0使用的磁盤分區為xvdb1

address 10.243.29.64:7789; #設定drbd監聽位址與端口 

meta-disk internal; 

on rh11 { #on開頭,後面是主機名稱 

disk /dev/xvdb1; #drbd0使用的磁盤分區為xvdb1 

address 10.243.29.65:7789; #設定drbd監聽位址與端口 

}

備伺服器配置:(同上)

主備啟動服務:

在啟動DRBD之前,你需要分别在兩台主機上建立供DRBD記錄資訊的資料塊.分别在兩台主機上執行:

# drbdadm create-md r0 或者執行drbdadm create-md all

# drbdadm create-md r0

如果遇到no resourcedefind可以指定配置檔案位置

drbdadm -c /usr/local/drbd/etc/drbd.conf create-md  r0

如果提示:Command 'drbdmeta 0 v08 /dev/sdc7 internal create-md' terminated with exit coolcode 40

運作如下指令清除中繼資料,重新執行

# dd if=/dev/zero bs=1M count=1 of=/dev/xvdb1

如果已經配置過了重新配置可以将原資源down

Drbdadm down r0

如果遇到腦裂問題如:

0:mfs_store/0 WFConnection Primary/UnknownUpToDate/DUnknown C r-----

從節點上執行:

# drbdadm disconnect r0

# drbdadm secondary r0

# drbdadm --discard-my-data connect r0

# cat /proc/drbd

主節點上執行:

# drbdadm connect r0

在兩個節點啟動服務

#/etc/init.d/drbd start

最好同時啟動

# netstat -anput|grep 7789

tcp  0     0 10.243.29.64:7789      10.243.29.65:51989          ESTABLISHED             

tcp  0   0 10.243.29.64:53835       10.243.29.65:7789           ESTABLISHED 

在任意節點檢視節點狀态:

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

 1: 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:2007644

對輸出的含義解釋如下:

ro表示角色資訊,第一次啟動drbd時,兩個drbd節點預設都處于Secondary狀态,

ds是磁盤狀态資訊,“Inconsistent/Inconsisten”,即為“不一緻/不一緻”狀态,表示兩個節點的磁盤資料處于不一緻狀态。

Ns表示網絡發送的資料包資訊。

Dw是磁盤寫資訊

Dr是磁盤讀資訊

設定主節點

由于預設沒有主次節點之分,因而需要設定兩個主機的主次節點,選擇需要設定為主節點的主機,然後執行如下指令:

#drbdsetup /dev/drbd1 primary –o

或者執行下面指令也是可以的

#drbdadm -- --overwrite-data-of-peer primary all

然後可以設定主備了

    #/sbin/drbdadm primary r0(主節點)

#/sbin/drbdadm secondary r0(備節點)

檢視主備節點

# drbd-overview

  0:??not-found??  Connected Secondary/Primary UpToDate/UpToDate C r-----

檢視同步狀态:

version: 8.4.4 (api:1/proto:86-101)

GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@rh11, 2015-05-12 00:12:42

 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---n-

    ns:1644176 nr:0 dw:0 dr:1646232 al:0 bm:100 lo:1 pe:10 ua:7 ap:0 ep:1 wo:f oos:19322388

       [&gt;...................] sync'ed:  7.9% (18868/20472)M

       finish: 0:08:07 speed: 39,640 (36,480) K/sec

從輸出可知:

       “ro狀态現在變為“Primary/Secondary”,“ds”狀态也變為“UpToDate/Inconsistent”,也就是“實時/不一緻”狀态,現在資料正在主備兩個主機的磁盤間進行同步,且同步進度為7.9%,同步速度每秒3968M左右。

等待片刻,再次檢視同步狀态,輸出如下:

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

GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@rh10, 2015-05-11 09:47:31

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

ns:0 nr:20964116 dw:20964116 dr:0 al:0 bm:1280 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

可以看到同步完成了,并且“ds“狀态也變為“UpToDate/UpToDate”了。即為“實時/實時”狀态了。

驗證測試:主伺服器增加檔案

格式化檔案系統

#mkfs.ext4 /dev/drbd0

#mount /dev/drbd0 /drbd

如果在從節點,會報錯

[root@rh10 ~]# mkfs.ext4 /dev/drbd0

mke2fs 1.41.12 (17-May-2010)

mkfs.ext4: 錯誤的媒體類型 while trying to determine filesystem size

[root@rh11 drbd]# ls    增加測試檔案,切換後在備伺服器是否正确

data.txt  lost+found  si-tech

主備切換

主備節點切換有兩種方式,分别是停止drbd服務切換和正常切換

正常切換方式:

#drbdadm secondary all(主節點)

#drbdadm primary all(備節點)

最後在備用節點挂載磁盤分區即可:

[root@drbd2 ~]#mount /dev/drbd0  /mnt

[root@rh10 drbd]# ls

服務切換方式:

關閉主節點服務,此時挂載的drbd分區就自動在主節點解除安裝了,然後在備用節點執行切換指令:

#drbdsetup /dev/drbd0 primary --o

#drbdadm primary all

軟體解除安裝

直接make uninstall,然後

make clean

本文轉自zsaisai 51CTO部落格,原文連結:http://blog.51cto.com/3402313/1652739