Cloudn \ 技術ブログ tech blog

クラウド・エヌの活用方法についてご紹介していきます。
Cloudn Information

前の記事・次の記事

DRBD9とdrbdmanageを使ったスケールアウトできるブロックストレージを構築する

ブログ記事

こんにちは。NTTコミュニケーションズの松本です。

複数のサーバ筐体を使って作る、スケールアウトできるブロックストレージに興味ありませんか?
今回は、DRBD9の新機能と、DRBDの管理を自動化するdrbdmanageを用いたスケールアウトできるブロックストレージを構築してみます。

1.DRBD9とdrbdmanageについて

DRBDlinbit社が開発する複数筐体間のディスクをレプリケーション(ミラーリング)するソフトウェアです。
DRBD8.4以前では、2筐体間のHA構成においてデータを同期するために利用される事が多かったと思います。

DRBD9の新機能とDRBDの管理を自動化するdrbdmanageを用いて、最大32台の筐体でDRBDプールを作り、このDRBDプールから複数のボリュームを作成することができるようになりました。
また、DRBD8.4以前では、データを同期するサーバからのみマウント可能でしたが、ディスクを持たないネットワーク上のサーバからも、DRBD上のボリュームをマウントできるようになっています。

DRBD9とdrbdmanageの特徴については、DRBDの代理店であるサードウェア社技術ブログに詳しい説明がありますのでご覧ください。

2.構築する環境

今回構築する環境は、大きく分けて「ストレージノード」と「アプリケーションサーバ」に分けます。ストレージノードで提供するボリュームを作成し、アプリケーションサーバからマウントする構成となります。

スクリーンショット 2015-08-12 22.57.43

ストレージノード

5台のVMをストレージノードとして構築します。VMに追加ディスクをアタッチし、DRBDの領域として利用します。今回は、3冗長されたvol1とvol2の2つのボリュームを作成します。なお、冗長数はボリューム毎に変える事もできます。

  • ホスト名: drbd9node01〜drbd9node05
  • VM: Cloud(n)Compute 5台
  • サーバプラン: t1.micro
  • 追加ディスク: 40GB
  • OS: CentOS7.1

アプリケーションサーバ

2台のVMをアプリケーションサーバとして構築します。
VMの構成とソフトウェアはストレージノードと同じものを利用します。
自身にはデータを持たず、DRBD9からの新機能であるDRBDクライアント機能を使って、ネットワーク接続されたストレージノードのボリュームをマウントして利用します。

2台のVMはアクティブ/スタンバイ構成を想定しており、vol1ボリュームをマウントして利用します。

Pacemaker などのクラスタ構成ソフトの利用を想定していますが、クラスタソフト構成の設定方法については省略します。

3.クラウド・エヌComputeによるVM作成

今回はクラウド・エヌComputeの東日本リージョンFLATタイプを使いました。VM作成方法は省略しますので、必要に応じてクラウド・エヌComputeのマニュアルを参照して、作成してください。
今回、台数が多いので、まず最初に1台のVMに必要なソフトウェアのインストールし、クラウド・エヌComputeのテンプレート機能を使ってテンプレート化し、テンプレートからストレージノードとアプリケーションサーバを構築する手順とすることで、構築時間を短縮します。

4.ソフトウェアをインストールする

方針

2015年8月6日現在、DRBD9やdrbdmanageのrpmパッケージは存在しないようですので、今回はソースからインストールします。

ソースからのbuildに必要なパッケージのインストール

DRBD9とdrbdmanageをソースからbuildするために必要なパッケージをインストールします。

DRBDソースのダウンロードとインストール

DRBD9のソースはカーネルモジュールであるdrbd-9.0.0、ユーザランドのdrbd-utilsに分かれており、そのほかに管理自動化のためのdrbdmanageも分かれて用意されていますので、これら3つをそれぞれをインストールします。

DRBD9カーネルモジュールをインストールします。

インストール後には以下のように確認します。

drbd-utilsをインストールします。
設定自動化ツールであるdrbdmanageと連携して動作するためには、設定ファイルやバイナリの場所を合わせる必要がありますので、./configureに必要な情報を指定しています。

インストール後には以下のように確認します。

最後にdrbdmanageをインストールします。

インストール後には以下のように確認します。

以上で、DRBD9とdrbdmanageのソフトウェアインストールが完了しました。

5.VMからテンプレートを作成する

VMにdrbd9とdrbdmanageのインストールが終わりました。このVMをテンプレート化します。

6.テンプレートからVMを作成する

このテンプレートを使ってストレージノード5台とアプリケーションサーバ2台の合計7台のVMを作成します。
この際、セキュリティグループ機能を用いて、ストレージノード間の通信はすべて許可しておくと構築時に便利です。drbdmanageは設定ファイル(/etc/drbdmanage.conf)に書かれているmin-port-nrからmax-port-nrの範囲のTCPのポート番号を使ってDRBD9のリソース設定をします。そのため、これらのポートを事前に開けておく必要があります。今回は7700-7899が設定されていました。
また、drbdmanageによるセットアップでは名前解決が必要なので、/etc/hostsに全てのノードの名前情報を記述ください。

7.DRBD9とdrbdmanageを初期セットアップする

設定ファイルの確認

特に変更する必要はありませんが、/etc/drbdmanaged.confがdrbdmanagedの設定ファイルとなります。
drbdmanageにより作成されたDRBD9のリソース設定ファイルは/var/lib/drbd.d以下に置かれますが、初期状態では何も置かれていないことを確認できます。

DRBDプールを作成

DRBDプールはLVMのVGで実現されています。
5台のストレージノード全てで実行してください。ここではdrbdpoolという名前のVGがDRBDプールとなります。なお、drbdpoolとは異なる名前を指定することもできますが、その場合にはdrbdmanageの設定ファイル等の調整が必要となります。

drbdmanageの初期化

5台のストレージノードのうち1台を選んで初期化します。
まずは、DRBDで利用するインターフェースに付与されているIPアドレスを調べます。
Cloud(n)Computeのインターフェースは1つだけですので、この場合eth0の192.0.2.101となります。

IPアドレスを指定して、drbdmanage init を実行することで、管理用のリソースである.drbdctrlが作成されます。

.drbdctrlという管理用リソースが自動的に作成されたことが確認できます。この.drbdctrlはDRBDの管理用に用いられるもので、ボリュームを提供するものではありません。

以下のように管理用の.drbdctrlで使用するLVが自動的に作成されています。

.drbdctrlのリソース設定ファイルも自動的に作成されていることが分かります。

現在のストレージノードの一覧を確認できます。
今のところストレージノードは1台で40GBのDRBDプールサイズであることがわかりますね。

他のストレージノードをDRBDクラスタに追加する

残り4台のストレージノードもDRBDクラスタに追加していきましょう。

まずは初期化した最初のストレージノードで、drbdmanage new-nodeコマンドを実行してください。
追加するストレージノードのホスト名及びIPアドレスを指定して実行すると、DRBDクラスタへ追加するためのコマンドが生成されます。

表示されたコマンドを、追加したいストレージノードで実行してみてください。

以下のようにdrbd9node02がDRBDクラスタに追加されたことを確認できます。

同様の手順で5台すべてののストレージノードをDRBDクラスタに登録すると以下のようになることが確認できます。

8.DRBDクラスタにボリュームを作成する

作成したDRBDクラスタにボリュームを作成していきます。

本来リソースとボリュームは別の概念ですが、今回は1リソースに1ボリュームのみ作成することとしますので、これより以下はリソース=ボリュームとして扱います。

下記の例は、vol1という名前で10GBのボリュームを作成します。この際、3冗長を指定することで、3つの筐体で同一のデータをレプリケーションすることができます。

現在はボリュームがないことが分かります。

ボリュームを作成します。DRBD8.4までは手動でdrbdの設定ファイル作成や適用、初期同期をしていたのですが、DRBD9ではdrbdmanageを使うことでコマンド1つでできるようになりました。

vol1という名前でボリュームが作成されたことを確認できます。

10GBのボリュームを3冗長で作成しましたので、drbd9node01/drbd9node02/drbd9node03それぞれの筐体のPool Freeが10GB減っていることが確認できます。

DRBD8.4まではcat /proc/drbdでDRBDの状態確認ができていましたが、DRBD9からはcat /proc/drbdでは多くの情報を出さなくなりました。DRBD9からはdrbdadm statusを利用するのが良さそうです。
下記では、.drbdctrlという管理用リソースと、先ほど作成したvol1のリソース(ボリューム)が表示されていることがわかります。
初期同期中ですので、ステータスはInconsistent状態となっています。
なお、2.40や2.68といった数字は、初期同期の進捗状況を示しています。しばらく待てば、ステータスがInconsistentからUpToDateに変わることが確認できます。

さて、もう一つボリュームvol2を作成してみましょう。

vol2が新しく作成されていることがわかります。

以下のようにvol2が作成された分だけPool Freeが減っていることが確認できます。

 

9.DRBDクライアントを使ってアプリケーションサーバからマウントする

次はDRBDクライアント機能を使ってみましょう。
この機能は、ネットワーク上のサーバから、DRBDのボリュームを外部ストレージのように使うことができるものです。

drbdmanageによりDRBDクライアントを扱う方法はマニュアルにはまだ書かれていないようですが、DRBDクラスタにディスクレスノードとして追加し、ボリュームをアサインすることで利用可能なようです。

手順を示します。

アプリケーションサーバをDRBDクラスタへ追加

DRBDクラスタに追加する前の状態を確認します。

全てのノードがSecondaryであることを確認します。もし、プライマリになっているノードがいたら、アンマウントしてセカンダリに降格しておいてください。

ディスクレスノードとしてdrbd9app01をDRBDクラスタに追加します。drbdmanage new-nodeには-sオプションがあり、これを使ってディスクレスノードをDRBDクラスタに追加できます。

ディスクレスノードではPool sizeとPool Freeがunknownとなり、stateもno strageとなっていることが確認できます。

ディスクレスノードであるdrbd9app01をDRBDクラスタに追加できたら、次にvol1をdrbd9app01にアサインします。この際、–clientを指定することで、drbd9app01をDRBDクライアントとして利用できるようになります。

アサインされたことを確認しますと、Stateがclientとなっていることを確認できます。

マウントして利用する

リモートのボリュームであるvol1をマウントして利用してみます。

DRBD8.4まではDRBDをプライマリに昇格したあとにマウントする必要がありましたが、DRBD9からは自動プロモーション機能により、マウントするだけで自動的にプライマリへ昇格しますので、明示的な昇格は不要です。アンマウントするとSeconderyに降格します。なお、明示的な昇格もできますが、自動プロモーション機能は働かなくなり、アンマウントしても降格できなくなりますのでご注意ください。

 

マウントする対象デバイスを確認します。Minorが10と表示されていれば、/dev/drbd10が対象デバイスとなります。

CentOS6はext4がデフォルトのファイルシステムとなっていましたが、CentOS7からはxfsがデフォルトのファイルシステムとなっていますので、今回はxfsでファイルシステムを作成しましょう。

ファイルシステムが作成できたら/dev/drbd10を/vol1にマウントします。

10.DRBDクライアントをもう一台追加する

冗長化のために、2つ目のアプリケーションサーバをDRBDクラスタへ追加します。

vol1をDRBDクライアントとしてアサインします。

2台目もDRBDクライアントとしてDRBDクラスタへ追加されたことがわかります

なお、まだdrbd9app01がvol1をマウントしたままなので、drbd9app02でvol1をマウントしようとしてみても、マウントできません。

11.まとめ

今回は、DRBD9の新機能とDRBDの管理を自動化するdrbdmanageにより、5台のストレージノードで構成するDRBDストレージプールを作成し、アプリケーションサーバからDRBDクライアント機能によりマウントして使えることを確認しました。

ノードの追加や、ノード追加後のデータのリバランスについては、drbdmanageでどのように操作すれば良いのかまだ確認できていませんが、マニュアルがもう少し充実してきたら試してみたいと思います。

 

参考

linbit:

https://www.linbit.com/en/

DRBD9マニュアル:

http://drbd.linbit.com/users-guide-9.0/drbd-users-guide.html

株式会社サードウェア:

https://www.3ware.co.jp

サードウェア技術ブログ:

https://blog.3ware.co.jp/category/feature-drbd9/page/2/

 

※本記事の内容は、Cloudnの活用方法の一例を示したものであり、お客様の環境・構成において動作することをお約束するものではありません。 従いまして、本記事の内容によって生じたトラブルや損害についても、弊社では責任を負いかねますのでご了承ください。
また、本記事の内容に関してのサポートは行っておりませんので、予めご了承ください。

ブログフッダ

投稿日:

カテゴリ:

前の記事・次の記事

サイドニュー

カテゴリー

最近の記事

バックナンバー