Elastic Cloud Enterprise を AWS 環境にデプロイしてみた

2016.12.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、藤本です。

このエントリは Elastic stack Advent Calendar 4日目の記事になります。

現地時間12/1に Elastic {ON} 2016 で発表された Elastic Cloud Enterprise のアルファ版がリリースされました。

Introducing Elastic Cloud Enterprise - Public Alpha

先日、Elastic Cloud Enterprise を紹介する記事をエントリしました。

【速報】Elastic Cloud Enterprise の Alpha版がリリースされました

本日は早速、AWS 環境に Elastic Cloud Enterprise をデプロイしてみました。

デプロイしてみた

環境

Elastic Cloud Enterprise はパブリッククラウド、プライベートクラウド、オンプレミスとプラットフォームを選ばず、構築することが可能です。今回は全ての Role を一台で持たせたシングル構成で AWS 環境にデプロイしてみました。Elastic Cloud Enterprise を利用する環境であれば、非冗長構成はほとんどないと思いますが、まずは使用感を確認したかったのでシングル構成でサクッと試してみました。

  • OS : CentOS 7
  • AMI : ami-6d1c2007
  • インスタンスタイプ : m4.large

システム要件は下記ページをご参照ください。

Plan Your Deployment

OSセットアップ

AMI から展開した OS を Elastic Cloud Enterprise をインストールするためにセットアップします。この手順は全てのホストで必要な設定となります。

kernel、xfsprogs のアップデート

kernel、xfsprogs の最新バージョンをインストールします。

$ sudo yum -y update kernel xfsprogs
:
Installed:
kernel.x86_64 0:3.10.0-327.36.3.el7

Dependency Installed:
linux-firmware.noarch 0:20150904-43.git6ebf5d5.el7

Complete!
# rpm -q kernel xfsprogs
kernel-3.10.0-327.10.1.el7.x86_64
kernel-3.10.0-327.36.3.el7.x86_64
xfsprogs-3.2.2-2.el7.x86_64
Docker インストール

Elastic Stack は Docker Container にデプロイされますので、Docker をイントールします。バージョンは 1.11 が要件になっています。

$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

$ sudo yum install -y docker-engine-1.11.2
:
Installed:
docker-engine.x86_64 0:1.11.2-1.el7.centos

Dependency Installed:
docker-engine-selinux.noarch 0:1.12.3-1.el7.centos libtool-ltdl.x86_64 0:2.4.2-21.el7_2

Complete!
OS 設定

OS設定を投入します。

$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="console=tty0 crashkernel=auto console=ttyS0,115200 cgroup_enable=memory swapaccount=1"
$ sudo grub2-mkconfig -o "$(readlink /etc/grub2.conf)"
$ echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
$ echo "* soft nofile 1024000
* hard nofile 1024000
* soft memlock unlimited
* hard memlock unlimited
ubuntu soft nofile 1024000
ubuntu hard nofile 1024000
ubuntu soft memlock unlimited
ubuntu hard memlock unlimited
root soft nofile 1024000
root hard nofile 1024000
root soft memlock unlimited" | sudo tee -a /etc/security/limits.conf
$ cat << SETTINGS | sudo tee /etc/sysctl.d/70-cloudenterprise.conf
net.ipv4.tcp_max_syn_backlog=65536
net.core.somaxconn=32768
net.core.netdev_max_backlog=32768
SETTINGS

SELINUX の無効化は必須ではありませんが、今回は無効にしました。

$ sudo setenforce 0
Docker 設定

Elastic Cloud Enterprise の Container が利用するディスク領域の確保や、docker プロセスのパラメータ設定を実施します。

$ echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
$ sudo service network restart
$ sudo install -o $USER -g $USER -d -m 700 /mnt/data
$ sudo install -d -m 700 /mnt/data/docker
$ sudo mkdir /etc/systemd/system/docker.service.d
$ echo "[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// -g /mnt/data/docker -s devicemapper --storage-opt dm.fs=xfs" | sudo tee -a /etc/systemd/system/docker.service.d/docker.conf
$ sudo systemctl daemon-reload
$ sudo systemctl start docker
$ sudo systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
$ sudo usermod -aG docker $USER
$ sudo reboot
ネットワーク設定

シングル構成の場合、最低限、下記ポートを開放する必要があります。

  • ローカル端末から
  • 12400/tcp : Web管理コンソールへのアクセス
  • 12300/tcp : APIによるアクセス
  • ホスト自身から
  • 18000-20000/tcp : ZooKeeper へのアドバタイズ
  • 12191-12301, 12898-12908, 13898-13908/tcp : ZooKeeper によるアクセス

今回はシングル構成なので必要ありませんが、Role 毎にホストを分ける場合、ホストを冗長構成とする場合、ホスト間で通信が発生するため、FW設定が必要となります。必要なFW設定に関してはこちらをご参照ください。

Elastic Cloud Enterprise のインストール

Elastic Cloud Enterprise のインストールはシェルを実行して、対話形式でパラメータを入力するだけでインストールできます。

設定キー 説明 デフォルト値
Installation ID ホストを識別するID runner-XXXXXX ランダムな英数字
Public Hostname 外部からアクセスするIPアドレス
Host IP ホスト間でアクセスするIPアドレス
Availability Zone ホストのグループ名 例えば、AWSのAZ毎にホスト同一グループに配置することで、プライマリシャードと、レプリカシャードをAZレベルで分散できます ece-region-1a
Capacity Elastic Cloud Enterprise に割り当てるメモリ量(MB) 8192 ホストリソースで変動
$ curl -L -O https://elastic.github.io/cloud/docs/cloud-enterprise/elastic-cloud-enterprise-installer.sh

$ bash elastic-cloud-enterprise-installer.sh
Unable to find image 'docker.elastic.co/cloud-enterprise/elastic-cloud-enterprise:1.0.0-alpha4' locally
1.0.0-alpha4: Pulling from cloud-enterprise/elastic-cloud-enterprise
3690ec4760f9: Pull complete
e75fbff20467: Pull complete
27452c761733: Pull complete
9d462f6fefc4: Pull complete
5a6f258d5a07: Pull complete
f7709a62228d: Pull complete
372c8e49d9d5: Pull complete
b842b3af6efd: Pull complete
4ddb19818ffc: Pull complete
612cacd1b411: Pull complete
086709959c54: Pull complete
00b2f98d0080: Pull complete
ed5129fa9e4e: Pull complete
87564a518edc: Pull complete
5d75c5546571: Pull complete
0128589694c7: Pull complete
4f5091b95107: Pull complete
bf741c7a9a13: Pull complete
Digest: sha256:5df0d9c7a0af8bd31790e92b46194b6a7fa88955bf8c0dd831cc03979bf2eed4
Status: Downloaded newer image for docker.elastic.co/cloud-enterprise/elastic-cloud-enterprise:1.0.0-alpha4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Elastic Cloud Enterprise Installer

Start setting up a new Elastic Cloud Enterprise installation by installing the software on your first host.
This first host becomes the initial coordinator and provides access to the Cloud UI, where you can manage your installation.
To learn more about the options you can specify, see the documentation.

NOTE: If you want to add this host to an existing installation, please specify the --coordinator-host flag
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- Please supply the following configuration details --
Installation ID: [runner-9JEW0I]
Public Hostname: 172.31.5.78
Host IP: 172.31.5.78
Availability Zone: [ece-region-1a]
Capacity: [8192]
-- All configuration details have been supplied --

-- Verifying Prerequisites --
Checking host storage path... PASSED
Checking docker version... PASSED

Checking internal hostname connectivity... PASSED
Checking internal ip connectivity... PASSED
Checking OS settings... PASSED
-- Completed Verifying Prerequisites --

- Running Bootstrap container
- Monitoring bootstrap process
- Loaded bootstrap settings
- Starting local runner
- Started local runner
- Waiting for runner container node
- Runner container node detected
- Waiting for coordinator candidate
- Detected coordinator candidate
- Detected pending coordinator, promoting coordinator
- Coordinator accepted
- Storing current platform version: 1.0.0-alpha4
- Storing Elastic Stack versions: [2.4.1,5.0.2]
- Creating Admin Console Elasticsearch backend
- Applying Elasticsearch index template
- Updating dynamic Admin Console settings with Elasticsearch cluster information
- Starting reindexing Admin Console data
- Shutting down bootstrapper
- Exiting bootstrapper
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Elastic Cloud Enterprise Installer Completed Successfully

Administration Console Details:
URL: http://54.197.xxx.xxx:12400 (See documentation for HTTPS details)
Username: root
Password: I74S7Cp9n43NVL1fL19Kq0MjiFsoKCdHgmTlYYhlSwc=

To add hosts to this Elastic Cloud Enterprise installation, include the following parameter when you install the software
on additional hosts: --coordinator-host 172.31.5.78
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

成功すると、上記が出力されます。

記載されている URL へアクセスします。

Log_in_–_Elastic_Cloud

ログイン画面が表示されました。Kibana の X-Pack のログイン画面にソックリですね。同じく記載されているユーザー名、パスワードでログインします。使用許諾契約書が表示されます。

Clusters_–_Elastic_Cloud

使用許諾契約書を Accept します。

ログインが完了すると、Elasticsarch クラスタが表示されます。Kibana 5系の UI に似ていますね。

Clusters_–_Elastic_Cloud 2

Elastic Cloud Enterprise の画面説明

詳細な設定は別の機会に説明するとして、今回はメニューレベルで説明します。

メニュー

Kibana 同様、左ペインにメニューがあります。 上から、Elasticsearch/Kibanaクラスタ管理、Elastic Cloud基盤管理、設定履歴、ログアウト、メニューの開閉となります。

貼り付けた画像_2016_12_03_17_05

Elasticsearch / Kibana クラスタ管理

Elasticsearch クラスタの作成、設定、Kibana クラスタの設定を行います。

Elasticsarch クラスタ管理

Elasticsearch クラスタの一覧が表示されます。デプロイ時点で Elastic Cloud Enterprise の設定情報を管理する Elasticsearch クラスタが生成されています。

Clusters_–_Elastic_Cloud_2

Kibana クラスタ管理

Elasticsearch クラスタにおいて Kibana を有効化したクラスタが表示されます。デプロイ時点では Kibana はありません。

Elastic_Cloud

Elastic Cloud 基盤管理

リージョン管理

Elastic Cloud 基盤のリージョンが表示されます。 Allocator を割り当てているホスト数、Proxy を割り当てているホスト数が表示されます。今回はシングル構成で一つのホストに Allocator、Proxy の両方が割り当てられています。

Regions_–_Elastic_Cloud 2

設定履歴

設定履歴を表示できます。

Activity_Feed_–_Elastic_Cloud

Elasticsearch クラスタを作成する

Elasticsearch / Kibana クラスタ管理から [ Create Cluster ] をクリックします。

Clusters_–_Elastic_Cloud_2_のコピー

設定画面で設定項目を入力します。

設定キー 説明
Cluster name クラスタを識別する名前
Elasticsearch version 作成する Elasticsearch のバージョンを指定します。 現時点では「5.0.2」「2.4.1」のいずれかを選択できます。 Elastic Cloud 基盤管理から Docker Image 情報を追加することで追加できそうです。
Foult tolerance シングル構成なので分かりませんが、拠点数を選択できます
Node count Elasticsarch Node 数を選択できます。 Docker container 数になります。 Proxy からルーティング、負荷分散されます。
Dedicated master-eligibl nodes Data Node、Master Node を分ける場合、有効化します。
Plugins インストールするプラグインを選択します。 現在表示されているプラグインだけではなく、 Elastic Cloud 基盤管理からプラグインを追加することができます。

Create_Cluster_–_Elastic_Cloud 2

設定キー 説明
Scripting Inline Scriptsの有効/無効を設定できます。 Stored Scriptsの有効/無効を設定できます。 File Scriptsの有効/無効を設定できます。
Automatic index creation 存在しないインデックへのドキュメントのインデキシング時にインデックスの作成を許可するか設定できます。
Deletion requires name ワイルドカード指定によるインデックスの削除を許可するか設定できます。

Create_Cluster_–_Elastic_Cloud 3

[ Create Cluster ] をクリックすると、クラスタの作成が開始されます。

Cluster_plans_–_Elastic_Cloud

5分ほどで作成が完了しました。画面上部に表示されているユーザー名、パスワードは X-Pack の Security のユーザー情報となりますので控えておいてください。Elasticsearch Web API にベーシック認証によりアクセスする際に必要となります。

Cluster_plans_–_Elastic_Cloud 3

Show Detail からログを確認して、Plan successfully constructed が出力されていれば、作成成功です。

非常に簡単に作成できました。

Elasticsearch クラスタへアクセスする

Elastic Cloud Enterprise の推奨構成は LoadBalancer を介した Proxy へのアクセスです。 今回は分かりやすさを優先して、直接 Proxy へアクセスしています。

Elasticsearch クラスタ一覧に作成した「ece-test」が表示されています。リンクをクリックして詳細設定画面に遷移します。

Clusters_–_Elastic_Cloud 3

Endpoints のリンクが Elasticsearch クラスタへのアクセス URL となります。エンドポイントの URL は Proxy を通して 2台の Node へアクセスされます。

screenshot_2016-12-03_17_31_46

それではアクセスしてみます。エンドポイントの URL へ控えておいたユーザー情報をベーシック認証に指定し、アクセスします。

$ curl -k -u elastic https://99c9ec9d59a5435a8e1e62f22df5c821.172.31.5.78.xip.io:9243/
Enter host password for user 'elastic':
{
"name" : "instance-0000000001",
"cluster_name" : "99c9ec9d59a5435a8e1e62f22df5c821",
"cluster_uuid" : "8KGhh5ABR2OQ6Ym7abShaQ",
"version" : {
"number" : "5.0.2",
"build_hash" : "f6b4951",
"build_date" : "2016-11-24T10:07:18.101Z",
"build_snapshot" : false,
"lucene_version" : "6.2.1"
},
"tagline" : "You Know, for Search"
}

アクセスできました。

プラグインにも選択した analysis-icu、および analysis-kuromoji がインストールされています。

$ curl -k -u elastic https://99c9ec9d59a5435a8e1e62f22df5c821.172.31.5.78.xip.io:9243/_cat/plugins
Enter host password for user 'elastic':
instance-0000000001 analysis-icu 5.0.2
instance-0000000001 analysis-kuromoji 5.0.2
instance-0000000001 found-elasticsearch 5.0.2
instance-0000000001 repository-s3 5.0.2
instance-0000000001 x-pack 5.0.2
instance-0000000000 analysis-icu 5.0.2
instance-0000000000 analysis-kuromoji 5.0.2
instance-0000000000 found-elasticsearch 5.0.2
instance-0000000000 repository-s3 5.0.2
instance-0000000000 x-pack 5.0.2

Kibana クラスタを作成し、アクセスする

Elastic Cloud Enterprise の推奨構成は LoadBalancer を介した Proxy へのアクセスです。 今回は分かりやすさを優先して、直接 Proxy へアクセスしています。

Elasticsearch クラスタはデフォルトで Kibana を利用できません。Kibana を利用するには Kibana を有効化する必要があります。

Elasticsearch クラスタの詳細画面から「Manage」ページへ遷移します。

Manage_cluster_–_Elastic_Cloud

Kibana を Enable から有効化します。

有効化されると、[ Go to Kibana ] のリンクが表示されます。[ Go to Kibana ] のリンクが Kibana クラスタへのアクセス URL となります。

screenshot_2016-12-03_18_15_46

Kibana のエンドポイント(Proxy)はプライベートIPアドレスで払い出されます。Proxy からクラスタへは名前ベースでルーティングしているため、インターネットからアクセスしたい場合、今回は /etc/hosts にエンドポイントで Proxy へアクセスするように設定しました。

エンドポイントへアクセスします。

Kibana

Kibana の X-Pack のログイン画面が表示されました。

Elasticsearch のユーザー名、パスワードでログインできます。

Kibana 2

ログインが成功し、Kibana の UI が表示されました。

まとめ

いかがでしたでしょうか?

Elastic Cloud Enterprise のデプロイも、Elasticsearch クラスタのデプロイも非常に簡単にできました。まだ簡単な操作しかしていませんが、今度はホストレベルの冗長化構成を試してみたいと思います。また試してみたエントリします。