Elasticsearch を使用する
    • PDF

    Elasticsearch を使用する

    • PDF

    Article Summary

    VPC環境で利用できます。

    Elasticsearchは、非定型データを JSON構造で保存し、検索に特化したデータストレージです。REST APIを使用してクエリできます。

    Elasticsearchアプリの詳細情報を確認

    アプリの作成が完了すると詳細情報を確認できます。アプリの詳細情報の StatusStableであれば、アプリが正常に起動されたことを意味します。
    アプリの詳細情報を確認する方法は、次の通りです。

    1. NAVERクラウドプラットフォームコンソールで Services > Big Data & Analytics > Data Forestメニューを順にクリックします。
    2. 左側の Data Forest > Appsメニューをクリックします。
    3. アプリを所有するアカウントを選択します。
    4. 詳細情報を確認するアプリをクリックします。
    5. アプリの詳細情報を確認します。
      df-es_2-1_ko
      • Quick links
        • AppMaster: コンテナログを確認できる URL.アプリ作成時、すべてのアプリは YARNキューに提出され、YARNは各アプリの詳細情報を確認できる Web UIを提供。
        • elasticsearch.hosts: Elasticsearch REST APIアドレス(外部ネットワーク)
        • shell-es-coord-0: コーディネーターノードのウェブシェル(Web shell) 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サーバでコーディネーターの役割を果たすコンポーネント
    参考

    AppMaster UIにログインして各コンテナのログを確認する方法については、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
    自分のサーバで実行される Logstashelasticsearch.hosts
    Data Forest外部のサーバで実行する curlelasticsearch.hosts
    参考

    elasticsearch.hostsアドレスは HTTPプロキシサーバです。elasticsearch.hosts.inside-of-clusterを使用できる環境であれば、HTTPプロキシサーバを使用するより elasticsearch.hosts.inside-of-clusterを使用することをお勧めします。

    Elasticsearchアプリコンテナ数の変更

    コンテナ数を調整する方法は、次の通りです。

    1. NAVERクラウドプラットフォームコンソールで Services > Big Data & Analytics > Data Forestメニューを順にクリックします。
    2. 左側の Data Forest > Appsメニューをクリックします。
    3. アプリを所有するアカウントを選択します。
    4. 詳細情報を確認するアプリをクリックし、[Flex] ボタンをクリックします。
    5. Flexの変更画面が表示されたら、コンテナ数を修正して [修正] ボタンをクリックします。
      df-es_4-1_vpc_ko(1)
    参考
    • 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の OOM Killerが Elasticsearchプロセスを終了させます。supervisorで Elasticsearchプロセスを管理しているため、OOMによりプロセスが終了すると、supervisorが Elasticsearchプロセスを再実行することになりますが、OOMが発生した場合、再び OOMが発生する可能性が高いです。
    このような状況が発生した場合、Elasticsearchコンテナ数を増やした後、shardを分割して個々のノードの負荷を減少させるか、コンテナのリソースを増加させる必要があります。ただし、既に実行中の Elasticsearchアプリリソースは変更できません。リソースを変更したい場合、メモリを増加させた Elasticsearchアプリを作成し直し、repository-hdfsを参考にして HDFSにバックアップしてから復旧するか、Reindex from remote機能を使用してインデックスを新しい Elasticsearchアプリに移行することができます。

    Elasticsearchプロセスが OOM(Out of Memory)により終了した後、再起動されたかを確認する方法は、次の通りです。

    • 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が発生した理由は不明です。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アプリを実行してください。共用キューは複数のユーザーが一緒に使用するため、希望する時点に必要なリソースを確保できない場合があります。


    この記事は役に立ちましたか?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.