🐧 Настройка кластера Elasticsearch на CentOS 8/7 | Ubuntu 20.04 / 18.04 с Ansible – Information Security Squad
🐧 Настройка кластера Elasticsearch на CentOS 8/7 | Ubuntu 20.04 / 18.04 с Ansible
Elasticsearch – это мощный распределенный поисковый и аналитический движок реального времени с открытым исходным кодом, который предоставляет возможность полнотекстового поиска.
Elasticsearch построен на Apache Lucene, и это программное обеспечение свободно доступно под лицензией Apache 2.
В этой статье мы установим кластер Elasticsearch на CentOS 8/7 и Ubuntu 20.04 / 18.04, используя инструмент автоматизации Ansible.
Это руководство поможет пользователям Linux установить и настроить высокодоступный мультинодный кластер Elasticsearch в системах CentOS 8 / CentOS 7 и Ubuntu 20.04 / 18.04 Linux.

Некоторые из ключевых применений ElasticSearch – это аналитика логов, поисковая система, полнотекстовый поиск, бизнес-аналитика, аналитика безопасности и многон другое.

В этой настройке мы будем устанавливать кластер Elasticsearch 7.x с Ansible role (роли).

Типы нод Elasticsearch

Существует два распространенных типа нод 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 на рабочей станции.

Мы будем использовать Ansible для настройки кластера Elasticsearch на CentOS 8/7.
Убедитесь, что 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.
Подтвердите установку 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]
.......
Успешное выполнение ANSIBLE покажет вам результат, аналогичный приведенному ниже.
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

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *