この記事はFJCTアドベントカレンダー2018の19日目の記事です。
昨日は@kzmakeさんの「いくつかのWebフレームワークのベンチマークを雑にとってみた」でした。
FJCT でインフラエンジニアをしている樋口です。
普段は主に IaaS の仮想化基盤を運用をしています。 その中でログの管理には Elasticsearch を利用しています。
今回は、ニフクラ上で Elastic Cloud Enterprise(以降、 ECE と書きます) を動かしてみました。
ECE は Elasticsearch のクラスタを簡単に管理できる SaaS である Elastic Cloud をオンプレミスやクラウド上で展開できる製品です。
マルチサイトでレプリカを取得する機能、オブジェクトストレージ上にバックアップを取るスナップショット機能や、 2.0 からの機能である性能の違うディスクを効率的に利用できる Hot Warm 構成を試したので紹介します。
1台インストールする
必要なリソースや、OS 上の設定はこちらに記載があります。 今回は動作検証をしたかったので最低限必要な 8GB RAM が確保できる small16 を利用します。
以下のサーバーを作成しました。
- タイプ: small16
- ゾーン: east-11
- OS: Ubuntu 16.04 64bit Plain
以下の追加ディスクを作ります。
- タイプ: 標準ディスク
- ゾーン: east-11
- サイズ: 100GB
事前の設定は、ドキュメントの記載通りに実施しました。
ECE をインストールします。 availability-zone は jp-east-11
にサーバーを作成したので jp-east-11
という名前をつけました。
bash <(curl -fsSL https://download.elastic.co/cloud/elastic-cloud-enterprise.sh) install \ --availability-zone jp-east-11
インストールが成功すると以下のようなメッセージが出てきます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Elastic Cloud Enterprise installation completed successfully Ready to copy down some important information and keep it safe? To access the Cloud UI: http://xx.xx.xx.xx:12400 https://xx.xx.xx.xx:12443 Admin username: admin Password: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx . . .
後ほど利用するようなのでメモしました。
Cloud UI から動作確認
先程のメッセージに記載されている Cloud UI に接続します。
先程メモした Admin のユーザー名とパスワードでログインします。 このような画面が表示されます。
ECE では Elasticsearch クラスタを Deployment という単位で管理します。 Deployment を試しに作ってみます。 Create Deployment をクリックすると以下の画面になります。
標準的な構成で良ければ、名前を入力して Create deployment を選択するだけで Elasticsearch のクラスタがデプロイされます。
実際に実行ししばらくしたところクラスタが作成され、以下のような画面にになります。 この画面のログイン情報は Kibana を設定することで出来ます。
Elasticsearch と Kibana が構築されました。
Beats でニフクラサーバーの情報を取得
ニフクラのサーバーの情報を Elasticsearch に送りたいと思います。 サーバーの様々なメトリックを取得する Metricbeats を利用します。 こちらのドキュメントの通り beats をインストールします。
/etc/metricbeat/metricbeat.yml
を編集します。
ECE には Kibana と Elasticsearch を簡単に設定できる Cloud ID
という仕組みがあるのですが、今回は直接 Kibana と Elasticsearch の情報を入力します。
(URL や ログイン情報は ECE の Cloud UI から Deployments の画面で確認できます)
#============================== Kibana ===================================== setup.kibana: host: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.NN.NN.NN.NN.ip.es.io:9244" #-------------------------- Elasticsearch output ------------------------------ output.elasticsearch: # Array of hosts to connect to. hosts: ["YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY.NN.NN.NN.NN.ip.es.io:9244"] username: "elastic" password: "xxxxxxxxxxxxxxxxxxxxxxxxxx"
これらの設定をすると、サーバーのメトリックの送信が始まるだけではなく、 Kibana や Elasticsearch のテンプレートも自動で設定されます。 以下のような情報が取れるようになりました。
Snapshot 機能を使ってニフクラオブジェクトストレージにバックアップを取る
Elasticsearch には Snapshot 機能を使ってバックアップを取ることができます。 バックアップ先には、Amazon S3 などのストレージが指定できます。 ニフクラのオブジェクトストレージは Amazon S3 の API に互換しているので利用が可能です。 ECE の Cloud UI から Snapshot の設定が出来るので試してみました。
ニフクラのオブジェクトストレージでバケットを作成します。
今回は ece-snapshot-01
というバケットを作成しました。
ECE 全体の設定は Cloud UI の Platform という画面から設定できます。 今回は Platform > Repositories から Add Repository を選択します。
Repository Type を Advanced に変更し以下のような内容を設定します。 (オブジェクトストレージのエンドポイントはこちらから、アクセスキーはこちらから調べます。)
{ "type": "s3", "settings": { # バケット名 "bucket": "ece-snapshot-01", "endpoint": "jp-west-1.storage.api.nifcloud.com", "access_key": "XXXXXXXXXXXXXXXXXXXXXXX", "secret_key": "XXXXXXXXXXXXXXXXXXXXXXX" } }
実際の画面です
先程作成した Deployment に Snapshot の設定をします。
スナップショットの取得間隔設定や、取得したスナップショットの管理ができます。
実際にニフクラオブジェクトストレージ上にスナップショットが作成されました。
取得したスナップショットは、 Cloud UI からリストアしたり、新規 Deployment 作成時に利用することができるようです。
東西レプリケーション
East リージョンに ECE を立てることが出来たので West リージョンにも ECE を立てて Fault Tolerance 構成を取れるようにします。
jp-west-13 に先程と同じ構成のサーバーを構築します(ドキュメントを参考に東西の ECE ノードが連携できるようにファイアウォールルールを追加する必要があることに注意してください)。
以下のコマンドでインストールします。availability-zone として jp-west-13
という名前をつけました。--role-token
は1台目をインストールしたときの出力に記載されている値を利用します。
bash <(curl -fsSL https://download.elastic.co/cloud/elastic-cloud-enterprise.sh) install \ --coordinator-host xx.xx.xx.xx \ --roles-token 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \ --availability-zone jp-west-13
追加したノードは Cloud UI から Platform > Runner の画面で確認できるようになります。
追加した Runner にロールを追加します。Runner を選択後 Update roles のリンクを選択します。 Runner にロールを割り当てる画面が表示されます。 今回は allocator を選択します。
Alocator としても確認できるようになりました。
先程の Deployment を Edit して 2 zone 利用する設定にします。Elasticsearch, Kibana ともに 2 zone に設定しました。
これで、どちらのエンドポイントでも Kibana や Elasticsearch に接続できるようになります。 また、 シャードのレプリケーションの設定ができるようになったため、片方のノードが落ちても動作し続けます。
今回2ゾーンまでしか試していませんが、3ゾーン以上で冗長化することも可能なようです。
SSD を搭載したアロケーターノードの追加し、 Hot Warm 構成を試す
新しいドキュメントを追加するためには IO が多く発生するためフラッシュドライブが適しています。 新しいドキュメントが発生せず検索が主な用途になる場合は標準ディスクが適しています。 Elasticsearch には前者に適したノードを Hot ノード、後者を Warm ノードと呼び、 性能が違うディスクを効率よく利用する Hot-Warm 機能というものがります。 ECE もバージョン 2.0 からこの機能を利用できるようになったので試します。
jp-east-11 に先程と同じスペックのサーバーを作成します。 追加ディスクとして標準ディスクではなく、 フラッシュドライブを選択します。
- タイプ: フラッシュドライブ
- ゾーン: east-11
- サイズ: 100GB
以下のコマンドを実行します
bash <(curl -fsSL https://download.elastic.co/cloud/elastic-cloud-enterprise.sh) install \ --coordinator-host xx.xx.xx.xx \ --roles-token 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \ --availability-zone jp-east-11
先程と同様に Cloud UI から 今回追加した Runnner に Allocator のロールを設定します。
Hot Warm 構成は、 data.highstorage
のインスタンスを Hot ノードに、 data.default
のインスタンスを Warm ノードとして扱います(Templates > Deployment Templates > Hot-warm から確認できます)。
インスタンスは Allocator に付与されたタグにより、どの Allocator 上でプロビジョニングするか制御できます。
今回は Allocator に設定された highstorage
というタグが True なら data.highstorage
、 False なら data.default
になるように設定します。
Allocators を選択し、フラッシュドライブを設定した方にタグを highstorage: False
とつけます。
同様に、標準ディスクを設定した方にもタグを highstorage: True
とつけます。
Template > data.highstorage > Edit Instance Configuration で highstorage: True
のタグがあるものだけをフィルタします。
同様に Template > data.default > Edit Instance Configuration で highstorage: False
のタグがあるものだけをフィルタします。
以下の画像の用に Allocator を絞り込むことが出来ます。
Deployment から Hot-Warm を選択して構築します。
Hot-Warm 構成を取るインデックスの指定をします。
この設定をすることで当日分のインデックスが Hot ノード上に作成され、 翌日以降のインデックスが Warm ノードに移動されるようになります。
まとめ
ECE を利用して Elasticsearch クラスタの管理を簡単にすることが出来ました。
今回紹介できませんでしたが、インターネットアクセスができないプライベートネットワークのみの環境でも構築が可能だというメリットもあるようです。 ぜひ、ニフクラ上で ECE を試してください。
また本日弊社の勉強会会場 NIFcLoungeで 第27回Elasticsearch勉強会「LT&忘年会」2018.12を開催いたしますのでぜひご参加ください。
明日は、 @egoa56 さんの「サーバログイン時にエモい画像を出して煽り駆動開発してみた話」です。楽しみですね。