歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> linux下使用磁盤鏡像軟件DRBD

linux下使用磁盤鏡像軟件DRBD

日期:2017/3/3 16:22:47   编辑:關於Linux

一、 什麼是DRBD

DRBD的全稱為:Distributed Replicated Block Device (DRBD)分布式塊設備復制,DRBD是由內核模塊和相關腳本而構成,用以構建高可用性的集群。其實現方式是通過網絡來鏡像整個設備。它允許用戶在遠程機器上建立一個本地塊設備的實時鏡像。與心跳連接結合使用,也可以把它看作是一種網絡RAID。

二、DRBD是如何工作的

Drbd 負責接收數據,把數據寫到本地磁盤,然後發送給另一個主機。另一個主機再將數據存到自己的磁盤中。目前,drbd 每次只允許對一個節點進行讀寫訪問,這對於通常的故障切換高可用性集群來講已經足夠用了。以後的版本將支持兩個節點進行讀寫存取。

三、 drbd與現在的HA集群的關系

一個drbd系統由兩個以上節點構成,與HA集群類似,也有主用節點和備用節點之分,在帶有主要設備的節點上,應用程序和操作系統可以運行和訪問drbd設備(/dev/nbX)。

在主節點寫入的數據通過drbd設備存儲到主節點的磁盤設備中,同時,這個數據也會自動發送到備用節點相應的drbd設備,最終寫入備用節點的磁盤設備中,在備用節點上,drbd只是將數據從drbd設備寫入到備用節點的磁盤設備中。

大部分現行高可用性集群都會使用共享存儲,而Drbd也可以作為一個共享存儲設備,使用drbd不需要任何硬件的投資。因為它在IP網絡中運行,所以,利用drbd作為共享存儲設備,要節約很多成本,因為在價格上IP網絡要比專用的存儲網絡經濟的多。

四、 DRBD實現原理圖

DRBD是linux的內核的存儲層中的一個分布式存儲系統,可用使用DRBD在兩台linux服務器之間共享塊設備,共享文件系統和數據。類似於一個網絡RAID1的功能,如圖1所示:

圖1

五、DRDB的安裝

從官方網站下載源碼包來編譯或直接使用yum源來安裝,這裡以CentOS為例說明安裝過程,其它系統類似。

[root@drbd1 ~]# uname -a

Linux drbd1 2.6.18-194.11.1.el5 #1 SMP Tue Aug 10 19:09:06 EDT 2010 i686 i686 i386 GNU/Linux

通過yum安裝DRBD服務:

[root@drbd1 ~]# yum -y install kmod-drbd83 drbd83

檢查DRBD是否安裝成功:

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

drbd 228528 3

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

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

安裝成功之後/sbin目錄下面有drbdadm,drbdmeta,drbdsetup命令,以及/etc/init.d/drbd啟動腳本。

六、配置DRDB

DRBD運行需要讀取/etc/drbd.conf配置文件,下面是兩台主機節點配置的drbd.conf文件的簡單示例:

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

#

# drbd.conf

#

# create by [email protected] at 2010-08-12

global {

# minor-count 64;

# dialog-refresh 5; # 5 seconds

# disable-ip-verification;

usage-count no;

#是否參加DRBD使用者統計,默認yes

}

common {

syncer { rate 200M; }

#設置主備節點同步時的網絡速率最大值,單位是字節。

}

resource r0 {

#資源名字為r0.

protocol C;

# 使用drbd的第三種同步協議,表示收到遠程主機的寫入確認後,則認為寫入完成.

handlers {

pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";

pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";

local-io-error "echo o > /proc/sysrq-trigger ; halt -f";

fence-peer "/usr/lib64/heartbeat/drbd-peer-outdater -t 5";

pri-lost "echo pri-lost. Have a look at the log files. | mail -s 'DRBD Alert' root";

split-brain "/usr/lib/drbd/notify-split-brain.sh root";

out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";

}

net {

# timeout 60;

# connect-int 10;

# ping-int 10;

# max-buffers 2048;

# max-epoch-size 2048;

cram-hmac-alg "sha1";

shared-secret "MySQL-HA";

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

}

disk {

on-io-error detach;

fencing resource-only;

#使用dpod功能(drbd outdate-peer daemon)保證在數據不同步時不進行切換。

}

startup {

wfc-timeout 120;

degr-wfc-timeout 120;

}

device /dev/drbd0;

on dbm157 {

#每個主機的說明以on開頭,後面是hostname(uname -n),在後面的{}中為這個主機的配置。

disk /dev/sda2;

#/dev/drbd0使用的磁盤分區是/dev/sda2。

address 192.168.0.157:7788;

#設置DRBD的監聽端口,用於與另一台主機通信。

meta-disk internal;

}

on dbm158 {

disk /dev/sda2;

#/dev/drbd0使用的磁盤分區是/dev/sda2。

address 192.168.0.158:7788;

#設置DRBD的監聽端口,用於與另一台主機通信。

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

}

}

將上面這個drbd.conf文件分別復制到兩台主機的/etc目錄下。drbd.conf的配置參數很多,有興趣的話可以使用命令:man drbd.conf來查看了解更多的參數說明。

七、啟動DRBD

1 在兩個節點執行

在啟動DRBD之前,你需要分別在兩台主機的hdb1分區上,創建供DRBD記錄信息的數據塊.分別在兩台主機上執行:

[root@drbd1 ~]# drbdadm create-md r0 或者執行drbdadm create-md all

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

2在兩個節點啟動服務

[root@drbd1 ~]#/etc/init.d/drbd start

[root@drbd2 ~]#/etc/init.d/drbd start

最好同時啟動

3在任意節點查看節點狀態

[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是磁盤讀信息

4設置主節點

由於默認沒有主次節點之分,因而需要設置兩個主機的主次節點,選擇需要設置為主節點的主機,然後執行如下命令:

[root@drbd1 ~]#drbdsetup /dev/drbd0 primary –o

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

[root@drbd1 ~]#drbdadm -- --overwrite-data-of-peer primary all

第一次執行完此命令後,在後面如果需要設置哪個是主節點時,就可以使用另外一個命令:

[root@drbd1 ~]#/sbin/drbdadm primary r0或者/sbin/drbdadm primary all

執行此命令後,開始同步兩台機器對應磁盤的數據

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

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

ns:576224 nr:0 dw:0 dr:581760 al:0 bm:34 lo:84 pe:369 ua:256 ap:0 ep:1 wo:b oos:1443196

[====>...............] sync'ed: 28.4% (1443196/2007644)K delay_probe: 69

finish: 0:03:56 speed: 6,024 (5,876) K/sec

從輸出可知:

“ro狀態現在變為“Primary/Secondary”,“ds”狀態也變為“UpToDate/Inconsistent”,也就是“實時/不一致”狀態,現在數據正在主備兩個主機的磁盤間進行同步,且同步進度為28.4%,同步速度每秒5.8M左右。

等待片刻,再次查看同步狀態,輸出如下:

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

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

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

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

如果第一次設置主備節點時使用“/sbin/drbdadm primary r0”命令,那麼會提示如下錯誤:

0: State change failed: (-2) Need access to UpToDate data

Command '/sbin/drbdsetup 0 primary' terminated with exit code 17

只要第一次用上面命令成功後,以後就可以用“/sbin/drbdadm primary r0”命令了。

5格式化文件系統

由於mount操作只能在主節點進行,所以只有設置了主節點後才能格式化磁盤分區,然後掛載:

[root@drbd1 ~]#mkfs.ext3 /dev/drbd0

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

八、 DRBD主備節點切換

主備節點切換有兩種方式,分別是停止drbd服務切換和正常切換,依次介紹:

1停止drbd服務切換

關閉主節點服務,此時掛載的drbd分區就自動在主節點卸載了,然後在備用節點執行切換命令:

[root@drbd2 ~]#drbdadm primary all

此時會報錯:

2: State change failed: (-7) Refusing to be Primary while peer is not outdated

Command 'drbdsetup 2 primary' terminated with exit code 11

因此,必須在備用節點執行如下命令:

[root@drbd2 ~]#drbdsetup /dev/drbd0 primary –o

或者

[root@drbd2~]#drbdadm -- --overwrite-data-of-peer primary all

此時就可以正常切換了。

當在備用節點執行切換到主節點命令後,原來的主用節點自動變為備用節點。無需在主用節點再次執行切換到備用節點的命令。

2正常切換

在主節點卸載磁盤分區,然後執行

[root@drbd1 ~]#drbdadm secondary all

如果不執行這個命令,直接在備用節點執行切換到主節點的命令,會報錯:

2: State change failed: (-1) Multiple primaries not allowed by config

Command 'drbdsetup 2 primary' terminated with exit code 11

接著,在備用節點執行

[root@drbd2 ~]#drbdadm primary all

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

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

Copyright © Linux教程網 All Rights Reserved