Продолжение серии статей о том, как выполняется установка и настройка Splunk в отказоустойчивой конфигурации. В этой публикации я расскажу о том, как выполняется настройка кластера Search Head, т.е. в этой статье мы будем говорить про вот эту часть:

Из общей схемы развертывания распределенной архитектуры.
Предварительно нужно выполнить подготовку серверов Linux.
Установка Splunk
Этот шаг включает в себя установки Splunk. Я буду использовать версию 8.0.10.
Необходимо установить Splunk на следующие сервера:
- spl_sh01
- spl_sh02
На сервере spl_mgr01 Splunk был установлен в прошлой публикации.
Сервер spl_mgr01 будет выступать в качестве менеджера кластера, а сервера spl_sh01 и spl-sh02 будут являться узлами кластера.
В качестве опорного руководства по установке я использовал свою же статью. Только с поправкой на версию 8.0.10.
Настройка лицензии
На кажждом из серверов нужно настроить адрес для получения лицензии от сервиса лицензирования.
Для этого выполним следующие шаги. Я покажу на примере сервера spl_idx01:
1. Перейдем в соответствующий раздел настроек:
https://10.10.10.27/en-GB/manager/system/licensing

2. Нажмем на кнопку “Change to slave”.
3. Укажем адрес сервера лицензирования.

4. Перезапустим сервис Splunk.

5. Выполнить шаги из пунктов выше на сервере spl_sh02.
Настройка кластера Search Head
Теперь перейдем непосредственно к настройке кластера.
Подготовка Deployer
Сначала подготовим менеджер кластера на сервере spl_mgr01 (10.10.10.19):
1. Укажем кластерный ключ:
sudo nano /opt/splunk/etc/system/local/server.conf
2. В секции [shclustering] добавим параметр pass4SymmKey:
[shclustering]
pass4SymmKey = Qwerty123

3. Сохраните внесенные изменения. Splunk затем сам хеширует этот ключ.
4. Перезапустим Splunk.
sudo systemctl restart Splunkd
Подготовка узлов кластера
Теперь выполним настройки на узлах:
1. Подключимся к первому узлу Search Head – spl_sh01 (10.10.10.27).
2. Добавим его в кластер Search Head:
sudo /opt/splunk/bin/splunk init shcluster-config -mgmt_uri https://10.10.10.27:8089 -replication_port 8088 -conf_deploy_fetch_url https://10.10.10.19:8089 -secret Qwerty123 -shcluster_label sh_cluster
3. Перезапустим Splunk на spl_sh01:
sudo systemctl restart Splunkd
4. Теперь добавим второй узел кластера – spl_sh02 (10.10.10.28):
sudo /opt/splunk/bin/splunk init shcluster-config -mgmt_uri https://10.10.10.28:8089 -replication_port 8088 -conf_deploy_fetch_url https://10.10.10.19:8089 -secret Qwerty123 -shcluster_label sh_cluster
5. Перезапустим Splunk на spl_sh02:
sudo systemctl restart Splunkd
6. Теперь выберем капитана. На одном из узлов кластера выполним команду:
sudo /opt/splunk/bin/splunk bootstrap shcluster-captain -servers_list "https://10.10.10.27:8089,https://10.10.10.28:8089"
[root@spl-sh01 roman]# sudo /opt/splunk/bin/splunk bootstrap shcluster-captain -servers_list "https://10.10.10.27:8089,https://10.10.10.28:8089"
Successfully bootstrapped this node as the captain with the given servers.
[root@spl-sh01 roman]#
Проверка работы кластера
Потребуется некоторое время на то, чтобы кластер полностью инициализировался. В моем случае это заняло около 10 минут.
Проверить статус кластера Search Head можно вот такой командой:
sudo /opt/splunk/bin/splunk show shcluster-status
[root@spl-sh01 roman]# sudo /opt/splunk/bin/splunk show shcluster-status
Captain:
dynamic_captain : 1
elected_captain : Wed Apr 23 21:28:15 2025
id : 193D0DB7-A468-4E23-9FBB-A52D3B029227
initialized_flag : 0
label : spl-sh01.itproblog.ru
mgmt_uri : https://10.10.10.27:8089
min_peers_joined_flag : 0
rolling_restart_flag : 0
service_ready_flag : 0
Members:
spl-sh01.itproblog.ru
label : spl-sh01.itproblog.ru
mgmt_uri : https://10.10.10.27:8089
mgmt_uri_alias : https://10.10.10.27:8089
status : Up
spl-sh02.itproblog.ru
label : spl-sh02.itproblog.ru
last_conf_replication : Pending
mgmt_uri : https://10.10.10.28:8089
mgmt_uri_alias : https://10.10.10.28:8089
status : Up
[root@spl-sh01 roman]#

Подключение серверов Search Head к индексаторам
Теперь подключим сервера Search Head к индексаторам. Для этого на каждом из узлов Search Head необходимо:
1. Выполнить команду:
sudo /opt/splunk/bin/splunk edit cluster-config -mode searchhead -master_uri https://10.10.10.19:8089 -secret Qwerty123
2. Перезапустить службу Splunk:
sudo systemctl restart Splunkd
3. Перейдем на страницу управления кластером на менеджере кластера:
https://10.10.10.19/en-GB/manager/system/clustering?tab=searchheads
Там должны отобразиться два наших узла Search Head

Настройка балансировщика
Теперь настроим балансировку трафика между двумя узлами Search Head. Для этого нам понадобится третий сервер – spl_lb01. Последовательность действий:
1. Подключимся по SSH на сервер spl_lb01 и отключим SELinux:
sudo setenforce 0
2. Установим nginx:
sudo dnf install -y nginx
sudo systemctl enable --now nginx
3. Создадим директорию для сертификатов:
sudo mkdir -p /etc/nginx/ssl
4. Скопируем сертификаты в директорию /etc/nginx/ssl и настроим разрешения:
sudo chmod -R 440 /etc/nginx/ssl/
sudo chown -R root:root /etc/nginx/ssl/

5. Откроем для редактирования конфигурационный файл nginx:
sudo nano /etc/nginx/nginx.conf
6. В блок http добавил следующие директивы:
upstream splunk {
ip_hash;
server 10.10.10.27:443;
server 10.10.10.28:443;
}
server {
listen 80;
listen [::]:80;
server_name sh.itproblog.ru;
#root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
return 301 https://$host$request_uri;
}
# Settings for a TLS enabled server.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name sh.itproblog.ru;
#root /usr/share/nginx/html;
ssl_certificate "/etc/nginx/ssl/itproblog_wild.crt";
ssl_certificate_key "/etc/nginx/ssl/itproblog_wild.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass https://splunk;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
real_ip_header X-Real-IP;
}
}
7. Проверим конфигурацию сервиса nginx:
sudo nginx -t

8. Перезапустим сервис nginx:
sudo systemctl restart nginx
9. Попробуем подключиться к серверам SH через балансировщик:
https://sh.itproblog.ru/

Подключение через балансировщик работает корректно.