分佈式塊設備DRBD9基礎用法(快速上手教程)

1. 概述

1.1 介紹

DRBD (Distributed Replicated Block Device) 是 Linux 平臺上的分散式儲存系統。其中包含了核心模組,數個使用者空間管理程式及 shell scripts,通常用於高可用性(high availability, HA)叢集。DRBD 類似磁盤陣列的RAID 1(鏡像),只不過 RAID是在同一臺電腦內,而DRBD是透過網絡。

1.2 基本原理

DRBD是linux的內核的存儲層中的一個分佈式存儲系統,架構分爲兩個部分:一個是內核模塊,用於虛擬一個塊設備;另一個是用戶空間管理程序,用於和DRBD內核模塊通訊,以管理DRBD資源。在DRBD中,資源是特指某複製的存儲設備的所有方面。包括資源名稱、DRBD設備(/dev/drbdm,這裏m是設備最小號,最大號可到147)、磁盤配置(使本地數據可以爲DRBD所用)、網絡配置(與對方通信)。
 一個DRBD系統由兩個以上節點構成,和HA集羣一樣有主用節點和備用節點之分(DRBD每次只允許對一個節點進行讀寫訪問,主機上的DRBD設備掛載到一個目錄上進行使用.備機的DRBD設備無法被掛載,因爲它是用來接收主機數據的,由DRBD負責操作.),在帶有主要設備的節點上,應用程序和操作系統可以運行和訪問DRBD設備。
DRBD塊被加載到正常的塊設備之上,文件系統之下,在文件系統和磁盤之間形成一箇中間層 ,當用戶往主節點文件系統中寫入數據時,數據被正式寫入磁盤之前會被DRBD系統截獲,DRBD系統在捕獲到有磁盤寫入時,會通知用戶空間管理程序把這些數據拷貝一份,寫入遠程DRBD鏡像,然後存入DRBD鏡像所映射的磁盤(備用節點)。 如圖:
運行原理圖

DRBD系統向虛擬塊的鏡像中寫入數據時,支持三種協議:
  A:數據一旦寫入磁盤併發送到網絡中就認爲完成了寫入操作
  B:收到接收確認就認爲完成了寫入操作
  C:收到寫入確認就認爲完成了寫入操作
基於安全考慮我們一般選擇協議C。

2. 實驗環境準備

2.1 系統環境

本教程基於最新版DRBD+最新版本CENTOS,更新時間:2019-07-04

主機名 系統版本 IP地址 DRBD分區硬盤
node1 centos7.6_minial 192.168.10.30 /dev/mapper/drbd-data
node2 centos7.6_minial 192.168.10.40 /dev/mapper/drbd-data

也可以直接使用本地硬盤例如:sdb,sdc等作爲drbd硬盤,此處使用邏輯卷是爲了後續drbd磁盤擴容實驗準備

2.2 DRBD軟件下載地址

DRBD官網地址:https://www.linbit.com

軟件名 備註 版本
DRBD 9 Linux Kernel Driver DRBD9內核組件 drbd-9.0.18-1.tar
DRBD Utilities DRBD9管理組件 drbd90-utils-sysvinit-9.3.1-1.el7.elrepo.x86_64..>
DRBD Sysvinit DRBD9管理組件 drbd90-utils-9.6.0-1.el7.elrepo.x86_64.rpm

3. 開始部署(主備節點同時部署)

一些基本初始化此處不再贅述(selinux,ntpdate,firewalld,hosts等)

3.1 更新系統內核

# yum install kernel kernel-devel gcc glibc -y
# 重啓服務器生效
# reboot

3.2 部署DRBD9內核組件

[root@node1 drbd]# tar zxf drbd-9.0.18-1.tar.gz 
[root@node1 drbd]# cd drbd-9.0.18-1
# 查看此文件可知DRBD9需要管理工具版本 >= 9.3
[root@node1 drbd-9.0.18-1]# cat README.drbd-utils 
=======================================================================
  With DRBD module version 8.4.5, we split out the management tools
  into their own repository at https://github.com/LINBIT/drbd-utils
  (tarball at http://links.linbit.com/drbd-download)

  That started out as "drbd-utils version 8.9.0",
  has a different release cycle,
  and provides compatible drbdadm, drbdsetup and drbdmeta tools
  for DRBD module versions 8.3, 8.4 and 9.

  Again: to manage DRBD 9 kernel modules and above,
  you want drbd-utils >= 9.3 from above url.
=======================================================================
# 指定KDIR參數,將drbd編譯進系統內核
[root@node1 drbd-9.0.18-1]# make DIR=/usr/src/kernels/3.10.0-957.21.3.el7.x86_64/
[root@node1 drbd-9.0.18-1]# make install
# 將DRBD加載到系統內核
[root@node1 drbd-9.0.18-1]# modprobe drbd
# 確認是否成功加載
[root@node1 drbd-9.0.18-1]# lsmod | grep drbd
drbd                  558570  0 
libcrc32c              12644  2 xfs,drbd

3.3 部署DRBD9管理組件

[root@node1 drbd]# yum install drbd90-utils-9.6.0-1.el7.elrepo.x86_64.rpm -y
[root@node1 drbd]# yum install drbd90-utils-sysvinit-9.6.0-1.el7.elrepo.x86_64.rpm -y

3.4 配置DRBD9

在安裝完DRDB軟件後,必須在兩邊服務器上配置大致相同的存儲空間,你可以採用如下任意一種存儲設備:

  • 一個物理磁盤設備
  • 一個軟RAID設備
  • 一個LVM邏輯卷
  • 任何塊設備

DRBD對於網絡的要求:建議drbd服務器之間通過交換機直接連接,不建議中間通過路由器設備,當然這不是強制要求,DRBD需要基於TCP的7788和7799端口

3.4.1 配置你的資源(主備機器都需要同時執行)

DRBD的配置文件在 /etc/drbd.conf中,當前只包含如下兩行

include "/etc/drbd.d/global_common.conf";
include "/etc/drbd.d/*.res";

其中
/etc/drbd.d/global_common.conf :包含DRBD的全局和通用模塊配置
/etc/drbd.d/*.res :用戶資源配置模塊

如下是一個drbd.conf的簡單配置案例:

vim /etc/drbd.d/global_common.conf

global {
  usage-count yes;
}
common {
  net {
    protocol C;
  }
}
vim /etc/drbd.d/r0.res

resource r0 {
  on node1 {  # on 主機名
    device    /dev/drbd1;  # 映射的drbd磁盤,可默認
    disk      /dev/mapper/drbd-data;   # 設置後面存放數據的drbd磁盤
    address   192.168.10.30:7789;
    meta-disk internal;
  }
  on node2 {
    device    /dev/drbd1;
    disk      /dev/mapper/drbd-data;
    address   192.168.10.40:7789;
    meta-disk internal;
  }
}
3.4.5 啓動drbd服務

初始化配置服務完成後,請記住你的資源名(r0)

# 創建device metadta
[root@node1 ~]# drbdadm create-md r0

  --==  Thank you for participating in the global usage survey  ==--
The server's response is:

you are the 859th user to install this version
initializing activity log
initializing bitmap (192 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
success
# 啓動資源並查看狀態
[root@node1 ~]# drbdadm up r0
[root@node1 ~]# drbdadm status r0
r0 role:Secondary
  disk:Inconsistent
  node2 role:Secondary
    peer-disk:Inconsistent

# 可以看到當前資源狀態都是Inconsistent(數據未同步狀態)
# 此操作只能在一個設備上執行,因爲需要將此設備設置爲主設備
[root@node1 ~]# drbdadm primary --force r0
[root@node1 ~]# drbdadm status r0
r0 role:Primary
  disk:UpToDate
  node2 role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:49.11

# 看到此時數據的狀態爲UpToDate(數據正在同步,單未完全同步),且已經同步49.11

# 如下代表數據已經全部同步完成
[root@node1 ~]# drbdadm status r0
r0 role:Primary
  disk:UpToDate
  node2 role:Secondary
    peer-disk:UpToDate
3.4.6 詳細服務狀態查詢
[root@node1 ~]# drbdsetup status r0 --verbose --statistics
r0 node-id:0 role:Primary suspended:no
    write-ordering:flush
  volume:0 minor:1 disk:UpToDate quorum:yes
      size:6291228 read:6292272 written:0 al-writes:0 bm-writes:0 upper-pending:0 lower-pending:0 al-suspended:no blocked:no
  node2 node-id:1 connection:Connected role:Secondary congested:no ap-in-flight:0 rs-in-flight:0
    volume:0 replication:Established peer-disk:UpToDate resync-suspended:no
        received:0 sent:6291228 out-of-sync:0 pending:0 unacked:0

DRBD運行狀態圖

3.5 格式化文件系統並掛載

此操作僅僅需要在主節點執行即可

[root@node1 ~]# mkfs.xfs /dev/drbd1
meta-data=/dev/drbd1             isize=512    agcount=4, agsize=393202 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1572807, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@node1 ~]# mkdir /mydata
[root@node1 ~]# mount /dev/drbd1 /mydata/
[root@node1 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  8.0G  1.5G  6.6G  19% /
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.6M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/sda1               1014M  156M  859M  16% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/drbd1               6.0G   33M  6.0G   1% /mydata

3.6 寫入文件並測試主備切換

# 進入掛載目錄mydata下,隨便創建一些文件
[root@node1 ~]# cd /mydata/
[root@node1 mydata]# touch {a,b,c,d,e,f}.txtx
[root@node1 mydata]# ll
total 0
-rw-r--r-- 1 root root 0 Jul  5 12:18 a.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 b.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 c.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 d.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 e.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 f.txtx

# 嘗試切換原先primary節點爲secondary
[root@node1 ~]# umount /mydata/
[root@node1 ~]# drbdadm secondary r0
[root@node1 ~]# drbdadm status r0
r0 role:Secondary
  disk:UpToDate
  node2 role:Secondary
    peer-disk:UpToDate

# 將node2的secondary切換爲primary節點並掛載
[root@node2 ~]# mkdir /mydata
[root@node2 ~]# drbdadm primary r0
[root@node2 ~]# mount /dev/drbd1 /mydata/
[root@node2 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  8.0G  1.5G  6.6G  19% /
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.6M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/sda1               1014M  156M  859M  16% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/drbd1               6.0G   33M  6.0G   1% /mydata
[root@node2 ~]# cd /mydata/
[root@node2 mydata]# ll
total 0
-rw-r--r-- 1 root root 0 Jul  5 12:18 a.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 b.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 c.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 d.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 e.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 f.txtx
[root@node2 mydata]# drbdadm status r0
r0 role:Primary
  disk:UpToDate
  node1 role:Secondary
    peer-disk:UpToDate

綜上操作可發現node2節點成功切換成主節點,且之前node1中創建的數據已經同步到node2,此時在node2中新建文件,也會同步到node1節點完成網絡raid1的功能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章