FJCT Tech blog

富士通クラウドテクノロジーズ公式エンジニアブログです

富士通クラウドテクノロジーズ

FJCT/Tech blog

NIFCLOUD で Elastic Cloud Enterprise

この記事はFJCTアドベントカレンダー2018の19日目の記事です。
昨日は@kzmakeさんの「いくつかのWebフレームワークのベンチマークを雑にとってみた」でした。

FJCT でインフラエンジニアをしている樋口です。

普段は主に IaaS の仮想化基盤を運用をしています。 その中でログの管理には Elasticsearch を利用しています。

f:id:higc_fjct:20181218194654p:plain

今回は、ニフクラ上で Elastic Cloud Enterprise(以降、 ECE と書きます) を動かしてみました。
ECE は Elasticsearch のクラスタを簡単に管理できる SaaS である Elastic Cloud をオンプレミスやクラウド上で展開できる製品です。

マルチサイトでレプリカを取得する機能、オブジェクトストレージ上にバックアップを取るスナップショット機能や、 2.0 からの機能である性能の違うディスクを効率的に利用できる Hot Warm 構成を試したので紹介します。

f:id:higc_fjct:20181218194855p:plain
今回つくるもの

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 に接続します。

f:id:higc_fjct:20181218195053p:plain

先程メモした Admin のユーザー名とパスワードでログインします。 このような画面が表示されます。

ECE では Elasticsearch クラスタを Deployment という単位で管理します。 Deployment を試しに作ってみます。 Create Deployment をクリックすると以下の画面になります。

f:id:higc_fjct:20181218195127p:plain

標準的な構成で良ければ、名前を入力して Create deployment を選択するだけで Elasticsearch のクラスタがデプロイされます。

f:id:higc_fjct:20181218195201p:plain

実際に実行ししばらくしたところクラスタが作成され、以下のような画面にになります。 この画面のログイン情報は Kibana を設定することで出来ます。

f:id:higc_fjct:20181218195735p:plain

Elasticsearch と Kibana が構築されました。

f:id:higc_fjct:20181218195326p:plain
サンプルのデータを入れた 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 のテンプレートも自動で設定されます。 以下のような情報が取れるようになりました。

f:id:higc_fjct:20181218195416p:plain

Snapshot 機能を使ってニフクラオブジェクトストレージにバックアップを取る

Elasticsearch には Snapshot 機能を使ってバックアップを取ることができます。 バックアップ先には、Amazon S3 などのストレージが指定できます。 ニフクラのオブジェクトストレージは Amazon S3API に互換しているので利用が可能です。 ECE の Cloud UI から Snapshot の設定が出来るので試してみました。

ニフクラのオブジェクトストレージでバケットを作成します。 今回は ece-snapshot-01 というバケットを作成しました。

f:id:higc_fjct:20181218195859p:plain

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"
  }
}

実際の画面です

f:id:higc_fjct:20181218195922p:plain

先程作成した Deployment に Snapshot の設定をします。

f:id:higc_fjct:20181218195958p:plain

スナップショットの取得間隔設定や、取得したスナップショットの管理ができます。

f:id:higc_fjct:20181218200020p:plain

実際にニフクラオブジェクトストレージ上にスナップショットが作成されました。

f:id:higc_fjct:20181218200043p:plain

取得したスナップショットは、 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 の画面で確認できるようになります。

f:id:higc_fjct:20181218200358p:plain

追加した Runner にロールを追加します。Runner を選択後 Update roles のリンクを選択します。 Runner にロールを割り当てる画面が表示されます。 今回は allocator を選択します。

f:id:higc_fjct:20181218200513p:plain

Alocator としても確認できるようになりました。

f:id:higc_fjct:20181218200604p:plain

先程の Deployment を Edit して 2 zone 利用する設定にします。Elasticsearch, Kibana ともに 2 zone に設定しました。

f:id:higc_fjct:20181218200655p:plain

これで、どちらのエンドポイントでも 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 とつけます。

f:id:higc_fjct:20181218200904p:plain

Template > data.highstorage > Edit Instance Configuration で highstorage: True のタグがあるものだけをフィルタします。 同様に Template > data.default > Edit Instance Configuration で highstorage: False のタグがあるものだけをフィルタします。 以下の画像の用に Allocator を絞り込むことが出来ます。

f:id:higc_fjct:20181218200953p:plain

Deployment から Hot-Warm を選択して構築します。

f:id:higc_fjct:20181218201019p:plain

Hot-Warm 構成を取るインデックスの指定をします。

f:id:higc_fjct:20181218201051p:plain

この設定をすることで当日分のインデックスが Hot ノード上に作成され、 翌日以降のインデックスが Warm ノードに移動されるようになります。

まとめ

ECE を利用して Elasticsearch クラスタの管理を簡単にすることが出来ました。

今回紹介できませんでしたが、インターネットアクセスができないプライベートネットワークのみの環境でも構築が可能だというメリットもあるようです。 ぜひ、ニフクラ上で ECE を試してください。

また本日弊社の勉強会会場 NIFcLounge第27回Elasticsearch勉強会「LT&忘年会」2018.12を開催いたしますのでぜひご参加ください。

明日は、 @egoa56 さんの「サーバログイン時にエモい画像を出して煽り駆動開発してみた話」です。楽しみですね。