elastic.elasticsearch
アーカイブ
このプロジェクトはもはやメンテナンスされていません。
ご自身のニーズに合わせて引き続きご利用いただくことは歓迎します。Elasticsearch 8.x と一緒に利用することもできます。
別のスタートガイドを体験したい場合は、以下のオプションを試してみてください:
- 当社のホスティングサービス「Elastic Cloud」の無料トライアルを開始する。
- Kubernetesを介してスタックを立ち上げるためのElastic Cloud on Kubernetes (ECK)をご覧ください。
- DockerでElastic Stackを実行するガイドをお読みください。
- Elastic Stack Terraformプロバイダーもご覧ください。
ansible-elasticsearch
このロールは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変数と共に使用してください(以下を参照)。
- このAnsibleロールからは、特定のAnsible変数にカスタマイズを提供しない静的ファイルであるため、
バージョン >= 7.11.0 のOSSディストリビューション削除
Elasticsearch 7.11.0以降、OSSディストリビューションは最近のElasticsearchのライセンス変更に従って提供されなくなります。
oss_version
がtrue
に設定され、es_version
が7.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.0と6.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_host
、ansible_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_trial
をtrue
に設定することで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_trial
をtrue
に設定することで使用できます。
プラグイン管理に関する重要な注意事項
- ESバージョンが変更されると、すべてのプラグインが削除されます。プレイブックにリストされたプラグインが再インストールされます。これはES 6.xで必要な動作です。
- ノードのプレイブックにプラグインがリストされていない場合、現在インストールされているすべてのプラグインが削除されます。
- このロールは、インストールされているプラグインとリストされたプラグインの違いを自動的に検出することをサポートしています - リストされたがインストールされていないものをインストールし、インストールされているがリストされていないものを削除します。ユーザーがプラグインを再インストールしたい場合は、
es_plugins_reinstall
をtrueに設定してください。これにより、現在インストールされているすべてのプラグインが削除され、リストされたプラグインがインストールされます。
使用に関する質問
ロールの使用方法についての質問は大歓迎です。ただし、GitHubのイシューリストを「イシュー」に焦点を当てて維持するために、コミュニティが質問をhttps://discuss.elastic.co/c/elasticsearchに投稿することをお願いします。これはメンテナによって監視されています。
ansible-galaxy install elastic.elasticsearch