DRBD磁盤鏡像技術

jopen 10年前發布 | 13K 次閱讀 DRBD

Distributed Replicated Block Device(DRBD)是一個用軟件實現的、無共享的、服務器之間鏡像塊設備內容的存儲復制解決方案。 數據鏡像:實時、透明、同步(所有服務器都成功后返回)、異步(本地服務器成功后返回)。

第一章:DRBD概念原理以及安裝

 

    1.DRBD是由內核模塊和相關腳本而構成,用以構建高可用的集群.其實現方式是通過網絡來鏡像整個設備(磁盤).它允許用戶在遠程機器上建立一個本地塊設備實時鏡像,與心跳鏈接結合使用,也可看做一種網絡RAID(比基于文件系統的同步高效)

 

    2.DRBD(實現塊設備的同步)負責接收數據,把數據寫到本地磁盤,然后發送到另一個主機.另一個主機將數據存到自己磁盤中.DRBD目前每次只允許一個節點進行寫訪問,(必須是primary狀態才能對磁盤進行寫操作),必須將另外一個磁盤設置secondry(兩個節點狀態:primary和secondry)

    3.DRBD一般會用在HA集群中,那么drbd和HA集群的關系;

    

    一個DRBD系統由兩個以上的節點組成,有主備節點之分,drbd設備(將本地磁盤設備虛擬成drbd設備)。在主節點寫入的數據通過drbd設備存貯到主節點的磁盤設備,同時,這個數據也會自動發送到備用節點的相應drbd設備,最后寫入備用節點的磁盤設備。在備用節點上,drbd只是將數據從drbd設備寫入到備用節點的磁盤設備中。

使用DRBD作為HA集群的一個共享存儲設備,不需要任何硬件的投資,并且使用的是IP網絡運行(iscsi網絡存儲)

4.DRBD內部實現原理圖:

DRBD磁盤鏡像技術

那么格式化是格式化drbd設備

用戶將數據寫到drbd,通過tcp/ip網絡傳輸到遠程主機的drbd(傳輸的是drbd塊設備)

 

5.DRBD協議:

A 數據一旦寫入磁盤并發送到網絡就認為完成寫操作

B 只要接受到確認,就會認為完成寫操作

C 收到寫入(磁盤)確認,再同步(此協議能夠保證數據完全寫入)

DRBD設備進程三個:drbd_work主進程  drbd0_asender是primary上drbd0的數據發送過程  drbd0_receiver是secondary上drbd0的數據接收進程

 

6.DRBD的工作原理(drbd 同步底層塊設備)

DRBD磁盤鏡像技術

 

7.DRBD實現原理圖:

DRBD磁盤鏡像技術

 

9.DRBD的安裝

http://www.drbd.org 官網下載(若要源碼編譯,可以解壓后查看.spec文件直接用rpmbuild –bb *.spec  構建rpm包)    需要kernel-devel的支持哦

 

#./configure --enable-spec  --with-km    帶有spec的編譯和內核支持,會生成spec文件

 

1>準備工作

對兩臺drbd同步主機進行解析以及hostname設置

在/etc/hosts添加兩臺主機的解析

192.168.2.88 drbd2

192.168.2.99 drbd1

分別在兩臺主機上添加虛擬磁盤設備(最好一樣大,不然多余就浪費,創建成lvm)

#fdisk -l

#fdisk -cu /dev/vdb 

#pvcreate /dev/vdb1 

#vgcreate drbdvg /dev/vdb1 

#lvcreate -L 1G -n drbdlv drbdvg

 

2>drbd下載安裝

#tar zxf drbd-8.4.3.tar.gz   //解壓后,發現目錄有.spec.in文件,即可以打包成rpm包格式

#yum install rpm-build -y

#./configure --enable-spec --with-km     //在軟件的以及目錄編譯(啟用spec和增加kernel模塊)

注意:缺少的包相應解決啊

#rpmbuild -bb drbd.spec 構建drbd包

#rpmbuild -bb drbd-km.spec 構建drbd的kernel模塊(yum install kernel-devel)

#cd  /root/rpmbuild/RPMS/x86_64/      生成的rpm包位置

#yum localinstall *.rpm -y    本地drbd安裝成功

#scp * 192.168.2.88:  直接將rpm包拷貝到備份主機上

!!(如果系統信息不一致,最好使用源碼編譯,會生成和系統內核匹配的drbd模塊drbd-km會根據自己系統的相關信息編譯出適合內核的模塊)!!

 

安裝成功后,/sbin目錄下有drbdadm drbdmeta drbdsetup 命令以及drbd啟動腳本

 

10.注意事項

1.mount drbd設備前,必須把設備設置為primary狀態

2.兩個節點不能同時為primary

3.處于secondary狀態的服務器上不能進行寫操作

4.主備服務器同步的兩個分區大小最好相同,這樣不至于浪費磁盤空間,drbd磁盤鏡像相當于raid1

注意:drbd設備主機上的配置必須完全一致

 

 

第二章:DRBD配置以及使用:

 

1./etc/drbd.conf   主配置文件

真正的實際配置文件在/etc/drbd.d/ 兩個文件gloab_comman.conf  

另外drbd的詳細配置文件需要在*.res文件編輯,這個文件默認不存在

vim /etc/drbd.d/drbd.res        文件的配置必須注意(可能出現share沒定義)

resource share {            定義資源的名稱為share之后會用到

meta-disk internal; 源數據的存放方式

device /dev/drbd1;   共享出來的drbd塊標識

syncer {

verify-alg sha1;               使用的驗證方式和密碼方式

rate 200M;

}

net { allow-two-primaries; } 可以兩臺主機同時掛載(不能使用寫哦)

on drbd1{   定義drbd設備

disk /dev/drbdvg/drbdlv; 說明drbd設備/dev/drbd1使用的磁盤分區是/dev/sdb1

address 192.168.0.99:7789; 設置drbd的監聽端口,用來和端口通信

}

on drbd2{

disk /dev/drbdvg/drbdlv;

address 192.168.0.88:7789;

}

}

需要將主備drbd進行解析哦

 

2.啟動DRBD

 

 1>在兩個節點執行啟動

啟動只前在兩臺主機分區上創建供drbd記錄信息的源數據庫

#drbdadm create-md share(資源名字) 或者drbdadm create-md all

 

 2>在兩個節點啟動服務

#/etc/init.d/drbd start 

 

 3>在任意節點查看狀態信息

#cat /proc/drbd 

提示:cs 表示連接狀態 ro:節點角色 ds:磁盤狀態信息 ns:網絡信息

提示:Dw:磁盤寫信息  Dr:磁盤讀信息

 

第一次啟動drbd都為secondary狀態,需要手工設置為primary

 

 4>設置主節點

#drbdsetup /dev/drbd1 primary  --force  第一次設置主節點(否則不能格式化)

或者#drbdadm –overwrite-data-of-peer primary all

#drbdadm primary share(all)    再次設置主機角色

#cat /proc/drbd  查看同步信息

 

5>格式化文件系統

#mkfs.ext4 /dev/drbd1    對primary狀態節點進行格式化(格式化共享drbd1)

#mount /dev/drbd1 /mnt    格式化的是drbd塊設備

#df  -H 查看掛載信息

 

3.DRBD主備節點的切換

1>停止drbd服務切換

關閉主節點服務,此時掛載的drbd分區自動在主節點卸載了

在備用節點設置主節點 #drbdadm primary share(all)

2>正常切換

先執行umount卸載分區

設置備節點#drbdadm secondary share(all)

將備用節點設置主節點: #drbdadm primary share(all)

備用節點執行monut操作(mount /dev/drbd1 /mnt)

 

注意:使用系統的版本不一致的時候,不能將生成的drbd*.rpm拷貝到另外一個節點上,因為不同版本的kernel版本不一致,如果使用一樣的rpm安裝可能出現不能識別到drbd module

因此,可以將drbd.-8.4tar.gz源碼編譯,在不同的系統中生成自己的源碼包,這個會根據kernel來自定義rpm包。

 

作者在試驗環境中主節點使用rhel6.3,用源碼包編譯drbd的rpm包.安裝

備用節點rhel6.4使用源碼包安裝的時候提示module drbd not found .因為drbd-km包和系統不一致。重新用源碼包編譯適合自己kernel的drbd的rpm包。

 

附錄:

DRBD性能優化:

1.網絡環境:DRBD是基于塊設備的同步,對網絡的要求比較大,因此一般會將同步網絡和提供服務的網絡分開

2.用做DRBD分區磁盤的性能:磁盤性能必須好,例如可以考慮使用多塊15kb的SAS盤作為RAID0或RAID10 以提供I/O性能

3.設置syncer參數設置,即rate  200M

 

總結:drbd設備目前只能用在兩個硬件IO設備上(也就使真實提供硬件塊存儲的主機上才能使用共享),并不是任意一個client安裝好drbd軟件就可以使用共享設備了。這應該是一個瓶頸。貌似可以給其他用吧??

    其 次,在格式化drbd設備時候,選擇的是ext4格式,因此,永遠只能在primary狀態進行掛載并且讀寫數據,secondary狀態不能進行任何操 作,只是數據存儲在遠端,兩塊真實的塊設備上。其中還有一個問題就是,應該存儲方式類似raid1,如果一塊盤壞了,數據會自動放在另外一塊盤上。(運維 人員只需用將新的磁盤安裝上來創建.res文件上相應的設備就ok了)

 

    在ext4下也可以設置雙主模式,但是這樣會存在一個問題:兩邊可以同時查看,但是任意一方修改數據,對方不能接受。其實這個時候已經產生腦列問題了,當再次修改主備會發現彼此都認為對方是primary.當你重新恢復drbd服務,會發現自動保存第一個主機的內容。

來自:http://my.oschina.net/xxbAndy/blog/308399

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!