DRBD簡介 安裝、編譯報錯解決 DRBD的配置、初始化及同步、主備模型

主機環境 redhat6.5 64位html

實驗環境 服務端1 ip 172.25.25.111 主機名:server1.example.com   drbdlinux

    服務端2 ip172.25.25.112   主機名:server2.example.com    drbd算法


安裝包 drbd-8.4.3.tar.gzvim

防火牆狀態:關閉api

 

1.Drbd的簡介bash

1.基本信息服務器

Distributed Replicated Block Device(DRBD)是一個用軟件實現的、無共享的、服務器之間鏡像塊設備內容的存儲複製解決方案。網絡

DRBD的位置處於文件系統如下,比文件系統更加靠近操做系統內核及IO棧。數據結構

2.工具分佈式

drbdadm:高級管理工具,管理/etc/drbd.conf,向drbdsetup和drbdmeta發送指令,

drbdsetup:配置裝載進kernel的DRBD模塊,平時不多直接用

drbdmeta:管理META數據結構,平時不多直接用。

在DRBD中,資源是特指某複製的存儲設備的全部方面。包括資源名稱、DRBD設備(/dev/drbdm,這裏m是設備最小號,最大號可到147)、磁盤配置(使本地數據能夠爲DRBD所用)、網絡配置(與對方通訊)

每一個資源有個角色,是Primary或Secondary,下面簡稱"主"和"備"

主角色的DRBD設備能夠不受限制的讀和寫,好比建立和映射文件系統、對於塊設備的raw或直接IO訪問。

備角色的DRBD設備接受來自對方的全部修改,可是不能被應用程序讀寫,甚至只讀也不行。

角色能夠改變。

3.DRBD工做原理圖

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

wKioL1f7SsTCQRDJAAJ_a1Uj9g0734.png

 

2. 編譯、安裝drbd內核模塊計及測試

1.編譯、安裝drbd內核模塊,報錯解決及debd的配置(服務端1)

[root@server1 mnt]# ls

drbd-8.4.3.tar.gz   

[root@server1 mnt]# tar zxf drbd-8.4.3.tar.gz       #解壓

[root@server1 mnt]# ls

drbd-8.4.3           drbd-8.4.3.tar.gz

[root@server1 mnt]# cd drbd-8.4.3

[root@server1 drbd-8.4.3]# ./configure --enable-spec --with-km     

若報錯以下:

wKiom1f7SsWSEUqpAAATAwNZs5E177.png

則安裝:

[root@server1 drbd-8.4.3]# yum install flex -y

 

[root@server1 drbd-8.4.3]# ./configure --enable-spec --with-km

WARNING系統能夠跳過,以下:

wKioL1f7SsXBKOesAAAr5X37v6c525.png

[root@server1 drbd-8.4.3]# yum install rpm-build -y

 

[root@server1 drbd-8.4.3]# ./configure --enable-spec --with-km

[root@server1 drbd-8.4.3]# rpmbuild -bb drbd.spec       #

error: File /root/rpmbuild/SOURCES/drbd-8.4.3.tar.gz: No suchfile or directory

[root@server1 drbd-8.4.3]# cp /mnt/drbd-8.4.3.tar.gz/root/rpmbuild/SOURCES/

[root@server1 drbd-8.4.3]# rpmbuild -bb drbd.spec

 

wKiom1f7SsbBGPlMAABf_AxowqQ953.png

[root@server1 drbd-8.4.3]# rpmbuild -bb drbd-km.spec

error: Failed build dependencies:

    kernel-devel is neededby drbd-km-8.4.3-2.el6.x86_64       #報錯,缺乏包[root@server1drbd-8.4.3]# yum install kernel-devel -y

[root@server1 drbd-8.4.3]# rpmbuild -bb drbd-km.spec

wKioL1f7SsbRvFWoAACe935GTXE135.png

[root@server1 drbd-8.4.3]# cd /root/rpmbuild/RPMS/x86_64/      #切換目錄

[root@server1 x86_64]# ls       #生成10個安裝包

drbd-8.4.3-2.el6.x86_64.rpm

drbd-bash-completion-8.4.3-2.el6.x86_64.rpm

drbd-debuginfo-8.4.3-2.el6.x86_64.rpm

drbd-heartbeat-8.4.3-2.el6.x86_64.rpm

drbd-km-2.6.32_431.el6.x86_64-8.4.3-2.el6.x86_64.rpm

drbd-km-debuginfo-8.4.3-2.el6.x86_64.rpm

drbd-pacemaker-8.4.3-2.el6.x86_64.rpm

drbd-udev-8.4.3-2.el6.x86_64.rpm

drbd-utils-8.4.3-2.el6.x86_64.rpm

drbd-xen-8.4.3-2.el6.x86_64.rpm

[root@server1 x86_64]# yum install * -y    #安裝全部的包

[root@server1 x86_64]# scp * root@172.25.25.112:/mnt       #將包傳給服務端2

[root@server2 mnt]# ls

drbd-8.4.3-2.el6.x86_64.rpm

drbd-bash-completion-8.4.3-2.el6.x86_64.rpm

drbd-debuginfo-8.4.3-2.el6.x86_64.rpm

drbd-heartbeat-8.4.3-2.el6.x86_64.rpm

drbd-km-2.6.32_431.el6.x86_64-8.4.3-2.el6.x86_64.rpm

drbd-km-debuginfo-8.4.3-2.el6.x86_64.rpm

drbd-pacemaker-8.4.3-2.el6.x86_64.rpm

drbd-udev-8.4.3-2.el6.x86_64.rpm

drbd-utils-8.4.3-2.el6.x86_64.rpm

drbd-xen-8.4.3-2.el6.x86_64.rpm

[root@server2 mnt]# rpm -vih *          #安裝

Preparing...               ########################################### [100%]

   1:drbd-utils            ########################################### [ 10%]

  2:drbd-bash-completion  ########################################### [ 20%]

   3:drbd-heartbeat        ########################################### [ 30%]

   4:drbd-pacemaker        ########################################### [ 40%]

   5:drbd-udev             ########################################### [ 50%]

   6:drbd-xen              ########################################### [ 60%]

   7:drbd                   ###########################################[ 70%]

  8:drbd-km-2.6.32_431.el6.########################################### [80%]

  9:drbd-km-debuginfo     ########################################### [ 90%]

  10:drbd-debuginfo         ###########################################[100%]

 

在服務端1和服務端2虛擬機中各添加一塊虛擬磁盤或劃分一個新的分區,而後進行下面的步驟:

 

[root@server1 x86_64]# cd /etc/drbd.d/     #切換到drbd的主配置文件目錄

[root@server1 drbd.d]# vim dbdata.res     #建立一個文件,後綴必須是.res

  1 resource dbdata{

  2 meta-disk internal;

  3 device /dev/drbd1;

  4 syncer {

  5 verify-alg sha1;        #設置主備機之間通訊使用的信息算法

  6 }

#每一個主機的說明以"on"開頭,後面是主機名.在後面的{}中爲這個主機的配置

  7 on server1.example.com{     #主機名

  8 disk /dev/vdb;             #磁盤名稱

  9 address172.25.29.1:7789;      #ip加端口,端口是指定的

 10 }

 11 onserver2.example.com{

 12 disk /dev/vdb;

 13 address172.25.29.2:7789;

 14 }

 15 }

 

[root@server1 drbd.d]# scp dbdata.resroot@172.25.29.2:/etc/drbd.d/

root@172.25.29.2's password:

#服務端1和服務端2同時初始化 ,同時開啓drbd

[root@server1 drbd.d]# drbdadm create-md dbdata    #初始化

  --==  Thank you for participating in the globalusage survey  ==--

The server's response is:

 

Writing meta data...

initializing activity log

NOT initializing bitmap

New drbd meta data block successfully created.

 

[root@server2 drbd.d]# drbdadm create-md dbdata

  --==  Thank you for participating in the globalusage survey  ==--

The server's response is:

 

Writing meta data...

initializing activity log

NOT initializing bitmap

New drbd meta data block successfully created.

 

2.drbd的開啓初始化、強制主備同步及格式化(主備模型)

[root@server1 drbd.d]# /etc/init.d/drbd start       #開啓drbd

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

 

[root@server1 drbd.d]# cat /proc/drbd   #查看

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

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

 1: cs:Connectedro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----

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

 

[root@server2 drbd.d]# cat /proc/drbd

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

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

 1: cs:Connectedro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----

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

#從上面能夠看出兩個都是secondary

 

[root@server1 drbd.d]# drbdadm primary dbdata --force   #強制使服務端1變成primary

[root@server1 drbd.d]# cat /proc/drbd      #查看,服務端1和服務端2正在同步

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

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

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

    ns:496640 nr:0 dw:0dr:497304 al:0 bm:30 lo:0 pe:4 ua:0 ap:0 ep:1 wo:f oos:1604508

    [===>................]sync'ed: 23.7% (1604508/2097052)K

    finish: 0:00:16 speed:98,508 (98,508) K/sec

 

[root@server1 drbd.d]# cat /proc/drbd

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

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

 1: cs:SyncSourcero:Primary/Secondary ds:UpToDate/Inconsistent C r---n-

    ns:1566436 nr:0 dw:0dr:1569432 al:0 bm:94 lo:0 pe:16 ua:3 ap:0 ep:1 wo:f oos:546716

    [=============>......]sync'ed: 74.1% (546716/2097052)K

    finish: 0:00:08 speed:64,596 (64,596) K/sec

 

[root@server1 drbd.d]# cat /proc/drbd   #同步完成,服務端1爲primary

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

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

 1: cs:Connectedro:Primary/Secondary ds:UpToDate/UpToDate C r-----

    ns:2097052 nr:0 dw:0dr:2097716 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

 

[root@server2 drbd.d]# cat /proc/drbd

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

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

 1: cs:Connectedro:Secondary/Primary ds:UpToDate/UpToDate C r-----

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

[root@server1 drbd.d]# mkfs.ext4 /dev/drbd1     #格式化

 

3.切換主備測試是否同步成功

[root@server1 drbd.d]# mount /dev/drbd1 /mnt/           #將格式化好的磁盤掛載到/mnt上

[root@server1 drbd.d]# cd /mnt/     #切換到/mnt

[root@server1 mnt]# ls

lost+found

[root@server1 mnt]# touch file{1..4}      #建立幾個文件

[root@server1 mnt]# ls

file1  file2  file3 file4  lost+found

[root@server1 mnt]# cd

[root@server1 ~]# umount /mnt/          #卸載

[root@server1 ~]# drbdadm secondary dbdata    #將服務端1變成secondary

[root@server1 ~]# cat /proc/drbd           #查看

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

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

 1: cs:Connectedro:Secondary/Secondary ds:UpToDate/UpToDate C r-----

    ns:2163404 nr:0dw:66352 dr:2098429 al:13 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[root@server2 drbd.d]# drbdadm primary dbdata   #將服務端2變成primary

[root@server2 drbd.d]# cat /proc/drbd  #查看

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

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

 1: cs:Connectedro:Primary/Secondary ds:UpToDate/UpToDate C r-----

    ns:0 nr:2163404dw:2163404 dr:664 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

 

[root@server2 drbd.d]# mount /dev/drbd1 /mnt/    #掛載

[root@server2 drbd.d]# cd /mnt/

[root@server2 mnt]# ls              #查看,同步成功

file1  file2  file3 file4  lost+found

相關文章
相關標籤/搜索