drbd(一):簡介和安裝

来源:https://www.cnblogs.com/f-ck-need-u/archive/2018/03/29/8673178.html
-Advertisement-
Play Games

本文目錄:1.drbd簡介2.drbd工作原理和術語說明 2.1 drbd工作原理 2.2 drbd複製協議模型 2.3 drbd設備的概念 2.4 drbd資源角色 2.5 drbd工作模式 2.6 drbd分區說明3.drbd部署實驗 3.1 實驗環境和部署前的準備 3.2 yum安裝drbd  ...


本文目錄:
1.drbd簡介
2.drbd工作原理和術語說明
 2.1 drbd工作原理
 2.2 drbd複製協議模型
 2.3 drbd設備的概念
 2.4 drbd資源角色
 2.5 drbd工作模式
 2.6 drbd分區說明
3.drbd部署實驗
 3.1 實驗環境和部署前的準備
 3.2 yum安裝drbd
 3.3 編譯安裝drbd

1.drbd簡介

drbd是通過網路(tcp連接)在不同伺服器之間實現基於block級別進行數據實時同步的軟體。類似於inotify+rsync,只不過inotify+rsync是按文件級別來同步的,而drbd是工作在文件系統下層的,實現的是block同步和拷貝,效率相對較高。且inotify+rsync是通過監控事件來實現實時同步的,而drbd則跟普通寫入磁碟的過程一樣,只不過多了一條寫入網卡的分支路線。

如下圖,此處只是簡單的示意圖。更具體的原理圖見下文。

drbd只能在分區上、LVM邏輯捲上或整塊磁碟上實現,不能在某一個目錄上實現。

drbd支持同步、半同步、非同步三種數據同步的方式。

drbd支持腦裂(brain split)通知和自動恢復。

2.drbd工作原理和術語說明

drbd的核心功能是通過Linux內核模塊實現的。特別地,操作系統中的虛擬塊設備(virtual block device)中有它的驅動,因此drbd幾乎處於操作系統I/O堆棧的"最底部"。這使得它非常具有彈性,可以很容易地為服務提供高可用性。

但註意,drbd處於文件系統之下的層次,不能實現文件系統層次的功能,例如檢查文件是否損壞、為文件系統提供高可用等。但它是基於block的,可以做塊設備檢查、同步的完整性檢查等。

2.1 drbd工作原理

drbd實現基於塊級別的數據同步,其實現方式是通過tcp連接來鏡像整個設備。

它有主備節點的概念。在主節點上,可以對drbd設備創建文件系統以供讀取,甚至可以直接IO。在主節點寫入的數據通過DRBD設備存儲到主節點的磁碟設備中,同時,這個數據塊也會通過網路傳輸到備節點對應的DRBD設備上,最終寫入備用節點的磁碟設備上實現同步。在備用節點上,DRBD只是將數據從DRBD設備寫入到備用節點的磁碟中,無法供外界讀、寫,之所以連讀都提供,是為了維護緩存一致性(cache coherency)的問題。

現在大部分的高可用集群都會使用共用存儲,在實時同步以及數據一致性角度而言,drbd能代替共用存儲。而且,drbd可以配合高可用軟體,實現高可用服務的切換而不會數據丟失,因為備節點和主節點數據是實時同步的,這樣給用戶的體驗是更好的,但卻節約了成本,其性能與穩定性方面也不錯。

下圖是drbd的原理圖。

對於正常的文件系統,寫入數據的流程:buffer-->filesystem--> disk scheduler-->disk driver-->disk

而使用drbd時,流程是上圖中的紅色箭頭。在filesystem的下一層加上drbd層,該層將寫入的數據通過drbd發送到tcp套接字的send緩存(send buffer),再通過DMA的方式拷貝到網卡,由網卡發送到備節點。備節點的drbd設備從tcp套接字的recv緩存(recv buffer)中接收數據,然後從drbd設備讀出數據並等待disk scheduler調度寫入到磁碟中。

如果不理解或者理解的不清晰,可先閱讀:不可不知的socket和TCP連接過程

其中A/B/C是drbd複製的協議級別,如下"drbd複製模型"所述。

2.2 drbd複製協議模型

上面drbd工作原理圖中的A、B、C對應的是drbd的不同複製模型。複製模型指的是數據的寫入執行到哪個過程就認為此次寫操作已經完成。

drbd有三種複製協議:同步、半同步、非同步。

A協議:非同步複製(asynchronous),如上圖A標識,指的是當數據寫到本地磁碟上,並且複數據已經複製到tcp的send buffer緩衝區以後,此時就認為寫入磁碟成功。此複製協議性能好,但可能會丟失一些最近的數據。

B協議:半同步複製(semi sync),也稱為記憶體複製,如上圖B標識,指的是數據已經寫到本地磁碟上,並且已經被對方的tcp協議棧接收到(即寫入到了對方的recv buffer中),此時就認為此次寫操作成功。此複製協議性能較好,且只有當兩節點都斷電時才會丟失最近處於socket buffer中的數據。因此性能和數據可靠性介於協議A和C之間。

C協議:同步複製(sync),如上圖C標識,指的是數據已經寫入到本地磁碟,也已經寫入到遠程磁碟上,此時就認為此次寫操作成功。此複製協議性能較差,但數據可靠性高。

C複製協議是drbd預設使用的協議。

2.3 DRBD設備的概念

DRBD設備是操作系統中的一個虛擬塊設備,在Linux上游內核中已經集成了DRBD的塊設備模塊和驅動。它的主設備號(major)為147,次設備號預設從0開始編號。

在一組主機上,drbd設備的設備名稱為/dev/drbdN,這個N通常和它的次設備號一致。

DRBD需要構建在底層設備之上,然後構建出一個塊設備出來。對於用戶來說,一個DRBD設備,就像是一個分區,可以在上面創建文件系統。DRBD所支持的底層設備有以下這些類:

  • 1、磁碟或磁碟的某一個分區;
  • 2、軟 raid 設備;
  • 3、LVM的邏輯捲;
  • 4、EVMS(企業捲管理系統,Enterprise Volume Management System);
  • 4、其他任何的塊設備,甚至DRBD塊設備自身也能成為另一個DRBD的底層設備。

2.4 drbd資源角色

在drbd構造的集群中,資源具有角色的概念,分別為primary和secondary(主從的概念)。

所有primary的資源將不受限制進行讀寫操作,可以創建文件系統,可以使用裸設備,可以直接io。而所有secondary的設備中不能掛載,不能讀、寫。

2.5 drbd工作模式

  1. 主從模型master/slave(primary/secondary)
    這種機制在某一時刻只允許有一個主節點。主節點的作用是可以掛載使用,寫入數據等;從節點只是作為主節點的鏡像,是主節點的備份,且是不可見的。
    這樣的工作機制的好處是可以有效的避免磁碟出現單點故障,而且數據不會錯亂。

  2. 雙主模型dula primary(primary/primary)
    所謂雙主模型是2個節點都可以當做主節點來掛載使用。但會導致數據錯亂。當第一個主節點對某一文件正在執行寫操作,此時另一個節點也正在對同一文件執行寫操作,這種情況會造成數據錯亂,從而導致數據不能正常使用。

解決雙主模型數據混亂的方案是:使用集群(分散式)文件系統,如gfs2。集群文件系統使用分散式文件鎖管理器,當一個節點對文件加鎖之後會通過某種機制來通知其他節點鎖信息,從而實現文件鎖共用。

也可以將兩節點的不同drbd設備分別設置主從,從而實現雙主模型。例如伺服器A上的a分區(主)和伺服器B上的a分區(從),同時伺服器A上的b分區(從)和伺服器B上的b分區(主)。

2.6 分區說明

drbd分為兩種分區。其中一個分區是metadata區,用於存儲元數據,給個1G就夠了,2G就非常多了;另一種分區是數據區,這是drbd塊設備的底層設備。因此,大多數情況下需要在drbd的兩節點上創建兩個分區,分別作為metadata區和data區。

註意,metadata區也可以和數據區在同一分區,這時metadata區稱為"內部元數據區(Internal metadata)"。

關於分區有幾點註意:

  1. 數據區創建完成後不能掛載。
  2. metadata分區創建完成後不能格式化,也就是不能創建文件系統(要交給drbd來處理)。
  3. 建議兩邊的數據分區大小給一樣的,否則一端會浪費空間。如何解決此問題後文說明。

3.drbd部署實驗

絕大多數情況下,drbd都是兩節點的,要麼是主從工作模式(primary/secondary),要麼是結合集群文件系統的主主模式(primary/primary)。很少情況下,可以添加一個第三節點,作為backup角色。

drbd節點最好部署在使用專門的網路環境下,節點之間可以使用直連模式、back-to-back模式或使用高速網卡。如果中間跨了交換機,建議加上Linux的網卡綁定功能(如不瞭解,請百度"bonding驅動")。不建議drbd節點之間跨路由器,這會嚴重影響性能。

drbd兩節點之間的數據區應儘量差不多大小。

3.1 實驗環境以及安裝前的準備

drbd的實驗環境:
A伺服器上:
  管理IP:eth0 192.168.100.49
  數據同步IP:eth1 192.168.100.51
B伺服器上:
  管理IP:eth0 192.168.100.50
  數據同步IP:eth1 192.168.100.52

操作系統均為CentOS 7.2,安裝的drbd是8.4版。

  1. 修改主機名。因為drbd是基於主機名解析的。

    hostnamectl set-hostname drbd1.longshuai.com  # A伺服器上配置
    hostnamectl set-hostname drbd2.longshuai.com  # B伺服器上配置
    
  2. 修改hosts文件。最好將主機名配置成數據同步專用通道eth1的地址。
    A/B伺服器上都配置

    192.168.100.51 node1.longshuai.com node1
    192.168.100.52 node2.longshuai.com node2
    
  3. 添加主機路由。

    route add -host 192.168.100.52 dev eth1  # A伺服器上配置
    route add -host 192.168.100.51 dev eth1  # B伺服器上配置
    
  4. 時間同步。

    ntpdate ntp1.aliyun.com     # A、B都執行
    
  5. 提供分區。
    分別在A/B伺服器上添加一塊硬碟,然後都分為兩個區。註意,作為metadata的分區不要格式化,而用作data的分區格式化後不要掛載。
    此處實驗分區為/dev/sdb1(metadata區)和/dev/sdb5(數據區)。

    # 在兩節點上執行:
    # 磁碟熱插
    for i in /sys/class/scsi_host/*;do echo "- - -" >$i/scan;done
    # 分區
    # 主分區(metadata區)/dev/sdb1:1G,擴展分區/dev/sdb2,邏輯分區(data區)/dev/sdb5:5G
    parted /dev/sdb mklabel msdos
    parted /dev/sdb mkpart p 1 1G
    parted /dev/sdb "mkpart e 1G -1"
    parted /dev/sdb mkpart l 1G 6G
    fdisk /dev/sdb
    mke2fs -t ext4 /dev/sdb5
    

3.2 yum安裝drbd

drbd工具分為兩部分:內核模塊(kmod-drbd)和用戶空間的管理工具(drbd-utils),其中內核模塊已經整合到了2.6.33版本及以後版本的上游內核中。如果早於這個版本,則需要安裝和管理工具相同版本的模塊。

在elrepo源中,可以找到drbd的內核模塊和管理工具。因此先配置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-drbd84

modprobe drbd

如果裝載drbd模塊時發現"not found",說明沒有安裝"kernel-devel",yum安裝下後重啟系統即可。

看看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元數據區管理工具
/usr/sbin/drbdmon         # drbd資源狀態監控工具
/usr/sbin/drbdsetup       # drbd更底層的管理工具,直接操作塊設備

其中drbdadm是主要管理工具,可以給其傳遞一些模塊化的命令來調用其他的drbd工具。例如drbdadm create-md將調用drbdmeta工具。

此外,還提供了/etc/ha.d/resource.d/drbddisk腳本,用於結合heartbeat使用,該腳本用於標記節點塊設備為primary角色併進行文件系統的掛載。

3.3 編譯安裝drbd

測試環境CentOS 6.6

安裝相關程式:

yum -y install gcc make automake autoconf kernel-devel kernel-headers flex libxslt

如果發現更新了kernel版本,則需要重啟系統。重啟後需要重新配置路由,否則兩端不能通信。

下載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

  1. 先安裝drbd-utils再安裝drbd
    wget http://www.drbd.org/download/drbd/utils/drbd-utils-8.9.10.tar.gz
    tar xf drbd-utils-8.9.10.tar.gz 
    cd drbd-utils-8.9.10
    ./autogen.sh
    ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc 
    make KDIR=/usr/src/kernels/2.6.32-504.el6.x86_64/
    make install
    
  2. 再安裝drbd
    tar xf drbd-9.0.4-1.tar.gz
    cd drbd-9.0.4-1
    make KDIR=/usr/src/kernels/2.6.32-504.el6.x86_64/
    make install
    
  3. 最後載入drbd模塊
    lsmod|grep drbd
    modprobe drbd
    lsmod|grep drbd
    drbd                  500374  0 
    libcrc32c               1246  2 drbd,btrfs
    

由於重啟模塊不自動載入,可以在/etc/sysconfig/modules/目錄下新建一個*.modules文件,裡面寫入modprobe drbd,或者在/etc/rc.modules文件(可能不存在)中追加此行。當然,放入到rc.local也是一樣的。

 

回到Linux系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
回到網站架構系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7576137.html
回到資料庫系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7586194.html
轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/8673178.html

註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在C#開發企業應用時使用ORM工具,例如NHibernate可以將開發人員從簡單、重覆的資料庫操作中解放出來,專註於業務邏輯的實現。 ...
  • 廢話少說,直接上總結: 一、在命名空間下: 二、成員 ...
  • C#3DES加密解密,JAVA、PHP可用 ...
  • xp 虛擬機運行WPF程式的時候,有部分控制項透明,在這兒有一個可能的解決方案: 關閉系統的硬體加速: 1、 按“WIN” + R 鍵,在“運行”輸入框中輸入“dxdiag”; 2、 在“DirectX 診斷工具”對話框,選擇“顯示”頁面,在“DirectX 功能”里點擊“禁用”按鈕,將“Direct ...
  • 一、什麼是隊列 隊列(Queue)代表了一個先進先出的對象集合。當您需要對各項進行先進先出的訪問時,則使用隊列。當您在列表中添加一項,稱為入隊,當您從列表中移除一項時,稱為出隊。 這是摘抄網上的。做了個demo,但筆者技術有限,如有改進的地方,歡迎大神多多指導。 二、利用隊列來處理訂單問題 思路:開 ...
  • 深入淺出話命令(Command)-筆記(-) 一 基本概念 命令的基本元素: 命令的使用步驟: 二 小試牛刀 實現這樣一個需求:定義一個命令,使用Button 來發送這個命令,當命令到達Textbox時,清空Text(當Textbox為空時,Button不可用)。 XAML代碼: CS代碼: 運行效 ...
  • 關註微軟dotnet core有一年多了,最近才開始著手使用,由於我們的開發環境不能連接互聯網,因此很多的插件和配置需要離線安裝,這裡把我碰到的一些離線安裝的插件分享出來供大家搭建時借鑒。 我的安裝環境是windows 7 X64 VS Code版本:ms-vscode.csharp-1.14.0 ...
  • 一、String到底是值類型還是引用類型 MSDN 中明確指出 String 是引用類型而不是值類型,但 String 錶面上用起來卻像是值類型,這又是什麼原因呢? 首先從下麵這個例子入手: 輸出結果: 從運行結果可以看出:str2 的值還是 ab ,並沒有隨著 str1 值的改變而改變。如果str ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...