Некоторые из ключевых применений ElasticSearch – это аналитика логов, поисковая система, полнотекстовый поиск, бизнес-аналитика, аналитика безопасности и многон другое.
В этой настройке мы будем устанавливать кластер Elasticsearch 7.x с Ansible role (роли).
- Типы нод Elasticsearch
- Требования
- Условия хранения данных
- Шаг 1. Установите Ansible на рабочей станции.
- Шаг 2: импортируйте официальную ansuble role Elasticsearch
- Шаг 3: создайте плейбук для Elasticsearch и запустите его
- Создайте файл инвентари
- Шаг 4: Подтвердите установку кластера Elasticsearch на Ubuntu / CentOS
Типы нод Elasticsearch
- Matser нода: отвечают за операции на уровне кластера, такие как управление индексами и распределение хранилищ данных в data нодах.
- Data нода: они содержат фактические фрагменты индексированных данных и обрабатывают все операции CRUD, поиска и агрегирования. Они потребляют больше ресурсов процессора, памяти и ввода / вывода
Требования
Прежде чем начать, вам нужно установить и обновить как минимум три сервера CentOS 8/7.
Пользователь с привилегиями sudo или root будет также необходим для выполнения действий.
Моя установка основана на следующей структуре хостов:
Имя сервера | Характеристика | Роль ноды |
elk-master-01 | 16gb ram, 8vpcus | Master |
elk-master-02 | 16gb ram, 8vpcus | Master |
elk-master-03 | 16gb ram, 8vpcus | Master |
elk-data01 | 32gb ram, 16vpcus | Data |
elk-data02 | 32gb ram, 16vpcus | Data |
elk-data03 | 32gb ram, 16vpcus | Data |
В небольших средах вы можете использовать ноды как для данных, так и для мастер роли.
Условия хранения данных
Для data нод рекомендуется правильно настроить хранилище с учетом масштабируемости.
В моем примере каждая нода данных имеет диск 500 ГБ, смонтированный в /data.
Это было настроено с помощью команд, показанных ниже.
ВНИМАНИЕ: Не копируйте и не запускайте команды, они просто примеры
sudo parted -s -a optimal -- /dev/sdb mklabel gpt
sudo parted -s -a optimal -- /dev/sdb mkpart primary 0% 100%
sudo parted -s -- /dev/sdb align-check optimal 1
sudo pvcreate /dev/sdb1
sudo vgcreate vg0 /dev/sdb1
sudo lvcreate -n lv01 -l+100%FREE vg0
sudo mkfs.xfs /dev/mapper/vg0-lv01
echo "/dev/mapper/vg0-lv01 /data xfs defaults 0 0" | sudo tee -a /etc/fstab
sudo mount -a
Шаг 1. Установите Ansible на рабочей станции.
На Fedora:
sudo dnf install ansible
На CentOS:
sudo yum -y install epel-release
sudo yum install ansible
RHEL 7 / RHEL 8:
--- RHEL 8 ---
sudo subscription-manager repos --enable ansible-2.9-for-rhel-8-x86_64-rpms
sudo yum install ansible
--- RHEL 7 ---
sudo subscription-manager repos --enable rhel-7-server-ansible-2.9-rpms
sudo yum install ansible
Ubuntu:
sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
$ ansible --version
ansible 2.9.6
config file = /etc/ansible/ansible.cfg
configured module search path = ['/var/home/jkmutai/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.7.6 (default, Jan 30 2020, 09:44:41) [GCC 9.2.1 20190827 (Red Hat 9.2.1-1)]
Шаг 2: импортируйте официальную ansuble role Elasticsearch
После установки Ansible теперь вы можете импортировать роль ansible Elasticsearch в вашу локальную систему с помощью galaxy.
$ ansible-galaxy install elastic.elasticsearch,7.6.2
- downloading role 'elasticsearch', owned by elastic
- downloading role from https://github.com/elastic/ansible-elasticsearch/archive/7.6.2.tar.gz
- extracting elastic.elasticsearch to /var/home/jkmutai/.ansible/roles/elastic.elasticsearch
- elastic.elasticsearch (7.6.2) was installed successfully
Где 7.6.2 – версия выпуска роли Elasticsearch.
Вы можете проверить страницу релизов на соответствие версии Elasticsearch, которую вы хотите установить.
Роль будет добавлена в каталог ~/.ansible/role.
$ ls ~/.ansible/roles
total 4.0K
drwx------. 15 jkmutai jkmutai 4.0K May 1 16:28 elastic.elasticsearch
Сконфигурируйте ваш ssh для взаимодействия с хостами кластера Elasticsearch.
$ vim ~/.ssh/config
# Elasticsearch master ноды
Host elk-master01
Hostname 95.216.167.173
User root
Host elk-master02
Hostname 95.216.195.161
User root
Host elk-master03
Hostname 95.217.159.46
User root
# Elasticsearch worker ноды
Host elk-data01
Hostname 95.216.195.178
User root
Host elk-data02
Hostname 95.217.159.52
User root
Host elk-data03
Hostname 95.217.159.43
User root
Убедитесь, что вы скопировали ключи SSH на все машины.
--- Master ноды ---
for host in elk-master0{1..3}; do ssh-copy-id $host; done
--- Worker ноды ---
for host in elk-data0{1..3}; do ssh-copy-id $host; done
Подтвердить можно, зайдя по ssh без аутентификации по паролю.
$ ssh elk-master01
Warning: Permanently added '95.216.167.173' (ECDSA) to the list of known hosts.
[root@elk-master-01 ~]#
Если ваш закрытый ключ ssh имеет парольную фразу, сохраните ее, чтобы избежать запроса для каждой машины.
$ eval `ssh-agent -s` && ssh-add
Enter passphrase for /var/home/jkmutai/.ssh/id_rsa:
Identity added: /var/home/jkmutai/.ssh/id_rsa (/var/home/jkmutai/.ssh/id_rsa)
Шаг 3: создайте плейбук для Elasticsearch и запустите его
$ vim elk.yml
Содержимое:
- hosts: elk-master-nodes
roles:
- role: elastic.elasticsearch
vars:
es_enable_xpack: false
es_data_dirs:
- "/data/elasticsearch/data"
es_log_dir: "/data/elasticsearch/logs"
es_java_install: true
es_heap_size: "1g"
es_config:
cluster.name: "elk-cluster"
cluster.initial_master_nodes: "95.216.167.173:9300,95.216.195.161:9300,95.217.159.46:9300"
discovery.seed_hosts: "95.216.167.173:9300,95.216.195.161:9300,95.217.159.46:9300"
http.port: 9200
node.data: false
node.master: true
bootstrap.memory_lock: false
network.host: '0.0.0.0'
es_plugins:
- plugin: ingest-attachment
- hosts: elk-data-nodes
roles:
- role: elastic.elasticsearch
vars:
es_enable_xpack: false
es_data_dirs:
- "/data/elasticsearch/data"
es_log_dir: "/data/elasticsearch/logs"
es_java_install: true
es_config:
cluster.name: "elk-cluster"
cluster.initial_master_nodes: "95.216.167.173:9300,95.216.195.161:9300,95.217.159.46:9300"
discovery.seed_hosts: "95.216.167.173:9300,95.216.195.161:9300,95.217.159.46:9300"
http.port: 9200
node.data: true
node.master: false
bootstrap.memory_lock: false
network.host: '0.0.0.0'
es_plugins:
- plugin: ingest-attachment
Значение ключей:
- Для мастер нод в node.master установлено значение true, а для node.data установлено значение false.
- data ноды имеют в node.data значение true, а для node.master значение false.
- Переменная es_enable_xpack установлена в false для установки версии с открытым исходным кодом ElasticSearch.
- cluster.initial_master_nodes & discovery.seed_hosts указывают на мастер ноды
- /data/elasticsearch/data – это место хранения сегмента данных Elasticsearch. Рекомендуется, чтобы он был отдельным разделом от ОС по соображениям производительности и масштабируемости.
- /data/asticsearch/logs – это место, где будут храниться логи Elasticsearch.
- Каталоги будут созданы автоматически по такску. Вам нужно только убедиться, что /data – это точка монтирования желаемого хранилища данных для Elasticsearch.
Создайте файл инвентари
$ vim hosts
[elk-master-nodes]
elk-master01
elk-master02
elk-master03
[elk-data-nodes]
elk-data01
elk-data02
elk-data03
$ ansible-playbook -i hosts elk.yml
Выполнение плейбука должно начаться.
Будьте терпеливы, так как это может занять несколько минут.
PLAY [elk-master-nodes] ********************************************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************************************************
ok: [elk-master02]
ok: [elk-master01]
ok: [elk-master03]
TASK [elastic.elasticsearch : set_fact] ****************************************************************************************************************
ok: [elk-master02]
ok: [elk-master01]
ok: [elk-master03]
TASK [elastic.elasticsearch : os-specific vars] ********************************************************************************************************
ok: [elk-master01]
ok: [elk-master02]
ok: [elk-master03]
.......
PLAY RECAP *********************************************************************************************************************************************
elk-data01 : ok=38 changed=10 unreachable=0 failed=0 skipped=119 rescued=0 ignored=0
elk-data02 : ok=38 changed=10 unreachable=0 failed=0 skipped=118 rescued=0 ignored=0
elk-data03 : ok=38 changed=10 unreachable=0 failed=0 skipped=118 rescued=0 ignored=0
elk-master01 : ok=38 changed=10 unreachable=0 failed=0 skipped=119 rescued=0 ignored=0
elk-master02 : ok=38 changed=10 unreachable=0 failed=0 skipped=118 rescued=0 ignored=0
elk-master03 : ok=38 changed=10 unreachable=0 failed=0 skipped=118 rescued=0 ignored=0
Шаг 4: Подтвердите установку кластера Elasticsearch на Ubuntu / CentOS
Войдите на один из мастер нод
$ elk-master01
Проверьте состояние кластера.
$ curl http://localhost:9200/_cluster/health?pretty
{
"cluster_name" : "elk-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 6,
"number_of_data_nodes" : 3,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
Проверьте мастер ноды:
$ curl -XGET 'http://localhost:9200/_cat/master'
G9X__pPXScqACWO6YzGx3Q 95.216.167.173 95.216.167.173 elk-master01
$ curl -XGET 'http://localhost:9200/_cat/nodes'
95.217.159.43 7 47 1 0.02 0.03 0.02 di - elk-data03
95.216.167.173 10 34 1 0.00 0.02 0.02 im * elk-master01
95.217.159.46 13 33 1 0.00 0.01 0.02 im - elk-master03
95.216.195.161 14 33 1 0.00 0.01 0.02 im - elk-master02
95.217.159.52 7 47 1 0.00 0.03 0.03 di - elk-data02
95.216.195.178 6 47 1 0.00 0.02 0.02 di - elk-data01