【问题标题】:Elastic.elasticsearch role and Ansible Tower Dynamic InventoryElastic.elasticsearch 角色和 Ansible Tower 动态清单
【发布时间】:2020-05-24 21:57:52
【问题描述】:

我正在尝试使用官方 Elastic Ansible 角色 elastic.elasticsearch 在 Ansible 上配置 Elasticsearch 集群。我为我的 AWS 实例设置了 Ansible 塔和动态清单。我标记了我的实例并将它们全部分组在 tag_Group_Elasticsearch 中。这是 Ansible 代码:

  hosts: tag_Group_Elasticsearch
  roles:
    - role: elastic.elasticsearch
  vars:
    es_heap_size: "2g"
    es_config:
      network.host: 0.0.0.0
      cluster.name: "prod-cluster"
      cluster.initial_master_nodes: "tag_Group_Elasticsearch"
      discovery.seed_hosts: "tag_Group_Elasticsearch"
      http.port: 9200
      node.master: true
      bootstrap.memory_lock: false
    es_plugins:
     - plugin: ingest-attachment

因此,当我想在角色中使用该组时,它在主持该剧的一部分时效果很好。它很好地解决并适用于组中的所有主机。但是当我想在 es_config 变量中使用它时,它不会解析为主机名,它只是将它作为字符串传递,因此,elasticsearch 集群失败。

这是我在集群成员的 elasticsearch.yml 中得到的:

cluster.initial_master_nodes: tag_Group_Elasticsearch
discovery.seed_hosts: tag_Group_Elasticsearch

我需要的是:

cluster.initial_master_nodes: "192.168.x.x, 192.168.x.x, 192.168.x.x "
discovery.seed_hosts: "192.168.x.x, 192.168.x.x, 192.168.x.x"

我无法在 cluster.initial_master_nodes 和 discovery.seed_hosts 中手动添加主机名,因为我的 Elasticsearch 集群是基于 AWS 自动缩放组构建的,并且我的主机是动态的...

干杯, 德拉甘

【问题讨论】:

标签: elasticsearch ansible autoscaling ansible-inventory ansible-tower


【解决方案1】:

这是我解决此问题的方法。它可能对某人有所帮助。

首先我使用 set_fact 创建了新变量:

- name: Determine nodes to join
  hosts: tag_Group_Elasticsearch
  become: true
  tasks:
  - name: Setting nodes IPs
    set_fact:
      join_list: "{{ groups['tag_Group_Elasticsearch'] | map('extract', hostvars, ['ansible_host']) | list }}" # instead 'ansible_host' you can use the folloving variables as well: ansible_fqdn, ec2_private_ip_address or ansible_nodename

然后我在 elastic.elasticsearch 角色中配置 cluster.initial_master_nodes 和 discovery.seed_hosts 如下:

cluster.initial_master_nodes: "{{ join_list | join(',') }}"
discovery.seed_hosts: "{{ join_list | join(',') }}"

结果 elasticsearch.yaml 获取了节点的 IP 地址:

cluster.initial_master_nodes: 10.174.x.x,10.174.x.x,10.174.x.x
discovery.seed_hosts: 10.174.x.x,10.174.x.x,10.174.x.x

现在,无论何时将新节点添加到组中,在本例中为 tag_Group_Elasticsearch,该节点都会自动添加到 cluster.initial_master_nodes 和 discovery.seed_hosts。

当您在 AWS (EC2) 中有集群节点以及使用 AWS Auto Scaling 和 Ansible elastic.elasticsearch 角色设置集群时,此配置非常有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多