VPC環境で利用できます。
Elasticsearchは、非定型データを JSON構造で保存し、検索に特化したデータストレージです。REST APIを使用してクエリできます。
Elasticsearchアプリの詳細情報を確認
アプリの作成が完了すると、詳細情報を確認できます。アプリの詳細情報の Statusが Stableの場合、アプリが正常に起動されたことを意味します。
アプリの詳細情報を確認する方法は、次の通りです。
- NAVERクラウドプラットフォームコンソールの VPC環境で、
> Services > Big Data & Analytics > Data Forestメニューを順にクリックします。 - 左側の Data Forest > Appsメニューをクリックします。
- アプリを所有するアカウントを選択します。
- 詳細情報を確認するアプリをクリックします。
- アプリの詳細情報を確認します。
- Quick links
- elasticsearch.hosts: Elasticsearch REST APIアドレス(外部ネットワーク)
- shell-es-coord-0: コーディネーターノードのウェブシェル URL
- supervisor-es-ingest-0: インジェストノードプロセスを管理できる supervisor URL。このノードはデフォルト値の0個が作成されるため、別に指定しない場合はアクセス不可
- shell-es-master-0: マスターノードのウェブシェル URL
- supervisor-es-coord-0: コーディネーターノードプロセスを管理できる supervisor URL
- supervisor-es-data-0: データノードプロセスを管理できる supervisor URL
- shell-es-data-0: データノードのウェブシェル URL
- shell-es-ingest-0: インジェストノードのウェブシェル URL。このノードはデフォルト値の0個が作成されるため、別に指定しない場合はアクセス不可
- supervisor-es-master-0: マスターノードプロセスを管理できる supervisor URL
- Connection String
- elasticsearch.hosts.inside-of-cluster: Elasticsearch REST APIアドレス(内部ネットワーク)
- コンポーネント: デフォルトで指定された値が推奨リソースです。
- es-master: esサーバでマスターのロールを実行するコンポーネント
- es-data: esサーバでデータを保存するロールを実行するコンポーネント
- es-ingest: esサーバでインジェストパイプラインのロールを実行するコンポーネント
- es-coord: esサーバでコーディネーターノードのロールを実行するコンポーネント
- Quick links
REST APIアドレスリスト
Elasticsearchの HTTP REST APIアドレスは2つあります。状況に応じて適切な APIアドレスを使用します。
- elasticsearch.hosts: Data Forest外部ネットワークから Elasticsearchにアクセスする際に使用します。
- elasticsearch.hosts.inside-of-cluster: Data Forestアプリから Elasticsearchにアクセスする際に使用します。例) Kibanaで Elasticsearchと連携時
| 状況 | 使用するアドレス |
|---|---|
| Kibanaアプリから Elasticsearchアプリにアクセスする場合 | elasticsearch.hosts.inside-of-cluster |
| Devアプリで構築した開発環境から Elasticsearchアプリにアクセスする場合 | elasticsearch.hosts.inside-of-cluster |
| 自分のサーバで実行される Logstash | elasticsearch.hosts |
Data Forest以外のサーバで実行する curl |
elasticsearch.hosts |
elasticsearch.hostsアドレスは HTTPプロキシサーバです。elasticsearch.hosts.inside-of-clusterを使用できる環境であれば、HTTPプロキシサーバを使用するより elasticsearch.hosts.inside-of-clusterを使用することをお勧めします。
Elasticsearchアプリコンテナ数の変更
コンテナ数を調整する方法は、次の通りです。
- NAVERクラウドプラットフォームコンソールの VPC環境で、
> Services > Big Data & Analytics > Data Forestメニューを順にクリックします。 - 左側の Data Forest > Appsメニューをクリックします。
- アプリを所有するアカウントを選択します。
- 詳細情報を確認するアプリをクリックし、[Flex] ボタンをクリックします。
- Flexの変更画面が表示されたら、コンテナ数を修正して [修正] ボタンをクリックします。

- es-masterと es-dataコンポーネントは Flex機能をサポートしません。他のコンポーネントは自由に Flexできます。
Elasticsearchアプリ使用時の注意事項
ノード障害
Elasticsearchアプリは、1つの物理的なノードに1つのデータノードのみ起動します。そのため、replica=1の場合、1つのデータノードに障害が発生してもデータは消失しません(replica=1は、ソース1 + replica 1という意味)。 es-dataは、最低2台必要です。
- Elasticsearch 7.3のデフォルト値は shard 1つ、replica 1つです。Index settings、または Index creation no longer defaults to five shardsをご参照ください。
- Elasticsearch 6.7のデフォルト値は shard 5つ、replica 1つです。
Out of Memory
Elasticsearchアプリの作成時、必要なリソース(resource/memory)を指定します。指定されたメモリより多くのメモリを使用する場合、OSの Out of Memory(OOM) Killerが Elasticsearchプロセスを終了させます。supervisorで Elasticsearchプロセスを管理しているため、OOMによりプロセスが終了すると、supervisorが Elasticsearchプロセスを再実行することになりますが、OOMが発生した場合、再び OOMが発生する可能性が高いです。
このような状況が発生した場合、Elasticsearchコンテナ数を増やした後、shardを分割して個々のノードの負荷を減少させるか、コンテナのリソースを増加させる必要があります。ただし、既に実行中の Elasticsearchアプリリソースは変更できません。リソースを変更したい場合、メモリを増加させた Elasticsearchアプリを作成し直し、repository-hdfsを参照して HDFSにバックアップしてから復旧するか、Reindex from remote機能を使用してインデックスを新しい Elasticsearchアプリに移行できます。
Elasticsearchプロセスが OOMにより終了した後、再起動されたかを確認する方法は、次の通りです。
- cerebroでノードの uptime情報を確認します。他のノードに比べて uptimeが短い場合、Elasticsearchプロセスが再起動した可能性が高いです。
- このノードの supervisord.logをご確認ください。(ログ/設定を確認する)ログに以下のような内容がある場合、OOMにより Elasticsearchプロセスが再起動された可能性が高いです。
# SIGKILLで Elasticsearchプロセスが終了 2020-04-22 14:44:35,390 INFO exited: elasticsearch (terminated by SIGKILL; not expected) # supervisorが Elasticsearchを再実行 2020-04-22 14:44:36,395 INFO spawned: 'elasticsearch' with pid 508 2020-04-22 14:44:37,396 INFO success: elasticsearch entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
supervisorのログは Elasticsearchプロセスが SIGKILLにより終了したことを意味しますが、SIGKILLが発生した理由は不明です。OOM Killerは SIGKILLを使用しているため、OOM Killerにより終了したものと思われます。
-
dmesgコマンドで OOMの発生有無を確認できます。
[magnum@ac3m8x2240.bdp ~]$ dmesg ... [13460863.662062] elasticsearch[e invoked oom-killer: gfp_mask=0x50, order=0, oom_score_adj=1000 [13460863.662066] elasticsearch[e cpuset=aceca4b30ed9b4af3b3fab0ada711021f05dfecf68ebfdcfcdaa54a0ab516842 mems_allowed=0-1 [13460863.662069] CPU: 14 PID: 27043 Comm: elasticsearch[e Not tainted 3.10.0-862.14.4.el7.x86_64 #1 [13460863.662071] Hardware name: HPE ProLiant DL380 Gen10/ProLiant DL380 Gen10, BIOS U30 09/12/2019 [13460863.662072] Call Trace: [13460863.662080] [<ffffffffb7f13754>] dump_stack+0x19/0x1b [13460863.662085] [<ffffffffb7f0e91f>] dump_header+0x90/0x229 [13460863.662091] [<ffffffffb799a7e6>] ? find_lock_task_mm+0x56/0xc0 [13460863.662096] [<ffffffffb7a0f678>] ? try_get_mem_cgroup_from_mm+0x28/0x60 [13460863.662098] [<ffffffffb799ac94>] oom_kill_process+0x254/0x3d0 [13460863.662101] [<ffffffffb7a13486>] mem_cgroup_oom_synchronize+0x546/0x570 [13460863.662103] [<ffffffffb7a12900>] ? mem_cgroup_charge_common+0xc0/0xc0 [13460863.662105] [<ffffffffb799b524>] pagefault_out_of_memory+0x14/0x90 [13460863.662108] [<ffffffffb7f0cac1>] mm_fault_error+0x6a/0x157 [13460863.662112] [<ffffffffb7f20846>] __do_page_fault+0x496/0x4f0 [13460863.662113] [<ffffffffb7f208d5>] do_page_fault+0x35/0x90 [13460863.662115] [<ffffffffb7f1c758>] page_fault+0x28/0x30 [13460863.662118] Task in /yarn/container_e62_1584425817444_92362_01_000002/aceca4b30ed9b4af3b3fab0ada711021f05dfecf68ebfdcfcdaa54a0ab516842 killed as a result of limit of /yarn/container_e62_1584425817444_92362_01_000002/aceca4b30ed9b4af3b3fab0ada711021f05dfecf68ebfdcfcdaa54a0ab516842 [13460863.662121] memory: usage 2097152kB, limit 2097152kB, failcnt 1448215 [13460863.662122] memory+swap: usage 2097152kB, limit 4194304kB, failcnt 0 [13460863.662123] kmem: usage 0kB, limit 9007199254740988kB, failcnt 0 [13460863.662124] Memory cgroup stats for /yarn/container_e62_1584425817444_92362_01_000002/aceca4b30ed9b4af3b3fab0ada711021f05dfecf68ebfdcfcdaa54a0ab516842: cache:332KB rss:2096820KB rss_huge:0KB mapped_file:320KB swap:0KB inactive_anon:546160KB active_anon:1550660KB inactive_file:8KB active_file:0KB unevictable:0KB [13460863.662138] [ pid ] uid tgid total_vm rss nr_ptes swapents oom_score_adj name [13460863.662272] [25374] 20033 25374 3151 67 12 0 0 bash [13460863.662274] [25813] 20033 25813 29910 2391 62 0 0 supervisord [13460863.662276] [25818] 20033 25818 178152 1221 20 0 0 gotty [13460863.662279] [26644] 20033 26644 3184 108 12 0 0 bash [13460863.662282] [26703] 20033 26703 954936 519887 1130 0 1000 java [13460863.662285] Memory cgroup out of memory: Kill process 27043 (elasticsearch[e) score 1993 or sacrifice child [13460863.663561] Killed process 26703 (java) total-vm:3819744kB, anon-rss:2079548kB, file-rss:0kB, shmem-rss:0kB
データ保存
Elasticsearchアプリのデータは /home1/{USER} の下位に保存され、ユーザーがアプリを停止したり、別の問題によりアプリが終了した場合でもデータは削除されません。
以下のような特定の状況ではデータが消失する可能性があります。
停止したアプリをユーザーが削除(destroy)する場合にはデータが削除されます。停止したアプリを再起動すると、既存データが存在していたノードで起動され、データが復旧されます。ただし、これまで起動していたノードのリソースを他のタスクが占有したり、ノードが障害によって除外されている場合、yarn.service.placement-history.timeout.ms(デフォルト値: 1時間)以降には既存のノードで実行されず、別のノードで実行されます。そのため、yarn.service.placement-history.timeout.msで設定された時間以内に実行されなかった Elasticsearchアプリのデータは消失する恐れがあります。重要なデータの場合は、repository-hdfsを参照して HDFSにバックアップしてください。
サービスに直接影響する場合は、できるだけ専用のキューで Elasticsearchアプリを実行してください。共用キューは複数のユーザーが一緒に使用するため、希望する時点に必要なリソースを確保できない場合があります。