elastic.elasticsearch

アーカイブ

このプロジェクトはもはやメンテナンスされていません。

ご自身のニーズに合わせて引き続きご利用いただくことは歓迎します。Elasticsearch 8.x と一緒に利用することもできます。

別のスタートガイドを体験したい場合は、以下のオプションを試してみてください:

ansible-elasticsearch

Ansible Galaxy

このロールは7.xおよび6.x用ですが、8.xでも動作するはずです(を参照)。

7.x/6.x ElasticsearchのためのAnsibleロール - 以下のプラットフォームでテストされ、合格しました:

  • Ubuntu 16.04
  • Ubuntu 18.04
  • Ubuntu 20.04
  • Debian 8
  • Debian 9
  • Debian 10
  • CentOS 7
  • Amazon Linux 2

重大な変更

マルチインスタンスサポートに関する通知

  • インスタンスを1つだけ使用するが、古いansible-elasticsearchバージョンからアップグレードしたい場合は、アップグレード手順に従ってください。
  • 同じホストに複数のElasticsearchインスタンスを(異なるポート、ディレクトリ、設定ファイルで)インストールする場合、ansible-elasticsearch >= 7.1.1にアップデートしないでください。代わりにこの回避策に従ってください。
  • マルチインスタンスの使用例については、私たちの公式イメージを使用したDockerコンテナを推奨しています(https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html)。

MAX_THREAD設定の削除

Ansible-elasticsearch 7.5.2では、プロセスが開始できる最大スレッド数をカスタマイズするためのオプションが削除されます。これは#637で行われました。このオプションはansible-elasticsearch 7.1.1でマルチインスタンスサポートが削除されて以来機能していないことが判明しました。このオプションは、最新のElasticsearchの進展に関連する場合、次回のリリースで再度追加されます。

設定ファイルに関する変更

Ansible-elasticsearch 7.5.2では、このロールによって提供される設定ファイルが更新され、6.xおよび7.xで廃止された一部のオプションが含まれています:

  • /etc/default/elasticsearch|/etc/sysconfig/elasticsearch:新しいテンプレートは、Elasticsearch >= 6.xによって提供される設定ファイルを反映しており、削除されたパラメーターは6.xおよび7.xではすでに使用されていません。
  • /etc/elasticsearch/jvm.options:新しいテンプレートはElasticsearch >= 6.xによって提供される設定ファイルを反映しています。
  • /etc/elasticsearch/log4j2.properties
    • このAnsibleロールからは、特定のAnsible変数にカスタマイズを提供しない静的ファイルであるため、log4j2.properties.j2テンプレートを削除しました。
    • 新しいサーバーにこのAnsibleロールを展開すると、Elasticsearchによって提供されるデフォルトのlog4j2.propertiesが適用され、上書きはされません。
    • 警告:このファイルが以前のansible-elasticsearchのバージョンによって既に管理されていたアップグレードシナリオでは、このファイルは未管理になり、デフォルトでは更新されません。7.5バージョンに更新したい場合は、こちらから取得し、このファイルをes_config_log4j2 Ansible変数と共に使用してください(以下を参照)。

バージョン >= 7.11.0 のOSSディストリビューション削除

Elasticsearch 7.11.0以降、OSSディストリビューションは最近のElasticsearchのライセンス変更に従って提供されなくなります。

oss_versiontrueに設定され、es_version7.11.0を超える場合、このAnsibleロールは失敗します。

詳細については、オープンにこだわる、パートIIのブログ記事をご覧ください。

設定ファイルの上書き方法

以下のAnsible変数を使用して設定ファイルを自分のバージョンで上書きできます。

  • es_config_default: "elasticsearch.j2":カスタム/etc/default/elasticsearch|/etc/sysconfig/elasticsearch設定ファイルを使用するためにelasticsearch.j2を自分のテンプレートに置き換えます。
  • es_config_jvm: "jvm.options.j2":カスタム/etc/elasticsearch/jvm.options設定ファイルを使用するためにjvm.options.j2を自分のテンプレートに置き換えます。
  • es_config_log4j2: "":カスタム/etc/elasticsearch/log4j2.properties設定ファイルを使用するためにこの変数を自分のテンプレートのパスに設定します。

依存関係

このロールは、ローカルマシンでjmespathを必要とするjson_queryフィルターを使用しています。

使用法

自分のタスクを含むAnsibleプレイブックを作成し、elasticsearchロールを含めます。このリポジトリはプレイブックの文脈内でアクセスできる必要があります。

ansible-galaxy install elastic.elasticsearch,v7.17.0

その後、elasticsearchロールを追加したプレイブックyamlを作成します。 elasticsearchロールを適用すると、ホスト上にノードがインストールされます。

最もシンプルな構成は次のとおりです:

- name: 簡単な例
  hosts: localhost
  roles:
    - role: elastic.elasticsearch
  vars:
    es_version: 7.17.0

上記は、ホスト「localhost」の単一ノード「node1」にElasticsearch 7.17.0をインストールします。

注意: Elasticsearchのデフォルトバージョンはes_versionで示されています。この変数をプレイブックで上書きして別のバージョンをインストールできます。 私たちはこのロールを7.xと6.xのそれぞれ7.17.06.8.23でテストしていますが、このロールは他のバージョンでもほとんどの場合に動作するはずです。

このロールはAnsibleタグも利用しています。詳細を知るには、--list-tasksフラグを付けてプレイブックを実行してください。

テスト

このプレイブックは、CIおよびローカルテスト用にKitchenを使用しています。

要件

  • Ruby
  • Bundler
  • Docker
  • Make

テストを実行する

  • このリポジトリをelasticsearchとしてチェックアウトしていることを確認してください。ansible-elasticsearchではありません。
  • テスト用のGoldまたはPlatinumライセンスがない場合は、xpack-upgradeスイートのトライアルバージョンをPATTERN変数に-trialを追加することで実行できます。
  • 一部のスイートが失敗する場合は、VERSION=7.xを明示的に指定する必要があるかもしれません。

BundlerでRubyの依存関係をインストールします。

make setup

X-Pack機能をライセンスでテストする場合は、最初にES_XPACK_LICENSE_FILE変数をエクスポートする必要があります。

export ES_XPACK_LICENSE_FILE="$(pwd)/license.json"

X-Packを実行しているUbuntu 16.04ホストを収束させるには:

$ make converge

テストを実行するには:

$ make verify

すべての異なるテストスイートをリストするには:

$ make list

デフォルトのテストスイートは、X-Packを用いたUbuntu 16.04です。別のスイートをテストしたい場合は、PATTERN変数で上書きできます。

$ make converge PATTERN=security-centos-7

PATTERNは複数のスイートに一致することができるキッチンパターンです。CentOSのすべてのテストを実行するには:

$ make converge PATTERN=centos-7

デフォルトバージョンは7.xです。6.xをテストしたい場合は、VERSION変数で上書きできます。たとえば:

$ make converge VERSION=6.x PATTERN=security-centos-7

テストが終わったら、すべてをクリーンアップできます:

$ make destroy-all

基本的なElasticsearch構成

すべてのElasticsearch構成パラメーターがサポートされています。これは、設定マップパラメーター「es_config」を使用して、elasticsearch.ymlファイルにシリアル化されることで実現されます。 マップの使用により、Ansibleプレイブックは新しい/廃止された/プラグインの構成パラメーターを反映するために更新する必要がありません。

es_configマップに加えて、追加機能(例:スクリプトのインストール)のためにいくつかのその他のパラメーターもサポートされています。これらはロールのdefaults/main.ymlファイルにあります。

以下は、Elasticsearchインスタンスに構成パラメーターを適用する例を示しています。

- name: カスタム構成のElasticsearch
  hosts: localhost
  roles:
    - role: elastic.elasticsearch
  vars:
    es_data_dirs:
      - "/opt/elasticsearch/data"
    es_log_dir: "/opt/elasticsearch/logs"
    es_config:
      node.name: "node1"
      cluster.name: "custom-cluster"
      discovery.seed_hosts: "localhost:9301"
      http.port: 9201
      transport.port: 9301
      node.data: false
      node.master: true
      bootstrap.memory_lock: true
    es_heap_size: 1g
    es_api_port: 9201

ロールはデフォルトの構成パラメーターでElasticsearchをインストールしますが、次の点を構成することが必要です:

  • es_config['http.port'] - ノードのhttpポート
  • es_config['transport.port'] - ノードのトランスポートポート
  • es_config['discovery.seed_hosts'] - ユニキャストディスカバリリスト、カンマ区切り形式 "<host>:<port>,<host>:<port>" (通常はクラスタの専用マスター)
  • es_config['cluster.initial_master_nodes'] - 7.x以降の場合、クラスターをブートストラップするためのマスターノードのリスト、カンマ区切り形式 "<node.name>:<port>,<node.name>:<port>" (通常はクラスタの専用マスターのノード名)
  • es_config['network.host'] - network.bind_hostとnetwork.publish_hostの両方を同じホスト値に設定します。network.bind_host設定により、異なるネットワークコンポーネントがバインドされるホストを制御できます。

network.publish_host設定は、ノードがクラスター内で自らを発表するホストを制御し、他のノードが接続できるようにします。

デフォルトのバインディング動作および利用可能なオプションの詳細については、https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.htmlをご覧ください。 ロールはこれらの設定を強制せず、ユーザーが適切に指定することを求めます。可能であれば、マスターノードが最初にリストされ、展開されることが推奨されます。

より複雑な例:

- name: カスタム構成のElasticsearch
  hosts: localhost
  roles:
    - role: elastic.elasticsearch
  vars:
    es_data_dirs:
      - "/opt/elasticsearch/data"
    es_log_dir: "/opt/elasticsearch/logs"
    es_config:
      node.name: "node1"
      cluster.name: "custom-cluster"
      discovery.seed_hosts: "localhost:9301"
      http.port: 9201
      transport.port: 9301
      node.data: false
      node.master: true
      bootstrap.memory_lock: true
    es_heap_size: 1g
    es_start_service: false
    es_api_port: 9201
    es_plugins:
      - plugin: ingest-attachment

重要な注意事項

このロールは、ノードとの通信にes_api_hostとes_api_portを使用します。これにより、テンプレートのインストールなどHTTP経由でのみ実行可能なアクションを行います。これらはそれぞれ「localhost」と9200にデフォルト設定されています。ノードが別のホストまたはポートでバインドされる場合は、変更する必要があります。

es_data_dirsとes_log_dirは、それぞれデータおよびログディレクトリをカスタマイズするためのものとしてのみ使用してください。es_config['path.data']es_config['path.logs']と一緒に使用すると、elasticsearch.ymlにデータおよびログの重複キーが生成され、Elasticsearchの起動に失敗します。

マルチノードサーバーインストール

elasticsearchロールの適用により、ホストにノードがインストールされます。ホストに対してロールを複数回指定することで、そのホストに複数のノードがインストールされます。

以下は三つのサーバー展開の例です。最初のサーバーがマスターノードを保持し、最初に宣言されます。必須ではありませんが、マルチノードクラスター構成では推奨されます。他の二つのサーバーはデータノードをホストします。

同じホストに複数のノードをインストールすることはもはやサポートされていませんので、ご注意ください。

- hosts: master_node
  roles:
    - role: elastic.elasticsearch
  vars:
    es_heap_size: "1g"
    es_config:
      cluster.name: "test-cluster"
      cluster.initial_master_nodes: "elastic02"
      discovery.seed_hosts: "elastic02:9300"
      http.host: 0.0.0.0
      http.port: 9200
      node.data: false
      node.master: true
      transport.host: 0.0.0.0
      transport.port: 9300
      bootstrap.memory_lock: false
    es_plugins:
     - plugin: ingest-attachment

- hosts: data_node_1
  roles:
    - role: elastic.elasticsearch
  vars:
    es_data_dirs:
      - "/opt/elasticsearch"
    es_config:
      cluster.name: "test-cluster"
      cluster.initial_master_nodes: "elastic02"
      discovery.seed_hosts: "elastic02:9300"
      http.host: 0.0.0.0
      http.port: 9200
      node.data: true
      node.master: false
      transport.host: 0.0.0.0
      transport.port: 9300
      bootstrap.memory_lock: false
    es_plugins:
      - plugin: ingest-attachment

- hosts: data_node_2
  roles:
    - role: elastic.elasticsearch
  vars:
    es_config:
      cluster.name: "test-cluster"
      discovery.seed_hosts: "elastic02:9300"
      http.host: 0.0.0.0
      http.port: 9200
      node.data: true
      node.master: false
      transport.host: 0.0.0.0
      transport.port: 9300
      bootstrap.memory_lock: false
    es_plugins:
      - plugin: ingest-attachment

ホストにパラメーターを割り当てるには、必要に応じてインベントリファイルを使用できます。

ホストとともにinventoryファイルに適切なansible_ssh_hostansible_ssh_userおよびansible_ssh_private_key_fileの値が定義されていることを確認してください。

次のように実行します:

ansible-playbook -i hosts ./your-playbook.yml

X-Pack機能のインストール

  • es_role_mapping 役割マッピングファイル。ここではYAMLとして宣言されます。詳細はこちらを参照してください。
es_role_mapping:
  power_user:
    - "cn=admins,dc=example,dc=com"
  user:
    - "cn=users,dc=example,dc=com"
    - "cn=admins,dc=example,dc=com"
  • es_users - ユーザーはここでYAMLとして宣言できます。2つのサブキー「native」と「file」が、ユーザーが作成されるレルムを決定します。これらのキーの下に、ユーザーをYAMLエントリーとして宣言します。例えば:
es_users:
  native:
    kibana4_server:
      password: changeMe
      roles:
        - kibana4_server
  file:
    es_admin:
      password: changeMe
      roles:
        - admin
    testUser:
      password: changeMeAlso!
      roles:
        - power_user
        - user
  • es_roles - Elasticsearchの役割をここでYAMLとして宣言できます。2つのサブキー「native」と「file」が、役割の作成方法(ファイルまたはHTTP(ネイティブ)呼び出し)を決定します。各キーの下に、適切な権限を持つ役割をリストします。ファイルベースのフォーマットはこちらで説明されています。
es_roles:
  file:
    admin:
      cluster:
        - all
      indices:
        - names: '*'
          privileges:
            - all
    power_user:
      cluster:
        - monitor
      indices:
        - names: '*'
          privileges:
            - all
    user:
      indices:
        - names: '*'
          privileges:
            - read
    kibana4_server:
      cluster:
          - monitor
      indices:
        - names: '.kibana'
          privileges:
            - all
  native:
    logstash:
      cluster:
        - manage_index_templates
      indices:
        - names: 'logstash-*'
          privileges:
            - write
            - delete
            - create_index
  • es_xpack_license - X-Packライセンス。ライセンスはJSONブロブです。変数を直接設定するか(可能であればAnsible Vaultで保護)、コントロールマシンのAnsibleプロジェクト内のファイルからルックアップを使用します:
es_xpack_license: "{{ lookup('file', playbook_dir + '/files/' + es_cluster_name + '/license.json') }}"

ライセンスを持たない場合は、es_xpack_trialtrueに設定することで30日間のトライアルを開始できます。

X-Packの構成パラメーターは、通常のes_configパラメーターを使用してelasticsearch.ymlファイルに追加できます。

完全な例についてはこちらをご覧ください。

ネイティブレルム設定に関する重要な注意事項

ネイティブユーザーと役割を設定するために、ロールはElasticsearch APIを呼び出します。セキュリティがインストールされているため、次の2つのパラメーターを定義する必要があります:

  • es_api_basic_auth_username - 管理者ユーザー名
  • es_api_basic_auth_password - 管理者パスワード

これらは、admin権限を持つファイルベースのレルムで宣言されたユーザーまたはデフォルトの「elastic」スーパーユーザー(デフォルトパスワードはchangeme)に設定できます。

X-PackセキュリティSSL/TLS

  • HTTPおよび/またはトランスポート通信のためにSSL/TLSでクラスターを設定するには、SSL/TLS設定手順をfollowしてください。

追加の構成

ES_CONFIGに加えて、次のパラメーターを使用すると、JavaおよびElasticsearchのバージョンやロールの挙動をカスタマイズできます。オプションには以下が含まれます:

  • oss_version デフォルトはfalse。これをtrueに設定すると、ElasticsearchのOSSリリースをインストールします(バージョン<7.11.0のみ)。

  • es_xpack_trial デフォルトはfalse。これをtrueに設定すると、クラスターが起動するときに30日間のトライアルが開始されます。

  • es_version (例:"7.17.0")。

  • es_api_host HTTPアクションに使用されるホスト名(例:テンプレートのインストール)。デフォルトは「localhost」です。

  • es_api_port HTTPアクションに使用されるポート(例:テンプレートのインストール)。デフォルトは9200です。HTTPポートが9200でない場合は変更します。

  • es_api_basic_auth_username 管理者変更アクションを実行するためのElasticsearchユーザー名。セキュリティが有効な場合に使用します。このユーザーはadminであることを確認してください。

  • es_api_basic_auth_password es_api_basic_auth_usernameで宣言されたユーザーに関連付けられたパスワード。

  • es_delete_unmanaged_file デフォルトはtrue。これをfalseに設定すると、ansibleの外部で追加されたファイルレルムユーザーが保持されます。

  • es_delete_unmanaged_native デフォルトはtrue。これをfalseに設定すると、ansibleの外部で追加されたネイティブレルムユーザーが保持されます。

  • es_start_service (true(デフォルト)またはfalse)

  • es_plugins_reinstall (trueまたはfalse(デフォルト))

  • es_plugins プラグイン定義の配列。例:

      es_plugins:
        - plugin: ingest-attachment
    
  • es_path_repo ローカルバックアップリポジトリを許可するためのホワイトリストを設定します。

  • es_action_auto_create_index 自動インデックス作成の値を設定します。インデックスを指定する場合は(他はtrue/false)次の構文を使用します: es_action_auto_create_index: '[".watches", ".triggered_watches", ".watcher-history-*"]'

  • es_allow_downgrades 開発目的でのみ使用します(trueまたはfalse(デフォルト))。

  • es_java_install trueに設定すると、Javaがインストールされます(false(7.xではデフォルト)またはtrue(6.xではデフォルト))。

  • update_java Javaを最新バージョンに更新します(trueまたはfalse(デフォルト))。

  • es_max_map_count プロセスが所有できる最大VMA(仮想メモリ領域)の数。デフォルトは262144。

  • es_max_open_files このプロセスによって開くことができる最大ファイル記述子番号。デフォルトは65536。

  • es_debian_startup_timeout Debian系のSysV initスクリプトがサービスの起動を待機する時間(秒)。デフォルトは10秒。

  • es_use_repository これをfalseに設定すると、Ansibleはシステム上の設定されたリポジトリから公式Elasticパッケージを使用しなくなります。

  • es_add_repository これをfalseに設定すると、Ansibleは公式Elasticパッケージリポジトリを追加しません(es_use_repositoryがtrueの場合)。すでに存在するリポジトリを使用したい場合に適しています。

  • es_custom_package_url AnsibleがインストールするrpmまたはdebパッケージのURL。この場合、es_use_repository: falseを設定し、es_versionがカスタムURLからインストールされるバージョンと一致する必要があります。例:es_custom_package_url: https://downloads.example.com/elasticsearch.rpm

前の例では、es_pluginsを使用してプラグインのインストールを示しています。公式サポートプラグインについては、バージョンやソースの区切りは必要ありません。プラグインスクリプトは、ターゲットElasticsearchバージョンに基づいて適切なプラグインバージョンを判断します。コミュニティベースのプラグインの場合は、完全なURLを含めてください。このアプローチはX-Packプラグインには使用しないでください。X-Packの詳細については、以下を参照してください。

監視またはアラートをインストールする場合は、ライセンスプラグインも指定してください。セキュリティ構成には現在制限がありますが、後のバージョンではより多くのサポートが計画されています。

X-Packをメール送信するように構成するには、次の構成をロールに追加できます。require_authがtrueの場合は、ユーザーとパスワードを提供する必要があります。そうでない場合は、これらを削除できます:

    es_mail_config:
        account: <機能名>
        profile: standard
        from: <送信元アドレス>
        require_auth: <trueまたはfalse>
        host: <メールドメイン>
        port: <ポート番号>
        user: <メールアドレス> --任意
        pass: <パスワード> --任意
  • es_user - デフォルトはelasticsearch。
  • es_group - デフォルトはelasticsearch。
  • es_user_id - デフォルトは未定義。
  • es_group_id - デフォルトは未定義。

es_user_idおよびes_group_idは、ユーザーおよびグループIDを設定するために設定する必要があります。

  • es_restart_on_change - デフォルトはtrue。falseの場合、変更がElasticsearchの再起動を引き起こすことはありません。
  • es_plugins_reinstall - デフォルトはfalse。trueの場合、ノードからすべての現在インストールされているプラグインが削除されます。その後、リストされたプラグインが再インストールされます。

Elasticsearch.keystoreエントリを追加、更新、または削除するには、次の変数を使用します:

# stateは任意でデフォルトはpresent
es_keystore_entries:
- key: someKeyToAdd
  value: someValue
  state: present

- key: someKeyToUpdate
  value: newValue
  # state: present
  force: Yes

- key: someKeyToDelete
  state: absent

このロールには、test/integration/files/templates-7.xディレクトリにサンプルテンプレートが含まれています。es_templates_fileglob変数は、Ansibleのwith_fileglobループと一緒に使用されます。グロブを設定する際は、絶対パスを使用してください。

プロキシ

グローバルにプロキシを定義するには、次の変数を設定します:

  • es_proxy_host - グローバルプロキシホスト
  • es_proxy_port - グローバルプロキシポート

注意事項

  • このロールは、サーバー上にユーザー/グループが存在することを前提としています。elasticsearchパッケージはデフォルトのelasticsearchユーザーを作成します。これを変更する必要がある場合は、ユーザーが存在することを確認してください。
  • プレイブックは、各ホストのinventory_nameに依存して、ディレクトリが一意になるようにします。
  • KitchenCIはテストに使用されています。これは、プレイが最初に適用された後、イメージが正しい状態に達することを確認するために使用されます。現時点では、すべてのサポートプラットフォームで最新の7.xおよび6.xをテストしています。
  • ロールは冪等性を目指しています。変更がない状態でロールを複数回実行すると、サーバーの状態に変化はありません。構成が変更されると、それが適用され、必要に応じてElasticsearchが再起動されます。
  • x-packテストを実行するには、セキュリティが有効なライセンスファイルが必要です。テストを実行する前に、環境変数ES_XPACK_LICENSE_FILEをライセンスファイルのフルパスに設定します。トライアルライセンスが適切であり、es_xpack_trialtrueに設定することで使用できます。

プラグイン管理に関する重要な注意事項

  • ESバージョンが変更されると、すべてのプラグインが削除されます。プレイブックにリストされたプラグインが再インストールされます。これはES 6.xで必要な動作です。
  • ノードのプレイブックにプラグインがリストされていない場合、現在インストールされているすべてのプラグインが削除されます。
  • このロールは、インストールされているプラグインとリストされたプラグインの違いを自動的に検出することをサポートしています - リストされたがインストールされていないものをインストールし、インストールされているがリストされていないものを削除します。ユーザーがプラグインを再インストールしたい場合は、es_plugins_reinstallをtrueに設定してください。これにより、現在インストールされているすべてのプラグインが削除され、リストされたプラグインがインストールされます。

使用に関する質問

ロールの使用方法についての質問は大歓迎です。ただし、GitHubのイシューリストを「イシュー」に焦点を当てて維持するために、コミュニティが質問をhttps://discuss.elastic.co/c/elasticsearchに投稿することをお願いします。これはメンテナによって監視されています。

プロジェクトについて

Elasticsearch for Linux

インストール
ansible-galaxy install elastic.elasticsearch
ライセンス
other
ダウンロード
4.2M
所有者