DRBDを久しぶりに使うエンジニア酒井です。どれくらい久しぶりかというと、6〜7年ぶりくらいで当時はDRBD8系でした。今回AWS環境内でDRBD9を深淵な理由で使う機会があったのでその検証で躓いた点などを書きたいと思います。
DRBD9全般については以下参照下さい。
0. DRBDを実行する検証環境について
- AWS環境
- CentOS 7(CentOS 7 (x86_64) – with Updates HVM AMI)
- ストレージサーバ2台構成(test-storage01 / 172.16.0.101、test-storage02 / 172.16.0.102)
- 各サーバにストレージ用のEBSとして/dev/xvdba (10GB)、/dev/xvdbb (10GB)をアタッチ
1.インストールについて
インストールは、以下の参考URLを見るとざっくり分かった気になります。
参考URL:
DRBDをCentOS7.2で構築するメモ (https://qiita.com/suzutan/items/f1ec0d91a5ef2ca39ab8)
ELRepo Project (http://elrepo.org/tiki/tiki-index.php)
【DRBD9】rpmパッケージをビルドしてインストールする (https://www.lancard.com/blog/2017/08/30/drbd9-rpm%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%92%E3%83%93%E3%83%AB%E3%83%89%E3%81%97%E3%81%A6%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/)
今回、インストールついてはelrepoのパッケージを使って検証しています。
elrepoにdrbdmanageが無いので、その部分だけ手元のvagrantでrpmパッケージを作成してrpm管理にまとめてます。
・drbdmanageのrpm作成(vagrant bento/centos-7.4)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ sudo yum install http://ftp.kddilabs.jp/Linux/RPMS/elrepo/elrepo/el7/x86_64/RPMS/elrepo-release-7.0-3.el7.elrepo.noarch.rpm $ sudo yum install drbd90-utils rpmdevtools git libxslt pygobject2 help2man $ git clone https://github.com/LINBIT/drbdmanage.git $ cd drbdmanage $ vi setup.cfg --- drbd-utils >= 8.9.9 ↓ drbd90-utils >= 8.9.9 --- *パッケージの依存ファイル名がelrepoのパッケージを使う関係で違うので修正 $ make rpm *dist/drbdmanage-0.99.14-1.noarch.rpm にパッケージが出来上がる。これをサーバに持っていって利用する |
・各ストレージサーバ2台にパッケージ導入
1 2 3 |
$ sudo yum install http://ftp.kddilabs.jp/Linux/RPMS/elrepo/elrepo/el7/x86_64/RPMS/elrepo-release-7.0-3.el7.elrepo.noarch.rpm $ sudo yum install drbd90-utils kmod-drbd90 lvm2 $ sudo yum install ./drbdmanage-0.99.14-1.noarch.rpm |
2. 初期設定、ストレージリソース登録について
初期設定とストレージリソース登録は、以下の参考URLを見るとなんとなく分かります。
参考URL:
Create a 3 Node DRBD 9 Cluster Using DRBD Manage (https://www.theurbanpenguin.com/create-3-node-drbd-9-cluster-using-drbd-manage/)
DRBD9環境をdrbdmanageを使って簡単構築 #1(インストール編) (http://ksawada.hatenablog.com/entry/2016/06/10/111030)
DRBD9環境をdrbdmanageを使って簡単構築 #2(構築編) (http://ksawada.hatenablog.com/entry/2016/06/13/154411)
簡単にできるDRBD9環境構築 (https://qiita.com/ksawada1979/items/1fa59f1945e4853dde11)
・DRBD設定準備 test-storage01
1 2 3 4 5 6 7 8 9 10 |
$ sudo hostnamectl set-hostname test-storage01 $ sudo vi /etc/hosts --- test-storage01 172.16.0.101 test-storage02 172.16.0.102 --- *ホスト名を追記 $ sudo pvcreate /dev/xvdba $ sudo vgcreate drbdpool /dev/xvdba |
・DRBD設定準備 test-storage02
1 2 3 4 5 6 7 8 9 10 |
$ sudo hostnamectl set-hostname test-storage02 $ sudo vi /etc/hosts --- test-storage01 172.16.0.101 test-storage02 172.16.0.102 --- *ホスト名を追記 $ sudo pvcreate /dev/xvdba $ sudo vgcreate drbdpool /dev/xvdba |
・DRBD初期設定(DRBD管理領域の作成)test-storage01
1 2 3 4 5 |
$ sudo drbdmanage init 172.16.0.101 *drbdmanage control volumeが作られる $ sudo drbdmanage add-node test-storage02 172.16.0.102 *drbdmanage join -p 6999 172.16.0.102 1 test-storage01 172.16.0.101 0 JaJnjkegI07AFmMF3OL7 のように test-storage02で実行して管理に参加するための情報が表示される |
・DRBD初期設定(DRBDクラスタへの参加・管理領域同期) test-storage02
1 2 3 4 5 6 7 8 9 10 11 12 |
$ sudo drbdmanage join -p 6999 172.16.0.102 1 test-storage01 172.16.0.101 0 JaJnjkegI07AFmMF3OL7 *Waiting for server to start up (can take up to 1 min)みたいなメッセージが出た後、Operation completed successfullyとなって完了 $ drbdsetup status .drbdctrl role:Secondary volume:0 disk:UpToDate volume:1 disk:UpToDate test-storage01 role:Primary volume:0 peer-disk:UpToDate volume:1 peer-disk:UpToDate *drbdmanageで管理する設定情報の詰まった .drbdctrl 領域が作成されて、各サーバで同期されている状態になる |
・ストレージリソースの登録 test-storage01
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
$ sudo drbdmanage list-nodes +----------------------------------------------------------+ | Name | Pool Size | Pool Free | | State | |----------------------------------------------------------| | test-storage01 | 10236 | 10228 | | ok | | test-storage02 | 10236 | 10228 | | ok | +----------------------------------------------------------+ $ sudo drbdmanage add-resource r0 $ sudo drbdmanage add-volume r0 1000M $ sudo drbdmanage deploy-resource r0 2 $ sudo drbdmanage list-volumes --show Port +-----------------------------------------------------------+ | Name | Vol ID | Size | Minor | Port | | State | |-----------------------------------------------------------| | r0 | 0 | 1000 MiB | 100 | 7000 | | ok | +-----------------------------------------------------------+ $ sudo drbdmanage list-nodes +---------------------------------------------------------+ | Name | Pool Size | Pool Free | | State | |---------------------------------------------------------| | test-storage01 | 10236 | 9224 | | ok | | test-storage02 | 10236 | 9224 | | ok | +---------------------------------------------------------+ $ drbdsetup status .drbdctrl role:Primary volume:0 disk:UpToDate volume:1 disk:UpToDate test-storage02 role:Secondary volume:0 peer-disk:UpToDate volume:1 peer-disk:UpToDate r0 role:Secondary disk:UpToDate test-storage02 role:Secondary peer-disk:UpToDate * 追加したr0リソースが同期状態になっている |
3. その他
以上までが、DRBD9で検索するとすぐに分かる範囲ですんなりいく部分です。ようやく以下が本記事の内容になります。
・drbdmanagedとdrbdのサービス起動をどうしておくか
・drbdmanageコマンドで取得できるリソース情報と実際の利用サイズが不一致になってしまった
・2台構成だと.drbdctrl領域のPrimary権限を自動昇格してくれない
・既存リソースにストレージを追加拡張するのはどうすればいいか
・サーバを差し替えて、復帰させるにはどうすればいいか
・バックアップのAMIから複製して、サービスを再開するにはどうすればいいか
前置きが長くなったので分割。「DRBD9を崩したり再構築してみよう」