DRBD(Distributed Replicated Block Device)
本家様 https://www.linbit.com/drbd/

複数のサーバ間でブロックデバイスの同期がとれる. 片方のデバイスに変更が加えられたら、その変更を他のサーバにも波及させ同期させる.
バックアップではない. サーバ間でデバイスがミラーされている感じかな. ファイルシステムベースの rsynclsyncd な代物.

構成

DRBDをグーグル先生に画像検索掛けると容易にわかるかと思いうが、こんな感じで
プライマリーとなっている計算機のストレージの変更が、即座にセカンダリーにも波及する. 波及先は1台でも2台でも構わない.(31台までみたい)
2020y05m23d_152942409.png
ここでは基本的な組み合わせで試してみた.
2台構成でsystem部分となる8GB(/dev/sda)以外にDRBDの対象として16GB(/dev/sdb)を用意した(vmware esxiで)
OSはCentOS7です

マシン名OSsystem領域ipアドレス対象領域
drbd1CentOS7.78GB(/dev/sda)192.168.0.98/dev/sdb, 16GB
drbd28GB(/dev/sda)192.168.0.99/dev/sdb, 16GB

下準備

pkgs.orgに伺うとepelにパッケージがあるのですが、古い...なので ELRepo リポジトリで作ってみる

[root@drbd1 ~]# yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
 
[root@drbd1 ~]# yum search drbd
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * elrepo: ftp.ne.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
============================================= N/S matched: drbd ==============================================
drbd84-utils.x86_64 : Management utilities for DRBD
drbd84-utils-sysvinit.x86_64 : The SysV initscript to manage the DRBD.
drbd90-utils.x86_64 : Management utilities for DRBD
drbd90-utils-sysvinit.x86_64 : The SysV initscript to manage the DRBD.
kmod-drbd84.x86_64 : drbd84 kernel module(s)
kmod-drbd90.x86_64 : drbd90 kernel module(s)
 
  Name and summary matches only, use "search all" for everything.
[root@drbd1 ~]#

ここでは DRBDのversion9系を使いたいので「drbd90-utils」をインストールします

[root@drbd1 ~]# yum info drbd90-utils
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * elrepo: ftp.ne.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Available Packages
Name        : drbd90-utils
Arch        : x86_64
Version     : 9.12.2
Release     : 1.el7.elrepo
Size        : 720 k
Repo        : elrepo
Summary     : Management utilities for DRBD
URL         : http://www.drbd.org/
License     : GPLv2+
Description : DRBD mirrors a block device over the network to another machine.
            : Think of it as networked raid 1. It is a building block for
            : setting up high availability (HA) clusters.
            :
            : This packages includes the DRBD administration tools and integration
            : scripts for heartbeat, pacemaker, rgmanager and xen.
 
[root@drbd1 ~]#
[root@drbd1 ~]# yum install drbd90-utils kmod-drbd90

インストール直後はdrbdのデーモンは動いてなく、またboot時起動にもなってない. またカーネルモジュールも読み込まれていない.

[root@drbd1 ~]# systemctl list-unit-files | grep drbd
drbd.service                                  disabled
 
[root@drbd1 ~]# lsmod |grep drbd | wc -l
0
[root@drbd1 ~]#

セットアップ

現状のストレージ構成は下記のような感じ

[root@drbd1 ~]# cat /proc/partitions
major minor  #blocks  name
 
   2        0          4 fd0
   8        0    8388608 sda
   8        1     524288 sda1
   8        2    1048576 sda2
   8        3    6814720 sda3
   8       16   16777216 sdb
  11        0    1048575 sr0
[root@drbd1 ~]#

https://www.linbit.com/drbd-user-guide/drbd-guide-9_0-ja/を拝読して、「/etc/drbd.d/r0.res」を下記のように作成します
https://blog.drbd.jp/drbd-users-guide-9.0/drbd-users-guide.htmlの方が分かりやすいかな

resource r0 {
  device    /dev/drbd1;
  disk      /dev/sdb;
  meta-disk internal;
  on drbd1 {
    address   192.168.0.98:7789;
  }
  on drbd2 {
    address   192.168.0.99:7789;
  }
  net {
    protocol C;
  }
}

その後、メタデータを作る. これは各ノードで1回だけでいい.

/etc/drbd.d/r0.res」にて「meta-disk internal;」としたので「/dev/sdb」に書かれる.

[root@drbd1 ~]# drbdadm create-md r0
You want me to create a v09 style flexible-size internal meta data block.
There appears to be a v09 flexible-size internal meta data block
already in place on /dev/sdb at byte offset 17179865088
 
Do you really want to overwrite the existing meta-data?
[need to type 'yes' to confirm] yes
 
md_offset 17179865088
al_offset 17179832320
bm_offset 17179308032
 
Found xfs filesystem
    16776668 kB data area apparently used
    16776668 kB left usable by current configuration
 
Even though it looks like this would place the new meta data into
unused space, you still need to confirm, as this is only a guess.
 
Do you want to proceed?
[need to type 'yes' to confirm] yes
 
initializing activity log
initializing bitmap (512 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
 
[root@drbd1 ~]#

この時にDRBDのカーネルモジュールが同時にロードされるみたい. drbdデーモンはまだ動いていない.

[root@drbd1 ~]# lsmod |grep drbd
drbd                  573100  0
libcrc32c              12644  4 xfs,drbd,nf_nat,nf_conntrack
 
[root@drbd1 ~]# ps -ef |grep drbd | grep -v grep
root      8747     2  0 21:01 ?        00:00:00 [drbd-reissue]
 
[root@drbd1 ~]# systemctl status drbd
● drbd.service - DRBD -- please disable. Unless you are NOT using a cluster manager.
   Loaded: loaded (/usr/lib/systemd/system/drbd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
 
[root@drbd1 ~]#

次に、このリソースをupする

[root@drbd1 ~]# drbdadm up r0
 
  --==  Thank you for participating in the global usage survey  ==--
The server's response is:
 
you are the 4836th user to install this version
 
[root@drbd1 ~]# ps -ef |grep drbd | grep -v grep
root      8747     2  0 21:01 ?        00:00:00 [drbd-reissue]
root      8769     2  0 21:04 ?        00:00:00 [drbd_w_r0]
root      8771     2  0 21:04 ?        00:00:00 [drbd1_submit]
root      8777     2  0 21:04 ?        00:00:00 [drbd_s_r0]
root      8784     2  0 21:04 ?        00:00:00 [drbd_r_r0]
 
[root@drbd1 ~]# drbdadm status r0
r0 role:Secondary
  disk:Inconsistent
  drbd2 connection:Connecting
 
[root@drbd1 ~]#

片方の設定が終わったらもう片方(rdbd2)も同じように「/etc/drbd.d/r0.res」を作って下記を実行する.

[root@drbd2 ~]# drbdadm create-md r0
[root@drbd2 ~]# drbdadm up r0

だが両サイト共に

[root@drbd1 ~]# drbdadm status r0                 [root@drbd2 ~]# drbdadm status r0
r0 role:Secondary                                 r0 role:Secondary
  disk:Inconsistent                                 disk:Inconsistent
  drbd2 connection:Connecting                       drbd1 connection:Connecting
                                                  
[root@drbd1 ~]#                                   [root@drbd2 ~]#

と「Secondary」状態だが「connection:Connecting」で互いが見えていない.

原因はfirewall.
っで修正を加えます. *単にfirewallを止めてしまえばいいのかもしれないけど...

[root@drbd1 ~]# firewall-cmd --get-active-zones
public
  interfaces: ens32       <-- publicゾーンのみで、インターフェースは ens32
 
(詳細確認)
[root@drbd1 ~]# firewall-cmd --list-all --zone=public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens32
  sources:
  services: dhcpv6-client ssh       <--- dhcpのv6とsshのみ許されている
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
 
(/etc/drbd.d/r0.resのport番号 7789 を許可させる)
[root@drbd1 ~]# firewall-cmd --add-port=7789/tcp --zone=public --permanent
success
 
[root@drbd1 ~]# firewall-cmd --reload

もう片方も同じように 7789/tcp を有効にします
そうすると

[root@drbd1 ~]# drbdadm status r0           [root@drbd2 ~]# drbdadm status r0
r0 role:Secondary                           r0 role:Secondary
  disk:Inconsistent                           disk:Inconsistent
  drbd2 role:Secondary                        drbd1 role:Secondary
    peer-disk:Inconsistent                      peer-disk:Inconsistent
                                            
[root@drbd1 ~]#                             [root@drbd2 ~]#

となる. ならない場合は、片方で「drbdadm up r0」を再実行する

つかう

現状まだ同期は取られていない.
次に片方を「Primary」にするのだが、同期元で下記を実行すれば、そこからSecondaryにデータが流れる.
今回は初回、そして初めて作った領域なので転送もないのだろうが

[root@drbd1 ~]# drbdadm primary --force r0
[root@drbd1 ~]# drbdadm status r0
r0 role:Primary
  disk:UpToDate
  drbd2 role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:7.65
 
[root@drbd1 ~]#

「replication:SyncSource」とdrbd1側が「source」となってる。

他方のdrbd2側は

[root@drbd2 ~]# drbdadm status r0
r0 role:Secondary
  disk:Inconsistent
  drbd1 role:Primary
    replication:SyncTarget peer-disk:UpToDate done:35.22
 
[root@drbd2 ~]#

と「replication:SyncTarget」と「Target」となっている.
暫くすると同期が完了して

[root@drbd1 ~]# drbdadm status r0           [root@drbd2 ~]# drbdadm status r0
r0 role:Primary                             r0 role:Secondary
  disk:UpToDate                               disk:UpToDate
  drbd2 role:Secondary                        drbd1 role:Primary
    peer-disk:UpToDate                          peer-disk:UpToDate
                                            
[root@drbd1 ~]#                             [root@drbd2 ~]#

となる.
ここで対象デバイスをフォーマットするのだが、対象は/dev/sdbではなく、/dev/drbd1である。
この/dev/drbd1をフォーマットしてmountする.

[root@drbd1 ~]# mkfs.xfs -f /dev/drbd1
 
[root@drbd1 ~]# mount /dev/drbd1 /opt
[root@drbd1 ~]# df -lTh
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  909M     0  909M   0% /dev
tmpfs          tmpfs     920M     0  920M   0% /dev/shm
tmpfs          tmpfs     920M  8.8M  911M   1% /run
tmpfs          tmpfs     920M     0  920M   0% /sys/fs/cgroup
/dev/sda3      xfs       6.5G  1.3G  5.3G  20% /
/dev/sda1      xfs       509M  173M  336M  34% /boot
tmpfs          tmpfs     184M     0  184M   0% /run/user/0
/dev/drbd1     xfs        16G   33M   16G   1% /opt
[root@drbd1 ~]#

とうまく行ったみたい.

っでファイルを作ってみる

[root@drbd1 ~]# cd /
[root@drbd1 /]# tar cf /opt/etc.tar ./etc/
[root@drbd1 /]# ls -l /opt/
total 28612
-rw-r--r--. 1 root root 29296640 May 26 12:41 etc.tar
[root@drbd1 /]# stat /opt/etc.tar
  File: ‘/opt/etc.tar’
  Size: 29296640        Blocks: 57224      IO Block: 4096   regular file
Device: 9301h/37633d    Inode: 67          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:unlabeled_t:s0
Access: 2020-05-26 12:41:32.176544862 +0900
Modify: 2020-05-26 12:41:34.849593767 +0900
Change: 2020-05-26 12:41:34.849593767 +0900
 Birth: -
[root@drbd1 /]#

次に drbd1 をsecondaryに、drbd2を primary にしてみる

[root@drbd1 ~]# umount /opt
[root@drbd1 ~]# drbdadm secondary r0
[root@drbd1 ~]# drbdadm status r0
r0 role:Secondary
  disk:UpToDate
  drbd2 role:Secondary
    peer-disk:UpToDate
 
[root@drbd1 ~]#
 
[root@drbd2 ~]# drbdadm primary r0
[root@drbd2 ~]# mount /dev/drbd1 /opt/
[root@drbd2 ~]# stat /opt/etc.tar
  File: ‘/opt/etc.tar’
  Size: 29296640        Blocks: 57224      IO Block: 4096   regular file
Device: 9301h/37633d    Inode: 67          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:unlabeled_t:s0
Access: 2020-05-26 12:41:32.176544862 +0900
Modify: 2020-05-26 12:41:34.849593767 +0900
Change: 2020-05-26 12:41:34.849593767 +0900
 Birth: -
[root@drbd2 ~]#

statコマンドで同じと確認された.

drbd.service

drbdのサービスを読むと

[root@drbd1 ~]# systemctl status drbd.service
● drbd.service - DRBD -- please disable. Unless you are NOT using a cluster manager.
   Loaded: loaded (/usr/lib/systemd/system/drbd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[root@drbd1 ~]#

とある。クラスターマネージャは使ってないので、「enable」にして再起動します

systemctl enable drbd.service ; reboot

再起動後、「drbdadm status r0」で状態を調べると

[root@drbd1 ~]# drbdadm status r0       [root@drbd2 ~]# drbdadm status r0
r0 role:Secondary                       r0 role:Secondary
  disk:Diskless                           disk:Diskless
                                        
[root@drbd1 ~]#                         [root@drbd2 ~]#

どちらも「Secondary」
っでDisklessなので「drbdadm attach r0」つなげてみる

[root@drbd1 ~]# drbdadm attach r0       [root@drbd2 ~]# drbdadm attach r0
[root@drbd1 ~]# drbdadm status r0       [root@drbd2 ~]# drbdadm status r0
r0 role:Secondary                       r0 role:Secondary
  disk:UpToDate                           disk:UpToDate
                                        
[root@drbd1 ~]#                         [root@drbd2 ~]#

そして、どちらかをprimaryにする

[root@drbd1 ~]# drbdadm primary r0
[root@drbd1 ~]# drbdadm status r0
r0 role:Primary
  disk:UpToDate
 
[root@drbd1 ~]# mount /dev/drbd1 /opt/
[root@drbd1 ~]# ls -l /opt/
total 28612
-rw-r--r--. 1 root root 29296640 May 26 12:41 etc.tar
[root@drbd1 ~]# stat /opt/etc.tar
  File: ‘/opt/etc.tar’
  Size: 29296640        Blocks: 57224      IO Block: 4096   regular file
Device: 9301h/37633d    Inode: 67          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:unlabeled_t:s0
Access: 2020-05-26 12:41:32.176544862 +0900
Modify: 2020-05-26 12:41:34.849593767 +0900
Change: 2020-05-26 12:41:34.849593767 +0900
 Birth: -
[root@drbd1 ~]#

再起動するとSecondaryのままで、手動で接続、Primaryにして、mount
こうしないとダメなのかは不明.
っが一応これで行けるみたい


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2020-05-27 (水) 12:22:26 (2d)