drbd(一):简介和安装
1.drbd簡介
drbd是通過網(wǎng)絡(tcp連接)在不同服務器之間實現(xiàn)基于block級別進行數(shù)據(jù)實時同步的軟件。類似于inotify+rsync,只不過inotify+rsync是按文件級別來同步的,而drbd是工作在文件系統(tǒng)下層的,實現(xiàn)的是block同步和拷貝,效率相對較高。且inotify+rsync是通過監(jiān)控事件來實現(xiàn)實時同步的,而drbd則跟普通寫入磁盤的過程一樣,只不過多了一條寫入網(wǎng)卡的分支路線。
如下圖,此處只是簡單的示意圖。更具體的原理圖見下文。
drbd只能在分區(qū)上、LVM邏輯卷上或整塊磁盤上實現(xiàn),不能在某一個目錄上實現(xiàn)。
drbd支持同步、半同步、異步三種數(shù)據(jù)同步的方式。
drbd支持腦裂(brain split)通知和自動恢復。
2.drbd工作原理和術語說明
drbd的核心功能是通過Linux內(nèi)核模塊實現(xiàn)的。特別地,操作系統(tǒng)中的虛擬塊設備(virtual block device)中有它的驅(qū)動,因此drbd幾乎處于操作系統(tǒng)I/O堆棧的"最底部"。這使得它非常具有彈性,可以很容易地為服務提供高可用性。
但注意,drbd處于文件系統(tǒng)之下的層次,不能實現(xiàn)文件系統(tǒng)層次的功能,例如檢查文件是否損壞、為文件系統(tǒng)提供高可用等。但它是基于block的,可以做塊設備檢查、同步的完整性檢查等。
2.1 drbd工作原理
drbd實現(xiàn)基于塊級別的數(shù)據(jù)同步,其實現(xiàn)方式是通過tcp連接來鏡像整個設備。
它有主備節(jié)點的概念。在主節(jié)點上,可以對drbd設備創(chuàng)建文件系統(tǒng)以供讀取,甚至可以直接IO。在主節(jié)點寫入的數(shù)據(jù)通過DRBD設備存儲到主節(jié)點的磁盤設備中,同時,這個數(shù)據(jù)塊也會通過網(wǎng)絡傳輸?shù)絺涔?jié)點對應的DRBD設備上,最終寫入備用節(jié)點的磁盤設備上實現(xiàn)同步。在備用節(jié)點上,DRBD只是將數(shù)據(jù)從DRBD設備寫入到備用節(jié)點的磁盤中,無法供外界讀、寫,之所以連讀都提供,是為了維護緩存一致性(cache coherency)的問題。
現(xiàn)在大部分的高可用集群都會使用共享存儲,在實時同步以及數(shù)據(jù)一致性角度而言,drbd能代替共享存儲。而且,drbd可以配合高可用軟件,實現(xiàn)高可用服務的切換而不會數(shù)據(jù)丟失,因為備節(jié)點和主節(jié)點數(shù)據(jù)是實時同步的,這樣給用戶的體驗是更好的,但卻節(jié)約了成本,其性能與穩(wěn)定性方面也不錯。
下圖是drbd的原理圖。
對于正常的文件系統(tǒng),寫入數(shù)據(jù)的流程:buffer-->filesystem--> disk scheduler-->disk driver-->disk。
而使用drbd時,流程是上圖中的紅色箭頭。在filesystem的下一層加上drbd層,該層將寫入的數(shù)據(jù)通過drbd發(fā)送到tcp套接字的send緩存(send buffer),再通過DMA的方式拷貝到網(wǎng)卡,由網(wǎng)卡發(fā)送到備節(jié)點。備節(jié)點的drbd設備從tcp套接字的recv緩存(recv buffer)中接收數(shù)據(jù),然后從drbd設備讀出數(shù)據(jù)并等待disk scheduler調(diào)度寫入到磁盤中。
如果不理解或者理解的不清晰,可先閱讀:不可不知的socket和TCP連接過程。
其中A/B/C是drbd復制的協(xié)議級別,如下"drbd復制模型"所述。
2.2 drbd復制協(xié)議模型
上面drbd工作原理圖中的A、B、C對應的是drbd的不同復制模型。復制模型指的是數(shù)據(jù)的寫入執(zhí)行到哪個過程就認為此次寫操作已經(jīng)完成。
drbd有三種復制協(xié)議:同步、半同步、異步。
A協(xié)議:異步復制(asynchronous),如上圖A標識,指的是當數(shù)據(jù)寫到本地磁盤上,并且復數(shù)據(jù)已經(jīng)復制到tcp的send buffer緩沖區(qū)以后,此時就認為寫入磁盤成功。此復制協(xié)議性能好,但可能會丟失一些最近的數(shù)據(jù)。
B協(xié)議:半同步復制(semi sync),也稱為內(nèi)存復制,如上圖B標識,指的是數(shù)據(jù)已經(jīng)寫到本地磁盤上,并且已經(jīng)被對方的tcp協(xié)議棧接收到(即寫入到了對方的recv buffer中),此時就認為此次寫操作成功。此復制協(xié)議性能較好,且只有當兩節(jié)點都斷電時才會丟失最近處于socket buffer中的數(shù)據(jù)。因此性能和數(shù)據(jù)可靠性介于協(xié)議A和C之間。
C協(xié)議:同步復制(sync),如上圖C標識,指的是數(shù)據(jù)已經(jīng)寫入到本地磁盤,也已經(jīng)寫入到遠程磁盤上,此時就認為此次寫操作成功。此復制協(xié)議性能較差,但數(shù)據(jù)可靠性高。
C復制協(xié)議是drbd默認使用的協(xié)議。
2.3 DRBD設備的概念
DRBD設備是操作系統(tǒng)中的一個虛擬塊設備,在Linux上游內(nèi)核中已經(jīng)集成了DRBD的塊設備模塊和驅(qū)動。它的主設備號(major)為147,次設備號默認從0開始編號。
在一組主機上,drbd設備的設備名稱為/dev/drbdN,這個N通常和它的次設備號一致。
DRBD需要構(gòu)建在底層設備之上,然后構(gòu)建出一個塊設備出來。對于用戶來說,一個DRBD設備,就像是一個分區(qū),可以在上面創(chuàng)建文件系統(tǒng)。DRBD所支持的底層設備有以下這些類:
- 1、磁盤或磁盤的某一個分區(qū);
- 2、軟 raid 設備;
- 3、LVM的邏輯卷;
- 4、EVMS(企業(yè)卷管理系統(tǒng),Enterprise Volume Management System);
- 4、其他任何的塊設備,甚至DRBD塊設備自身也能成為另一個DRBD的底層設備。
2.4 drbd資源角色
在drbd構(gòu)造的集群中,資源具有角色的概念,分別為primary和secondary(主從的概念)。
所有primary的資源將不受限制進行讀寫操作,可以創(chuàng)建文件系統(tǒng),可以使用裸設備,可以直接io。而所有secondary的設備中不能掛載,不能讀、寫。
2.5 drbd工作模式
主從模型master/slave(primary/secondary)
這種機制在某一時刻只允許有一個主節(jié)點。主節(jié)點的作用是可以掛載使用,寫入數(shù)據(jù)等;從節(jié)點只是作為主節(jié)點的鏡像,是主節(jié)點的備份,且是不可見的。
這樣的工作機制的好處是可以有效的避免磁盤出現(xiàn)單點故障,而且數(shù)據(jù)不會錯亂。
雙主模型dula primary(primary/primary)
所謂雙主模型是2個節(jié)點都可以當做主節(jié)點來掛載使用。但會導致數(shù)據(jù)錯亂。當?shù)谝粋€主節(jié)點對某一文件正在執(zhí)行寫操作,此時另一個節(jié)點也正在對同一文件執(zhí)行寫操作,這種情況會造成數(shù)據(jù)錯亂,從而導致數(shù)據(jù)不能正常使用。
解決雙主模型數(shù)據(jù)混亂的方案是:使用集群(分布式)文件系統(tǒng),如gfs2。集群文件系統(tǒng)使用分布式文件鎖管理器,當一個節(jié)點對文件加鎖之后會通過某種機制來通知其他節(jié)點鎖信息,從而實現(xiàn)文件鎖共享。
也可以將兩節(jié)點的不同drbd設備分別設置主從,從而實現(xiàn)雙主模型。例如服務器A上的a分區(qū)(主)和服務器B上的a分區(qū)(從),同時服務器A上的b分區(qū)(從)和服務器B上的b分區(qū)(主)。
2.6 分區(qū)說明
drbd分為兩種分區(qū)。其中一個分區(qū)是metadata區(qū),用于存儲元數(shù)據(jù),給個1G就夠了,2G就非常多了;另一種分區(qū)是數(shù)據(jù)區(qū),這是drbd塊設備的底層設備。因此,大多數(shù)情況下需要在drbd的兩節(jié)點上創(chuàng)建兩個分區(qū),分別作為metadata區(qū)和data區(qū)。
注意,metadata區(qū)也可以和數(shù)據(jù)區(qū)在同一分區(qū),這時metadata區(qū)稱為"內(nèi)部元數(shù)據(jù)區(qū)(Internal metadata)"。
關于分區(qū)有幾點注意:
3.drbd部署實驗
絕大多數(shù)情況下,drbd都是兩節(jié)點的,要么是主從工作模式(primary/secondary),要么是結(jié)合集群文件系統(tǒng)的主主模式(primary/primary)。很少情況下,可以添加一個第三節(jié)點,作為backup角色。
drbd節(jié)點最好部署在使用專門的網(wǎng)絡環(huán)境下,節(jié)點之間可以使用直連模式、back-to-back模式或使用高速網(wǎng)卡。如果中間跨了交換機,建議加上Linux的網(wǎng)卡綁定功能(如不了解,請百度"bonding驅(qū)動")。不建議drbd節(jié)點之間跨路由器,這會嚴重影響性能。
drbd兩節(jié)點之間的數(shù)據(jù)區(qū)應盡量差不多大小。
3.1 實驗環(huán)境以及安裝前的準備
drbd的實驗環(huán)境:
A服務器上:
管理IP:eth0 192.168.100.49
數(shù)據(jù)同步IP:eth1 192.168.100.51
B服務器上:
管理IP:eth0 192.168.100.50
數(shù)據(jù)同步IP:eth1 192.168.100.52
操作系統(tǒng)均為CentOS 7.2,安裝的drbd是8.4版。
修改主機名。因為drbd是基于主機名解析的。
hostnamectl set-hostname drbd1.longshuai.com # A服務器上配置 hostnamectl set-hostname drbd2.longshuai.com # B服務器上配置修改hosts文件。最好將主機名配置成數(shù)據(jù)同步專用通道eth1的地址。
A/B服務器上都配置
添加主機路由。
route add -host 192.168.100.52 dev eth1 # A服務器上配置 route add -host 192.168.100.51 dev eth1 # B服務器上配置時間同步。
ntpdate ntp1.aliyun.com # A、B都執(zhí)行提供分區(qū)。
分別在A/B服務器上添加一塊硬盤,然后都分為兩個區(qū)。注意,作為metadata的分區(qū)不要格式化,而用作data的分區(qū)格式化后不要掛載。
此處實驗分區(qū)為/dev/sdb1(metadata區(qū))和/dev/sdb5(數(shù)據(jù)區(qū))。
3.2 yum安裝drbd
drbd工具分為兩部分:內(nèi)核模塊(kmod-drbd)和用戶空間的管理工具(drbd-utils),其中內(nèi)核模塊已經(jīng)整合到了2.6.33版本及以后版本的上游內(nèi)核中。如果早于這個版本,則需要安裝和管理工具相同版本的模塊。
在elrepo源中,可以找到drbd的內(nèi)核模塊和管理工具。因此先配置elrepo源(此處配置清華大學鏡像站的elrepo)。
cat /etc/yum.repos.d/elrepo.repo [elrepo] name=elrepo baseurl=https://mirrors.tuna.tsinghua.edu.cn/elrepo/archive/elrepo/el7/x86_64/ enable=1 gpgcheck=0再安裝drbd84-utils和對應版本的模塊kmod-drbd84。安裝后裝載drbd模塊。
yum -y install drbd84-utils kmod-drbd84modprobe drbd如果裝載drbd模塊時發(fā)現(xiàn)"not found",說明沒有安裝"kernel",?yum -y install kernel?安裝后重啟系統(tǒng)即可。
要想開機加載drbd模塊,則將其寫入/etc/sysconfig/modules/目錄下的"*.modules"文件中,如果是CentOS 6,則可以加入/etc/rc.d/rc.sysinit或/etc/rc.modules。
以下是/etc/sysconfig/modules/drbd.modules文件中的內(nèi)容,配置后記得賦予x權(quán)限。
# drbd module exists? /usr/sbin/modinfo -F filename drbd &>/dev/null if [ "$?" -eq 0 ];then /usr/sbin/modprobe drbd fi看看drbd84-utils提供了哪些工具:
[root@node1 ~]# rpm -ql drbd84-utils | grep bin /usr/sbin/drbd-overview # drbd資源信息查看工具,和cat /proc/drbd功能類似 /usr/sbin/drbdadm # drbd主要的管理工具 /usr/sbin/drbdmeta # drbd元數(shù)據(jù)區(qū)管理工具 /usr/sbin/drbdmon # drbd資源狀態(tài)監(jiān)控工具 /usr/sbin/drbdsetup # drbd更底層的管理工具,直接操作塊設備其中drbdadm是主要管理工具,可以給其傳遞一些模塊化的命令來調(diào)用其他的drbd工具。例如drbdadm create-md將調(diào)用drbdmeta工具。
此外,還提供了/etc/ha.d/resource.d/drbddisk腳本,用于結(jié)合heartbeat使用,該腳本用于標記節(jié)點塊設備為primary角色并進行文件系統(tǒng)的掛載。
3.3 編譯安裝drbd
測試環(huán)境CentOS 6.6
安裝相關程序:
yum -y install gcc make automake autoconf kernel-devel kernel-headers flex libxslt如果發(fā)現(xiàn)更新了kernel版本,則需要重啟系統(tǒng)。重啟后需要重新配置路由,否則兩端不能通信。
下載drbd-utils:wget http://www.drbd.org/download/drbd/utils/drbd-utils-8.9.10.tar.gz
下載drbd軟件:wget http://www.drbd.org/download/drbd/9.0/drbd-9.0.4-1.tar.gz
由于重啟模塊不自動加載,可以在/etc/sysconfig/modules/目錄下新建一個*.modules文件,里面寫入modprobe drbd,或者在/etc/rc.modules文件(可能不存在)中追加此行。當然,放入到rc.local也是一樣的。
《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的drbd(一):简介和安装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kubernetes之路 1 - Jav
- 下一篇: XmlSerializer 对象序列化成