Elasti c .elasticsearch роль и Ansible Tower Dynami c Инвентарь - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь настроить кластер Elasticsearch на Ansible, используя официальную роль Elasti c Ansible elasti c .elasticsearch. Я установил Ansible Tower и Dynami c Inventory для своих AWS экземпляров. Я пометил свои экземпляры и сгруппировал их в 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, он не разрешает имена хостов, он просто передает его в виде строки, и поэтому кластер эластичного поиска завершается неудачей.

Это то, что я получаю властикомластик в кластере. members:

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 группа автомасштабирования и мои хосты динамические c ...

Приветствия, Драган

1 Ответ

0 голосов
/ 10 февраля 2020

Вот как я это исправил. Это может кому-то помочь.

Сначала я создал новую переменную, используя 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

Затем я настроил cluster.initial_master_nodes и discovery.seed_hosts в роли elasti c .elasticsearch следующим образом:

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

В результате результателастикомласти выбирает 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 автоматическое масштабирование и Ansible elasti c .elasticsearch роль для настройки кластера.

...