20
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CentOS7でDRBD9の環境構築

Last updated at Posted at 2015-09-14

CentOS7でDRBD9の環境構築を行いました。

また、DRBDの設定管理ツールはdrbdmanageを用いました。

  • drbdはversion=9.0.0
  • drbdmanageはversion=0.49

参考

DRBDって?

  • DRDBじゃないです、DRBDです。
  • DRBD(Distributed Replicated Block Device)はネットワークを介して、ハードディスクなどのブロックデバイスをリアルタイムにレプリケート可能なオープンソースソフトウェアです。
  • 最新~~(といっても、この原稿を書いているときは開発版ですが)~~(リリースはされているが、stableではなく、まだDevelopment branchで開発が進められている状態でした)のバージョンであるDRBD9は多ノードレプリケーションに対応するなど、新機能が盛り込まれています。
  • DRBD9と同時開発で、DRBDの管理が格段に楽になるdrbdmanageも公開されています。

導入環境

  • CentOS7.0系(64bit)
  • HDDを2枚持つ仮想マシン
  • drbd9-01,drbd9-02,drbd9-03の三台でクラスタを構成
  • ここで出てくるマシン名(drbd9-01等)は uname -n で出力されたもの
  • drbd9-01のipアドレス: 10.255.10.11
  • drbd9-02のipアドレス: 10.255.10.12
  • drbd9-03のipアドレス: 10.255.10.13

前準備

すべてのノードで行う

  1. 必要なパッケージを取得

     # yum update
     # yum groupinstall "Development Tools"      (任意)
     # yum install -y wget
     # yum install -y libxslt pygobject2 help2man
     # yum install -y kernel-headers		(入っているかの確認)
     # reboot
    
  2. 必要なソースを持ってくる

  • DRBD kernel module

      $ git clone --recursive git://git.drbd.org/drbd-9.0.git
    
  • DRBD utilities

      $ wget http://oss.linbit.com/drbd/drbd-utils-8.9.3.tar.gz
    

gitは現状無いためソースを直接取りに行く

  • drbdmanage

      $ git clone --recursive http://git.drbd.org/drbdmanage.git
    
  • 注意点

    • drbdmanageはpythonの2系が必要
    • kernel-headers が必要になるので、インストールされているか必ず確認する(Development Toolsで大体は入っているはず)

DRBD9のインストール

すべてのノードで行う

  • DRBD kernel module

      $ cd drbd-9.0
      $ sudo make
      $ sudo make install
    

makeができないときはmake KDIR=/lib/modules/.../build とする

  • DRBD utilities
    drbdadmなどのコマンドが入る

      $ tar zxvf drbd-utils-8.9.3.tar.gz
      $ cd drbd-utils-8.9.3
      $ ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc 
      $ make
      $ sudo make install
    
  • drbdmanage
    注意:DRBD utilitiesをインストール後に実行する

      $ cd drbdmanage	
      $ make
      $ sudo make install
    
  • 確認
    drbdadam コマンド,drbdmanage コマンドが入っていることを確認

パーティションの設定

sdbはdrbd用に用意した二枚目のハードディスクデバイス

# fdisk /dev/sdb
    コマンド (m でヘルプ): n			       → 新たに領域を作成
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): p			→ primaryで作成
    パーティション番号 (1-4, default 1): 1	        → これでsdb1という名称のパーティションが作られる
    最初 sector (2048-33554431, 初期値 2048):	                      → default(Enterを押す)
    初期値 2048 を使います
        Last sector, +sectors or +size{K,M,G} (2048-33554431, 初期値 33554431):	→ default(Enterを押す)
    初期値 33554431 を使います
    Partition 1 of type Linux and of size 16 GiB is set

    コマンド (m でヘルプ): w		→ ディスクに書き込み、終了
    パーティションテーブルは変更されました!

    ioctl() を呼び出してパーティションテーブルを再読込みします。
    ディスクを同期しています。

/dev配下にsdb1ができていることを確認

  • 物理ボリューム(Physical Volume:PV)の作成

      # pvcreate /dev/sdb1
    
  • ボリュームグループ(Volume Group:VG)の作成

      # sudo vgcreate drbdpool /dev/sdb1
    
    • VGの名称である 「drbdpool」は drbdmanager で使用するデフォルト名なので変更しない

drbdmanageによるリソースのデプロイ

  • すべてのノードで行う

    • drbdmanageで使用するデフォルトのポートを開ける
    • 作成したボリュームは、デフォルトだと7700番ポートから順番に昇順で確保される

ここではコマンドを叩くことでポートを開ける方法と、設定ファイルを作成してポートを開ける方法の2種類を示す

1.コマンドだけで終わらせる方法

# firewall-cmd --add-port=6999/tcp --zone=public --permanent
# firewall-cmd --reload
# firewall-cmd --add-port=7700-7800/tcp --zone=public --permanent
# firewall-cmd --reload

2.設定ファイルを作成する方法

# cd /etc/firewalld/services/		
    # vi drbdmanage.xml
    # firewall-cmd --reload
    # firewall-cmd --add-service=drbdmanage --zone=public --permanent
    # firewall-cmd --reload
  • 注意:super userになっていないとfirewalld以下のディレクトリは見えません

  • 設定ファイル例(drbdmanage.xml)

    <?xml version="1.0" encoding="utf-8"?>
    <service>
      <short>drbdmanage</short>
        <description>Drbdmanage is configuration management tool for drbd. 6999 port is used for the control volume "drbdctrl" of drbdmanage. This port number is default. You can change these port number yourself.</description>
      <port protocol="tcp" port="6999"/>
      <port protocol="tcp" port="7700-7800"/>
    </service>
    

追記(10/16)

  • drbdmanageのバージョン0.50からは、デフォルトで使用されるポート番号が7000番からになっているので注意してください。

クラスタのinitialize

クラスタ内のノード1台だけで実行(今回はdrbd9-01)

# drbdmanage init 10.255.10.11
    You are going to initalize a new drbdmanage cluster.
    CAUTION! Note that:
      * Any previous drbdmanage cluster information may be removed
      * Any remaining resources managed by a previous drbdmanage installation
        that still exist on this system will no longer be managed by drbdmanage

    Confirm:

      yes/no: yes
      Failed to find logical volume "drbdpool/.drbdctrl"
      Logical volume ".drbdctrl" created.
    initializing activity log
    NOT initializing bitmap
    Writing meta data...
    New drbd meta data block successfully created.
    empty drbdmanage control volume initialized.
    Operation completed successfully
  • 追記
    10/6に最新版で実行したところ、drbdpool内に作成されるdrbdctrlファイルが".drbdctrl_0"と".drbdctrl_1"の2つが作成されていた。
    調べたところ、gitのlogに、Implemented dual-redundant drbdmanage control volume と書いてあった、おそらくこいつが原因。

クラスタにノードを追加

クラスタ内のノード1台だけで実行(今回はdrbd9-01)

# drbdmanage add-node drbd9-02 10.255.10.12
        Operation completed successfully
        Operation completed successfully
        Host key verification failed.

        Join command for node drbd9-02:
        drbdmanage join -p 6999 10.255.10.12 1 drbd9-01 10.255.10.11 0 SecretKey
  • 追加したいノードで実行するコマンドが表示される
  • 同様にdrbd9-03もadd-nodeする

ノードのJoin

drbd9-02で実行

# drbdmanage join -p 6999 10.255.10.12 1 drbd9-01 10.255.10.11 0 SecretKey
  • drbd9-03も同様にadd-node時に表示されたコマンドを実行する

クラスタの状態確認

# drbdmanage list-nodes		(list-nodeはnに省略可能)
    +------------------------------------------------------------------------------+
    | Name     | Pool Size | Pool Free |                                   | State |
    +------------------------------------------------------------------------------+
    | drbd9-01 |     16380 |     16376 |                                   |    ok |
    | drbd9-02 |     16380 |     16376 |                                   |    ok |
    | drbd9-03 |     16380 |     16376 |                                   |    ok |
    +------------------------------------------------------------------------------+

# drbdsetup status
    .drbdctrl role:Secondary
      disk:UpToDate
      drbd9-01 role:Secondary
        peer-disk:UpToDate
      drbd9-02 role:Secondary
        peer-disk:UpToDate
  • UpToDateではなくConectingになっている場合はportの開け忘れ、もしくは同期がうまくいっていない可能性がある
    • 前者の場合はportが空いているかチェック
    • 後者の場合はdrbdmanage update-pool もしくは、drbdmanage n を実行してみる

リソース・ボリュームの作成とデプロイ

  1. リソースの確保
    ここでコマンドでリソースが使用するポートを選択できる

     # drbdmanage add-resource backups
    
  2. リソース内に新しいボリュームを作成
    この時使用するボリュームのサイズを指定する

     # drbdmanage add-volume backups 5GB
    
  3. リソースをデプロイするクラスタ数を定める

     # drbdmanage deploy-resource backups 3
    

別のデプロイ方法

  • ボリュームの確保からデプロイまで一回で行う

      # drbdmanage add-volume backups 5GB --deploy 3
    
  • 割り当てを一つずつ行う
    add-volumeした後デプロイ先を手動で選ぶことが可能

      # drbdmanage add-resource backups
      # drbdmanage add-volume backups 5GB
      # drbdmanage assign-resource backups drbd9-01
      # drbdmanage assign-resource backups drbd9-02
    

portの確認

すべてのノードで行う

ボリュームが使用するポートの確認

# drbdmanage list-volumes --groupby Size --show Port
    +------------------------------------------------------------------------------+
    | Name    | Vol ID | Size | Minor | Port |                             | State |
    +------------------------------------------------------------------------------+
    | backups |      0 | 2861 |    10 | 7700 |                             |    ok |
    +------------------------------------------------------------------------------+

もしポートが空いていなければ

# firewall-cmd --add-port=7700/tcp --zone=public --permanent
# firewall-cmd --reload

ファイルシステム作成とマウント

# drbdmanage list-volumes --groupby Size --show Port
    +------------------------------------------------------------------------------+
    | Name    | Vol ID | Size | Minor | Port |                             | State |
    +------------------------------------------------------------------------------+
    | backups |      0 | 2861 |    10 | 7700 |                             |    ok |
    +------------------------------------------------------------------------------+
# mke2fs -j /dev/drbd10           (上の表でMinorが10になっているのでdrbd10にファイルシステムを作成する)
# mkdir -p /mnt/drbd/backups
# mount /dev/drbd10 /mnt/drbd/backups

ロール切り替えの確認

  • 一言メモ
    • drbd8では、PrimaryとSecondaryの変更を手動で行った後にmountする必要があった
    • drbd9からはmountされているノードが自動的にPrimaryとなる
  1. drbd9-01

     # drbdsetup status
         .drbdctrl role:Secondary
          disk:UpToDate
          drbd9-02 role:Secondary
            peer-disk:UpToDate
          drbd9-03 role:Secondary
            peer-disk:UpToDate
    
        backups role:Primary
          disk:UpToDate
          drbd9-02 role:Secondary
            peer-disk:UpToDate
          drbd9-03 role:Secondary
            peer-disk:UpToDate
     # cd /mnt/drbd/backups
     # なにかファイルを作成
    

2.drbd9-02

# mkdir -p /mnt/drbd/backups
# mount /dev/drbd10 /mnt/drbd
# drbdsetup status
        .drbdctrl role:Secondary
         disk:UpToDate
         drbd9-01 role:Secondary
           peer-disk:UpToDate
         drbd9-03 role:Secondary
           peer-disk:UpToDate

       backups role:Secondary
         disk:UpToDate
         drbd9-01 role:Primary
           peer-disk:UpToDate
         drbd9-03 role:Secondary
           peer-disk:UpToDate

3.drbd9-01

# umount /mnt/drbd/backups

4.drbd9-02

# mount /dev/drbd10 /mnt/drbd/backups
# drbdsetup status
        .drbdctrl role:Secondary
         disk:UpToDate
         drbd9-01 role:Secondary
           peer-disk:UpToDate
         drbd9-03 role:Secondary
           peer-disk:UpToDate

       backups role:Primary
         disk:UpToDate
         drbd9-01 role:Secondary
           peer-disk:UpToDate
         drbd9-03 role:Secondary
           peer-disk:UpToDate

drbd9-01で作ったファイルが見れるか確認

おわりに

  • DRBD9は、ローカルストレージを持たないDRBD Client、データの再配置等の新機能もありますが、それは別記事で紹介したいと思います。
20
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?