
The multi-logstash pipeline setup, while amazingly fast, was crashing and causing index errors when under high load for a long period of time. Because of the crashing behavior and the fact that the folks from Elastic describe multi-pipeline queues to be "beta" at this time the logstash pipelines have been converted back into a single pipeline. The memory backed queue options are now limited by a ram disk (tmpfs) which will ensure that a burst within the queue does not cause OOM issues and ensures a highly performant deployment and limiting memory usage at the same time. Memory backed queues will be enabled when the underlying system is using "rotational" media as detected by ansible facts. This will ensure a fast and consistent experience across all deployment types. Pipeline/ml/template/dashboard setup has been added to the beat configurations which will ensure beats are properly configured even when running in an isolated deployment and outside of normal operations where beats are generally configured on the first data node. Change-Id: Ie3c775f98b14f71bcbed05db9cb1c5aa46d9c436 Signed-off-by: Kevin Carter <kevin.carter@rackspace.com>
147 lines
5.9 KiB
Django/Jinja
147 lines
5.9 KiB
Django/Jinja
# ---------------------------------- Cluster -----------------------------------
|
|
cluster.name: {{ cluster_name }}
|
|
# ------------------------------------ Node ------------------------------------
|
|
node.name: {{ ansible_nodename }}
|
|
# node.rack: r1
|
|
# Set to true to enable machine learning on the node.
|
|
node.ml: false
|
|
# ----------------------------------- Paths ------------------------------------
|
|
# Path to directory where to store the data (separate multiple locations by comma):
|
|
#
|
|
# path.data: /path/to/data
|
|
path.data: /var/lib/elasticsearch
|
|
#
|
|
# Path to log files:
|
|
#
|
|
#
|
|
# Path to log files:
|
|
#
|
|
# path.logs: /path/to/logs
|
|
#path.logs: /var/lib/elasticsearch/logs/
|
|
path.logs: /var/log/elasticsearch/
|
|
#
|
|
# Path to shared filesystem repos
|
|
#
|
|
# path.repo: ["/mount/backups", "/mount/longterm_backups"]
|
|
#
|
|
|
|
{% if elastic_shared_fs_repos is defined and elastic_shared_fs_repos|length > 0 %}
|
|
path.repo: {{ elastic_shared_fs_repos | json_query("[*].path") | to_json }}
|
|
{% endif %}
|
|
|
|
# Set the global default index store. More information on these settings can be
|
|
# found here:
|
|
# <https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-store.html>
|
|
index.store.type: niofs
|
|
|
|
# ----------------------------------- Memory -----------------------------------
|
|
#
|
|
# Lock the memory on startup:
|
|
#
|
|
bootstrap.memory_lock: {{ elastic_memory_lock }}
|
|
#
|
|
# Make sure that the `ES_HEAP_SIZE` environment variable is set to about half the memory
|
|
# available on the system and that the owner of the process is allowed to use this limit.
|
|
#
|
|
# Elasticsearch performs poorly when the system is swapping the memory.
|
|
#
|
|
# ---------------------------------- Network -----------------------------------
|
|
#
|
|
# Set the bind address to a specific IP (IPv4 or IPv6):
|
|
network.host: ["127.0.0.1", "{{ ansible_host }}", "{{ ansible_hostname }}"]
|
|
{% if elasticsearch_publish_host is defined %}
|
|
network.publish_host: "{{ elasticsearch_publish_host }}"
|
|
{% endif %}
|
|
# Set a custom port for HTTP:
|
|
|
|
http.port: {{ elastic_port }}
|
|
# --------------------------------- Discovery ----------------------------------
|
|
#
|
|
# Pass an initial list of hosts to perform discovery when new node is started:
|
|
# The default list of hosts is ["127.0.0.1", "[::1]"]
|
|
#
|
|
# Node definitions can be seen here:
|
|
#<https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-node.html>
|
|
discovery.zen.ping.unicast.hosts: {{ zen_nodes | to_json }}
|
|
# Prevent the "split brain" by configuring the majority of nodes (total number of nodes / 2 + 1):
|
|
discovery.zen.minimum_master_nodes: {{ ((master_node_count | int) // 2) + 1 }}
|
|
# The first set of nodes in the master_node_count are marked as such
|
|
node.master: {{ elasticsearch_node_master | default(master_node) }}
|
|
# Every node in the master list and every other node after will be a data node
|
|
node.data: {{ elasticsearch_node_data | default(data_node) }}
|
|
# Ingest nodes can execute pre-processing pipelines. To override automatic
|
|
# determination, the option `elasticsearch_node_ingest` can be defined as a
|
|
# Boolean which will enable or disable ingest nodes. When using automatic
|
|
# determination, ingest nodes will follow data nodes.
|
|
#
|
|
# NOTE(cloudnull): The use of "search remote connect" will follow the enablement
|
|
# of an ingest nodes.
|
|
{% if elasticsearch_node_ingest is defined %}
|
|
node.ingest: {{ elasticsearch_node_ingest }}
|
|
search.remote.connect: {{ elasticsearch_node_ingest }}
|
|
{% else %}
|
|
node.ingest: {{ data_node }}
|
|
search.remote.connect: {{ data_node }}
|
|
{% endif %}
|
|
|
|
# For more information, see the documentation at:
|
|
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery.html>
|
|
#
|
|
# ---------------------------------- Gateway -----------------------------------
|
|
#
|
|
# Block initial recovery after a full cluster restart until N nodes are started:
|
|
#
|
|
gateway.recover_after_nodes: {{ ((master_node_count | int) // 2) + 1 }}
|
|
#
|
|
# For more information, see the documentation at:
|
|
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-gateway.html>
|
|
#
|
|
# ---------------------------------- Various -----------------------------------
|
|
#
|
|
# Disable starting multiple nodes on a single system:
|
|
#
|
|
# node.max_local_storage_nodes: 1
|
|
#
|
|
# Require explicit names when deleting indices:
|
|
#
|
|
action.destructive_requires_name: true
|
|
|
|
{% set processors = ((elastic_thread_pool_size | int) > 0) | ternary(elastic_thread_pool_size, 1) %}
|
|
{% if not (elastic_coordination_node | default(false)) | bool %}
|
|
# Thread pool settings. For more on this see the documentation at:
|
|
# <https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.html>
|
|
thread_pool:
|
|
index:
|
|
queue_size: {{ (processors | int) * 256 }}
|
|
get:
|
|
queue_size: {{ (processors | int) * 256 }}
|
|
write:
|
|
queue_size: {{ (processors | int) * 512 }}
|
|
{% else %}
|
|
# The number of processors is automatically detected, and the thread pool
|
|
# settings are automatically set based on it. In some cases it can be useful to
|
|
# override the number of detected processors. This can be done by explicitly
|
|
# setting the processors setting. On Kibana hosts where elasticsearch is running
|
|
# as a coordination node, the processor count is limited.
|
|
processors: {{ processors }}
|
|
{% endif %}
|
|
|
|
|
|
# Accepts either a percentage or a byte size value. Set to 20%, meaning that 20%
|
|
# of the total heap allocated to a node will be used as the indexing buffer size
|
|
# shared across all shards.
|
|
indices.memory.index_buffer_size: 20%
|
|
|
|
# Connection throttling on recovery is limited to 20% of the detected interface
|
|
# speed with a cap of 750mb. This will improce search speeds and reduce general
|
|
# cluster pressure.
|
|
indices.recovery.max_bytes_per_sec: {{ elasticserch_interface_speed }}mb
|
|
|
|
# ---------------------------------- X-Pack ------------------------------------
|
|
# X-Pack Monitoring
|
|
# https://www.elastic.co/guide/en/elasticsearch/reference/6.3/monitoring-settings.html
|
|
xpack.monitoring.collection.enabled: true
|
|
xpack.monitoring.collection.interval: 30s
|
|
# Set to true to enable machine learning on the node.
|
|
xpack.ml.enabled: false
|