elastic.elasticsearch
已存档
该项目不再维护。
您可以继续使用并根据自己的需求进行调整,包括与 Elasticsearch 8.x 一起使用。
对于替代的入门体验,您可以尝试以下选项:
- 在 Elastic Cloud 上开始免费试用,这是我们的托管服务。
- 查看 Kubernetes 上的 Elastic Cloud (ECK),以通过 Kubernetes 启动堆栈。
- 阅读我们的在 Docker 上运行 Elastic Stack指南。
- 查看 Elastic Stack Terraform 提供程序。
ansible-elasticsearch
此角色适用于 7.x 和 6.x,但应该仍然适用于 8.x(请参见注释)。
Ansible 角色适用于 7.x/6.x Elasticsearch - 测试曾在以下平台上运行并通过:
- Ubuntu 16.04
- Ubuntu 18.04
- Ubuntu 20.04
- Debian 8
- Debian 9
- Debian 10
- CentOS 7
- Amazon Linux 2
破坏性更改
有关多实例支持的通知
- 如果您只使用一个实例但想从较旧的 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 正在更新此角色提供的配置文件 #637,这些配置文件中包含在 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 角色中移除了
log4j2.properties.j2
模板,因为它是一个静态文件,不提供与某些 ansible 变量相关的自定义。 - 在新服务器上部署此 Ansible 角色将获得 Elasticsearch 提供的默认
log4j2.properties
,没有任何覆盖。 - 警告:对于已经由以前版本的 ansible-elasticsearch 管理的升级场景,此文件将变为不被管理,默认情况下不会更新。如果您希望将其更新为 7.5 版本,可以从这里获取此文件,并使用
es_config_log4j2
Ansible 变量(见下文)。
- 我们从此 Ansible 角色中移除了
移除 >= 7.11.0 版本的 OSS 分发版
从 Elasticsearch 7.11.0 开始,将不再提供 OSS 分发版,原因是最近的 Elasticsearch 许可变更。
如果将 oss_version
设置为 true
,并且 es_version
大于 7.11.0
,则此 Ansible 角色将会失败。
详细信息请参见 加倍押注开放,第二部分 博客文章。
如何覆盖 ansible-elasticsearch 提供的配置文件?
您现在可以通过使用以下 Ansible 变量来覆盖配置文件:
es_config_default: "elasticsearch.j2"
:将elasticsearch.j2
替换为您自己的模板,以使用自定义的/etc/default/elasticsearch
|/etc/sysconfig/elasticsearch
配置文件。es_config_jvm: "jvm.options.j2"
:将jvm.options.j2
替换为您自己的模板,以使用自定义的/etc/elasticsearch/jvm.options
配置文件。es_config_log4j2: ""
:将此变量设置为您自己的模板路径,以使用自定义的/etc/elasticsearch/log4j2.properties
配置文件。
依赖关系
此角色使用 json_query 过滤器,它需要 jmespath 在本地机器上。
使用方法
创建您的 Ansible playbook,编写您自己的任务,并包含 elasticsearch 角色。在 playbook 的上下文中,您需要能够访问该存储库。
ansible-galaxy install elastic.elasticsearch,v7.17.0
然后创建您的 playbook yaml,添加 elasticsearch 角色。 应用 elasticsearch 角色将导致在主机上安装一个节点。
因此,最简单的配置是:
- name: 简单示例
hosts: localhost
roles:
- role: elastic.elasticsearch
vars:
es_version: 7.17.0
上述配置将在主机 'localhost' 上安装 Elasticsearch 7.17.0 的单节点 'node1'。
注意:
Elasticsearch 的默认版本在 es_version
中描述。您可以在您的 playbook 中覆盖此变量以安装另一个版本。
虽然我们只在一个 7.x 和一个 6.x 版本上测试此角色(分别为 7.17.0 和 6.8.23),但该角色在大多数情况下也应适用于其他版本。
此角色还使用 Ansible 标签。使用 --list-tasks
标志运行 playbook 以获取更多信息。
测试
此 playbook 使用 Kitchen 进行 CI 和本地测试。
要求
- Ruby
- Bundler
- Docker
- Make
运行测试
- 确保您已经将此存储库检出为
elasticsearch
,而不是ansible-elasticsearch
。 - 如果您没有可供测试的 Gold 或 Platinum 许可证,可以通过将
-trial
附加到PATTERN
变量来运行xpack-upgrade
套件的试用版本。 - 如果某些套件失败,您可能需要明确指定
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
默认测试套件是 Ubuntu 16.04 与 X-Pack。如果您想测试另一个套件,可以使用 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 playbook 不需要更新以反映新的/弃用的/插件配置参数。
除了 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
角色映射文件声明为 yml,如 此处 所述
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
- 可以在此处声明用户为 yml。两个子键 'native' 和 'file' 确定用户创建的领域。在每个键下,用户应声明为 yml 条目,例如:
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 角色作为 yml。两个子键 '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 blob。可以直接设置该变量(可能受 Ansible vault 保护)或通过查找从控制机上的一个文件获取:
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。考虑到安全性已安装,这需要定义两个参数:
es_api_basic_auth_username
- 管理员用户名es_api_basic_auth_password
- 管理员密码
这些可以设置为文件中声明的用户,具有管理员权限,或者是默认的 "elastic" 超级用户(默认密码为 changeme)。
X-Pack 安全 SSL/TLS
- 要使用 SSL/TLS 为 HTTP 和/或传输通信配置您的集群,请按照 SSL/TLS 设置程序 操作。
其他配置
除了 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 用户名。如果启用了安全性,请使用该用户。确保此用户为管理员。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 初始化脚本等待服务启动的时间(以秒为单位)。默认为 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 用户。如果需要更改此用户,请确保用户存在。
- playbook 依赖于每个主机的 inventory_name,以确保其目录唯一。
- KitchenCI 已用于测试。这用于确认映像在首次应用 play 之后达到正确状态。我们目前在所有受支持平台上测试最新版本的 7.x 和 6.x。
- 该角色旨在具备幂等性。多次运行该角色,不做更改,应不会导致服务器状态变化。如果配置更改,这些更改将被应用,Elasticsearch 在需要时重启。
- 为了运行 x-pack 测试,需要提供带安全性启用的许可证文件。在运行测试之前将环境变量
ES_XPACK_LICENSE_FILE
设置为许可证文件的完整路径。试用许可证是适用的,并可以通过将es_xpack_trial
设置为true
使用。
有关插件管理的重要说明
- 如果更改 ES 版本,将删除所有插件。使用 playbook 列出的插件将重新安装。这种行为在 ES 6.x 中是必需的。
- 如果在 playbook 中未为节点列出任何插件,则将删除所有当前安装的插件。
- 该角色支持自动检测当前安装的插件与列出插件之间的差异 - 安装那些列出但未安装的插件,并删除那些已安装但未列出的插件。如果用户希望重新安装插件,应将
es_plugins_reinstall
设置为 true。这将导致删除所有当前安装的插件并安装列出的插件。
使用问题
我们欢迎有关如何使用该角色的问题。然而,为了使 GitHub 问题列表关注“问题”,我们要求社区在 https://discuss.elastic.co/c/elasticsearch 提出问题。维护者会对此进行监督。