drbd(四):drbd多節點(drbd9)

来源:https://www.cnblogs.com/f-ck-need-u/archive/2018/04/02/8691373.html
-Advertisement-
Play Games

1.drbd多節點簡介 在drbd9以前,drbd一直只能配置兩個節點,要麼是primary/secondary,要麼是primary/primary。雖然在這些版本上也能配置第三個節點實現三路節點的同步,但這個第三節點一般都只當作備份drbd設備,幾乎沒人去使用drbd配置3節點。 但是在drbd ...


1.drbd多節點簡介

在drbd9以前,drbd一直只能配置兩個節點,要麼是primary/secondary,要麼是primary/primary。雖然在這些版本上也能配置第三個節點實現三路節點的同步,但這個第三節點一般都只當作備份drbd設備,幾乎沒人去使用drbd配置3節點。

但是在drbd9中,drbd可以定義環狀網路的多節點,最多支持16個節點。這些節點之間,兩兩都要握手。例如,下圖是5節點的drbd環狀圖。

對於host1節點來說,它有4個對端(peer)節點:host2、host3、host4、host5。這4個節點組成host1的"搭檔"(partner)。請區分peer和partner:peer是節點與節點之間的關係,稱為對端;partner是節點和其他所有節點的關係。雖然,是否區分peer和partner不影響drbd9的使用,但是看drbd9文檔的時候有用。

根據上圖,每節點都需要和其他任意一個節點建立連接,因此2節點的drbd只需一個連接對,3節點的drbd需要3個連接對,4個節點需要6個連接對,16個節點需要120個連接對。

在drbd84和以前的版本上,幾乎總是使用/proc/drbd文件來獲取節點之間的狀態信息。但是這個文件只能記錄兩個節點的信息,而drbd9支持多個節點,這個文件已經無法完整記錄各節點之間的關係,因此/proc/drbd已經完全廢棄了

在drbd9上,可以使用drbdadm statusdrbdsetup status等命令獲取各節點的信息。

由於每個節點都需要和其他所有節點通信,因此每個節點的元數據區的大小都要比兩節點時的元數據翻(N-1)倍,這意味著很容易出現元數據區空間不足的情況。因此,請保證每個節點的元數據區夠大。如果drbdadm up啟動失敗,可以查看/var/log/message日誌進行排查是否是因為元數據區的問題。

drbd9.0中還不支持多節點的多主模型(雖能實現,但官方說沒有測試,很危險),在drbd9.1中將正式支持多節點的多主模型。而單主模型的drbd,又沒必要多節點,所以在drbd9中,新添加的多節點特性有點不上不下。

最後,目前還不適合使用drbd9.0,不少新添加的功能還沒有完善。

2.配置3節點的drbd

以下是/etc/drbd.d/rs0.res文件中的內容:

resource rs0 {
        volume 0 {
                device /dev/drbd0;
                disk /dev/sdb2;
                meta-disk /dev/sdb1;
        }
        volume 1 {
                device /dev/drbd1;
                disk /dev/sdb4;
                meta-disk /dev/sdb3;
        }
        on drbd90.longshuai.com {
                address 192.168.100.56:7788;
                node-id 0;      # 需要定義每個節點標識符id
        }
        on drbd91.longshuai.com {
                address 192.168.100.55:7788;
                node-id 1;
        }
        on drbd92.longshuai.com {
                address 192.168.100.58:7788;
                node-id 2;
        }
        connection {            # 定義環狀網路中的連接對
                host drbd90.longshuai.com  port 7001;
                host drbd91.longshuai.com  port 7010;
        }
        connection {
                host drbd91.longshuai.com  port 7012;
                host drbd92.longshuai.com  port 7021;
        }
        connection {
                host drbd90.longshuai.com  port 7002;
                host drbd92.longshuai.com  port 7020;
        }
}

其中connection指令定義節點與節點之間的連接對,由於這裡配置的是3節點,因此配置了3個連接對,分別是(drbd90,drbd91),(drbd90,drbd92),(drbd91,drbd92)。

此外還定義了每個連接對之間tcp通信的埠。如果伺服器上的網卡夠多,可以為每個連接對都使用單獨的IP地址。

如果各連接對之前都不單獨定義通信埠,而是使用address指令上的預設埠,則可以將上面所有connection指令簡化為一個"connection-mesh"指令。如下:

connection-mesh {
        hosts drbd90.longshuai.com drbd91.longshuai.com drbd92.longshuai.com;
}

然後在三個節點上都執行:

drbdadm up rs0

這表示3個節點的所有捲組都建立連接、啟動資源。如果想要指定只和某節點建立連接,則可以使用"--peer"選項來指定host指令中的對端。

以下是drbd90.longshuai.com的狀態:

[root@drbd90 ~]# drbdadm status rs0           
rs0 role:Secondary
  volume:0 disk:Inconsistent
  volume:1 disk:Inconsistent
  drbd91.longshuai.com role:Secondary
    volume:0 peer-disk:Inconsistent
    volume:1 peer-disk:Inconsistent
  drbd92.longshuai.com role:Secondary
    volume:0 peer-disk:Inconsistent
    volume:1 peer-disk:Inconsistent

以下是drbd91.longshuai.com的狀態:

[root@drbd91 ~]# drbdadm status rs0
rs0 role:Secondary
  volume:0 disk:Inconsistent
  volume:1 disk:Inconsistent
  drbd90.longshuai.com role:Secondary
    volume:0 peer-disk:Inconsistent
    volume:1 peer-disk:Inconsistent
  drbd92.longshuai.com role:Secondary
    volume:0 peer-disk:Inconsistent
    volume:1 peer-disk:Inconsistent

以下是drbd92.longshuai.com的狀態:

[root@drbd92 ~]# drbdadm status rs0
rs0 role:Secondary
  volume:0 disk:Inconsistent
  volume:1 disk:Inconsistent
  drbd90.longshuai.com role:Secondary
    volume:0 peer-disk:Inconsistent
    volume:1 peer-disk:Inconsistent
  drbd91.longshuai.com role:Secondary
    volume:0 peer-disk:Inconsistent
    volume:1 peer-disk:Inconsistent

將drbd90.longshuai.com節點升級為primary,並查看該節點的狀態。

[root@drbd90 ~]# drbdadm --force primary rs0
[root@drbd90 ~]# drbdadm status rs0         
rs0 role:Primary
  volume:0 disk:UpToDate
  volume:1 disk:UpToDate
  drbd91.longshuai.com role:Secondary
    volume:0 replication:SyncSource peer-disk:Inconsistent done:0.01
    volume:1 replication:SyncSource peer-disk:Inconsistent done:0.01
  drbd92.longshuai.com role:Secondary
    volume:0 replication:SyncSource peer-disk:Inconsistent done:0.01
    volume:1 replication:SyncSource peer-disk:Inconsistent done:0.01

再查看drbd91.longshuai.com的狀態。

[root@drbd91 ~]# drbdadm status rs0
rs0 role:Secondary
  volume:0 disk:Inconsistent
  volume:1 disk:Inconsistent
  drbd90.longshuai.com role:Primary
    volume:0 replication:SyncTarget peer-disk:UpToDate done:2.53
    volume:1 replication:SyncTarget peer-disk:UpToDate done:3.08
  drbd92.longshuai.com role:Secondary
    volume:0 peer-disk:Inconsistent resync-suspended:peer
    volume:1 peer-disk:Inconsistent resync-suspended:peer

註意其中的resync-suspended狀態,表示本端和drbd92.longshuai.com節點之間並不同步,它們之間的同步操作處於掛起狀態。

同理,drbd92.longshuai.com節點上的狀態也這樣,和drbd91.longshuai.com節點之間是不會進行同步的,它們的同步操作被掛起。

[root@drbd92 ~]# drbdadm status rs0
rs0 role:Secondary
  volume:0 disk:Inconsistent
  volume:1 disk:Inconsistent
  drbd90.longshuai.com role:Primary
    volume:0 replication:SyncTarget peer-disk:UpToDate done:22.15
    volume:1 replication:SyncTarget peer-disk:UpToDate done:6.72
  drbd91.longshuai.com role:Secondary
    volume:0 peer-disk:Inconsistent resync-suspended:peer
    volume:1 peer-disk:Inconsistent resync-suspended:peer

如果啟動資源的時候出現如下錯誤:

[root@drbd90 ~]# drbdadm up rs0     
0: Failure: (162) Invalid configuration request
Command 'drbdsetup attach 0 /dev/sdb2 /dev/sdb1 flexible' terminated with exit code 10
1: Failure: (162) Invalid configuration request
Command 'drbdsetup attach 1 /dev/sdb4 /dev/sdb3 flexible' terminated with exit code 10

且查看資源的狀態時發現本端節點是Diskless,說明資源沒有和底層設備關聯成功。這可能是底層設備的問題,而底層設備的問題,大多數都是元數據區的問題。

[root@drbd90 ~]# drbdadm status rs0
rs0 role:Secondary
  volume:0 disk:Diskless
  volume:1 disk:Diskless
  drbd91.longshuai.com connection:StandAlone
  drbd92.longshuai.com connection:StandAlone

再查看drbd的日誌。很明顯,是元數據區的bitmap槽不夠。之所以不夠,是因為在創建元數據區的時候已經將槽位創建完成了。

[root@drbd90 ~]# vim /var/log/messages
Apr  1 00:19:47 drbd90 kernel: drbd rs0: Starting worker thread (from drbdsetup [75059])
Apr  1 00:19:47 drbd90 kernel: drbd rs0 drbd91.longshuai.com: Starting sender thread (from drbdsetup [75067])
Apr  1 00:19:47 drbd90 kernel: drbd rs0 drbd92.longshuai.com: Starting sender thread (from drbdsetup [75069])
Apr  1 00:19:47 drbd90 kernel: drbd rs0/0 drbd0: disk( Diskless -> Attaching )
Apr  1 00:19:47 drbd90 kernel: drbd rs0/0 drbd0: Maximum number of peer devices = 1
Apr  1 00:19:47 drbd90 kernel: drbd rs0/0 drbd0: Not enough free bitmap slots (available=0, needed=1)
Apr  1 00:19:47 drbd90 kernel: drbd rs0/0 drbd0: disk( Attaching -> Diskless )
Apr  1 00:19:47 drbd90 kernel: drbd rs0/1 drbd1: disk( Diskless -> Attaching )
Apr  1 00:19:47 drbd90 kernel: drbd rs0/1 drbd1: Maximum number of peer devices = 1
Apr  1 00:19:47 drbd90 kernel: drbd rs0/1 drbd1: Not enough free bitmap slots (available=0, needed=1)
Apr  1 00:19:47 drbd90 kernel: drbd rs0/1 drbd1: disk( Attaching -> Diskless )

這時需要添加bitmap槽,或者重建元數據區(可以dump元數據區,再手動編輯元數據區,再導入),甚至擴大元數據區。目前,drbd添加bitmap槽的方法還比較複雜,可參考https://docs.linbit.com/docs/users-guide-9.0/#s-rebalance-workflow。在以後版本中,drbdadm將可以一條命令添加bitmap槽。

 

回到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/8691373.html

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


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

-Advertisement-
Play Games
更多相關文章
  • Turn: https://m.uczzd.cn/webview/news?app=meizubrw-iflow&aid=11529477703533248224&cid=100&zzd_from=meizubrw-iflow&uc_param_str=dndsfrvesvntnwpfgibicpk ...
  • 1.# cd /usr/local/src 2.上傳mysql.tar.gz文件 3.# tar -zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz 4.# mv mysql-5.6.36-linux-glibc2.5-x86_64.tar /usr/lo ...
  • 先將STS下載下來,網址是 https://spring.io/tools/sts/all ,然後將STS壓縮包移動或者copy到想要放置的位置,比如, sudo cp spring-tool-suite-3.9.3.RELEASE-e4.7.3-linux-gtk-x86_64.tar.gz /u ...
  • 瞭解到docker的優點,搭建快,運行要求資源低,最重要的是實現的功能和效果都能達到預期,於是決定使用docker來搭建gitlab伺服器。 效果圖如下: 系統環境:CentOS Linux release 7.1.1503 (Core) git版本:/gitlab/gitlab-ce 一、安裝和啟 ...
  • 配置自己電腦的vim,配置一個根據個人習慣使用的.vimrc文件。我的有以下功能等,讀者可以根據自己的 個人喜好去配置自己的vim。 1.自動插入文件頭 ,新建C、C++源文件時自動插入表頭:包括文件名、作者、聯繫方式、建立時間等。(我個人是不太喜歡新建源 文件時自動插入表頭文件名,所以將其註釋,讀 ...
  • Windows 2008系統管理 電腦網路 思科高級路由與交換 Linux系統管理 Linux網路服務 MySQL資料庫管理 Linux Shell腳本編程 Linux 運維與監控 Linux 安全應用 Linux 集群與存儲技術 Linux 性能調優 虛擬化技術 ...
  • 使用Linux發行版時需要註意幾個方面的問題: 1. 包管理器 包管理器無疑時各家發行版的最大特色之一。軟體同時也是一個平臺是否能夠產生足夠的吸引力的來源之一。 manjaro使用CLI版的 ,同時附帶具有圖形前端的 ;同時manjaro基於archLinux,這意味著可以使用軟體眾多的archcn ...
  • 使用過 Ubuntu 的人都知道,Ubuntu 預設是不能以 root 登陸的,但是我們是不是就完全不能使用 root 進行登陸了呢?當然不是,只是我們需要做一些設置。而 Ubuntu 17.10 和之前的版本的設置方法都是不一樣的(包括 16.04 的方法在這裡也是行不通的),這裡分享一下 Ubu ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...