ELK Stack+ DRBD + Pacemaker + NFSで冗長化システムを作ってみた


ElasticsearchのDB保存先がストレージサーバ2台しかない時にどうしようかと思いPacemaker + DRBDで冗長構成のNFSストレージサーバを作って問題無くElasticsearchのDBが保存されるか検証してみました。

TL;TD

  • Elasticsearchのクラスタは最低3台以上で組まなくてはいけないですが、DBを保存するストレージサーバが2台しかない場合、DRBDとPacemakerを使ってネットワークミラーリングをするストレージクラスタを構築し使用することにします。
  • ElasticsearchはNFSをマウントしてDBを保存する事としますが、障害時に切り替わった場合スイッチした側のNFSサーバへ自動でマウントするようにします。
  • ようは、ElasticsearchのDBを保存するストレージサーバが2台しかない時の力技対処法です。

環境

項目 バージョン
OS CentOS 7.5
drbd 9系
pacemaker 1.1.19-8.el7_6.1
pcs 0.9.165-6.el7

構成図

ホスト名 役割
drbd0 DRBDでストレージを同期しPacemakerで冗長化されたNFSサーバ
drbd1 DRBDでストレージを同期しPacemakerで冗長化されたNFSサーバ
elaskibana ElasticsearchとKibanaがインストールされたホスト
logstash Logstashがインストールされたホスト

前提条件

動作確認が目的のためセキュリティは意識しません。

  • firewalldは無効化しています。
  • SELinuxは無効化しています。
  • hostsに以下の設定がしてあることを前提とします。

同期パーティション作成

ElasticsearchのDBを保存するためのパーティションを作成します。
ここでは /dev/sdb1 を作成します。
以下の手順を drbd0drbd1 で実施してください。

DRBDインストール・設定・起動

DRBDのインストールをします。
以下の手順でRPM化したDRBDを使用します。

DRBDインストール

drbd0 drbd1 に対してDRBD関連パッケージをインストールします。

DRBD設定

DRBDの設定をします。
以下の設定ファイルを drbd0 drbd1 にしてください。

drbd0drbd1 でDRBDのメタデータを作成します。

drbd0drbd1 でdrbdを起動します。

片方ホストのdrbdを起動すると、もう片方のdrbdが起動するまで待ちます。そのため、プロンプトは対向のdrbdが起動するまで戻ってきません。

DRBDの同期

DRBDの初期同期をします。
これは片方のホストで実施します。
ここでは drbd0 で実施します。

ステータスを確認します。

初回のステータス確認時のみ長い改行と共に –== Thank you for participating in the global usage survey ==– が表示されます。

完全に同期が完了すると以下のようになります。

drbd0デバイスのフォーマット

ここでは、作成した/dev/drbd0をXFSでフォーマットします。

これで、/dev/drbd0をマウントできるようになりました。

NFSインストール・設定

NFSインストール

drbd0 drbd1 に対してNFS関連パッケージをインストールします。

NFS設定

NFSの設定をします。
以下のディレクトリと設定ファイルを drbd0 drbd1 にしてください。
ここでは /elasticsearch ディレクトリをNFSで共有させます。
作成した /elasticsearch はelasticsearchユーザーが書き込めるようにパーミッションを変更します。

もしNFSマウント切り替えで Stale file handle のエラーが出た場合 fsid を合わせてください。設定がなくてもpacemakerでdrbdの冗長化構成を取っている場合は出ないと思いますが念のためここでは設定を入れておきます。

Pacemakerインストール・設定・起動

Pacemakerインストール

drbd0 drbd1 にpacemakerに関するパッケージをインストールします。
ビルドして作成したdrbdに関するpacemakerパッケージもインストールします。

Pacemaker設定

drbd0 drbd1 でPacemakerを起動します。

drbd0 drbd1 でpacemakerのステータス確認用アカウントのパスワードを設定します。

pacemaker clusterの認証設定をします。
この手順は片方のホスト(ここではdrbd0)でやればいいです。

pacemaker clusterを構築します。ここでは、cluster名は nfs_cluster とします。
この手順は片方のホスト(ここではdrbd0)でやればいいです。

clusterの構築が完了したら起動します。
この手順は片方のホスト(ここではdrbd0)でやればいいです。

clusterのステータスを確認します。

Onlineに drbd0 drbd1 のノードが表示されていることを確認します。

次にいくつか不要なプロパティを無効化します。
この手順は片方のホスト(ここではdrbd0)でやればいいです。

  • stonith-enabled
    • stonithはスプリットブレイン対策でIPMI経由でサーバを停止させる機能ですが、仮想VMでは使わないので停止します。
  • no-quorum-policy
    • ディスクを使って生存チェックはしないので無効化します。
  • resource-stickiness
    • 自動フェイルバックさせないように INFINITY に設定します。

各種プロパティは以下を参照してください。(現状、RHEL6のページの方が日本語化されています。)


cibファイル作成

clusterに設定を直で入れ込むのでは無く一旦CIBファイルを作成してから一気に設定を流し込みます。
一旦、現状のcluster設定を出力します。
この手順は片方のホスト(ここではdrbd0)でやればいいです。

ここでは最低限動作する設定しかしないので、適切な設定は環境に合わせて設定を変更してください。

DRBDリソースエージェント設定

DRBDの監視設定を追加します。

DRBDを両方のノードで実行できるように追加のリソースを設定します。

ファイルシステムマウントリソースエージェント設定

/dev/drbd0/elasticsearch ディレクトリにマウントするようにします。

NFSサーバリソースエージェント設定

VIPリソースエージェント設定

起動順番設定

DRBDが起動してからファイルシステムをマウントするようにする。

リソースグルーピング設定

ファイルシステムマウントとNFSサーバとVIPのリソースエージェントをグルーピングして同じホストで動作するようにします。
また、マスター側のDRBDでグループが動作するようにconstraintで設定を追加します。

ステータスを確認します。

Elasticsearch・Kibanaインストール・設定・起動

Javaインストール

elaskibana にElasticsearchとKibanaで必要なJavaをインストールします。

Elasticsearchインストール

elaskibana にElasticsearchをインストールします。
インストールは以下のページを参考にしてください。

Elasticsearch設定

Elasticsearchの設定をします。

Kibanaインストール

elaskibana にKibanaをインストールします。
インストールは以下のページを参考にしてください。

Kibana設定

Kibanaの設定をします。

NFSインストール

elaskibana でNFS共有ボリュームをマウントするためにNFSをインストールします。

NFSマウント・設定

NFSのマウントをします。

OS再起動時にも自動でマウントするようにします。

Elasticsearch起動

Elasticsearchを起動します。

Kibana起動

Kibanaを起動します。

ブラウザからKibanaへアクセスして問題無く表示されることを確認します。
ここでは http://192.168.0.133:5601 です。

Logstashインストール・設定・起動

logstash にElasticsearchとKibanaで必要なJavaをインストールします。

Logstashインストール

logstash にLogstashをインストールします。
インストールは以下のページを参考にしてください。

Logstash設定

今回はテストとして /opt/example.txt と言うファイルを読み込んで追記された文字列をElasticserachへ送信する簡単な設定にしてみようと思います。

テスト用ファイルを作成します。

Logstash起動

Logstashを起動します。

テスト

テスト内容 結果
example.txtに文字列を出力してElasticsearchに取り込まれる
NFSサーバが切り替わっても自動切り替えマウントが実行される
NFSサーバ切り替え後にeaxmple.txtに出力された文字列が取り込まれる
一旦clusterを停止してexample.txtに文字列を出力して再度clusterを起動して状態を復旧させてもログ欠けしないこと

最後のテストは2重取り込みがあった

参考文献





付録

今回使ったPacemakerのCIB例です。

Leave a Reply

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください