elastic.elasticsearch

已存档

该项目不再维护。

您可以继续使用并根据自己的需求进行调整,包括与 Elasticsearch 8.x 一起使用。

对于替代的入门体验,您可以尝试以下选项:

ansible-elasticsearch

Ansible Galaxy

此角色适用于 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

破坏性更改

有关多实例支持的通知

移除 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 变量(见下文)。

移除 >= 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.06.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_hostansible_ssh_useransible_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_passwordes_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_ides_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 提出问题。维护者会对此进行监督。

关于项目

Elasticsearch for Linux

安装
ansible-galaxy install elastic.elasticsearch
许可证
other
下载
4.2M
拥有者