JumpServer PAM » Документация » Установка » Описание и пример настройки HA-кластера JumpServer

Описание и пример настройки HA-кластера JumpServer

JumpServer (в том числе Community Edition) полностью поддерживает кластеризацию HA без каких-либо ограничений. В этой статье я покажу, как это работает.

Зачем нужен HA-кластер для JumpServer

HA (High Availability) кластер для JumpServer необходим для обеспечения высокой доступности системы и минимизации простоев. Он позволяет:

  1. Избежать простоев: Если один из узлов кластера выходит из строя, другой продолжает обслуживать запросы пользователей.
  2. Обеспечить отказоустойчивость: Кластеризация позволяет системе автоматически переключаться на доступные узлы при возникновении ошибок.
  3. Увеличить производительность: Нагрузка распределяется между несколькими узлами, что улучшает отклик системы при одновременном использовании большого числа пользователей.
  4. Повысить надежность хранения данных: Использование общих ресурсов, таких как PostgreSQL(MySQL) и Redis, с поддержкой кластеризации минимизирует риск потери данных.
  5. Масштабируемость: Кластер можно легко расширить, добавив дополнительные узлы для обслуживания большего числа пользователей и задач.

Эта архитектура особенно важна для организаций, где JumpServer используется как критически важная система доступа и контроля.

Компоненты кластера JumpServer.

Ноды\Узлы JumpServer - основные узлы кластера, сервера с установленным JumpServer, каждый сервер не содержит "полезных" данных, можно клонировать\копировать, удалять\добавлять узлы JumpServer. 

База данных MySQL\PostgreSQL - основная СУБД для хранения всех данных JumpServer: хранит настройки системы, параметры устройств, учетных записей, пароли к целевым системам. Также по умолчанию хранит текстовые логи сессий: команды SSH, SQL запросы, введенные команды с клавиатуры в RDP сессии.
По умолчанию JumpServer создает\использует PostgreSQL внутри контейнера на том же сервере, где устанавливаете JumpServer.

База данных Redis - вспомогательная база данных для кэширования, настоятельно рекомендуется иметь единый Redis для всех нод кластера JumpServer
По умолчанию JumpServer создает\использует Redis внутри контейнера на том же сервере, где устанавливаете JumpServer.

Хранилище видеозаписей - по умолчанию хранит записи сессий в папке с продуктом $folder/core/data/media, где $folder - папка указанная в основном конфиг-файле, по умолчанию VOLUME_DIR=/data/jumpserver. Через веб-интерфейс продукта можно настроить внешнее хранилище видеозаписей: SFTP, S3, Ceph, MinIo и другие

Хранилище логов команд - по умолчанию хранятся в основной БД, через веб интерфейс можно настроить хранение команд и запросов в Elasticssearch.

Балансировщик - обычно на базе HAProxy, но можно использовать любой.

Архитектура кластера.

Обычно кластер JumpServer состоит из 2 и более узлов кластера, которые:

  • подключены к общей БД(или кластеру) PostgreSQL (MySQL)
  • подключены к общему Redis (единый Redis или кластер Sentinel)
  • имеют общую NFS Share для системных логов
  • Имеют общую СХД для хранения видеозаписей:
    - общая папка данными $folder/core/data/ (та же NFS Share как и для системных логов)
    ИЛИ
    - общая внешняя СХД для хранения сессий: SFTP, S3, Ceph, MinIo и другие
    ИЛИ
    - отдельная СХД для каждой ноды
  • имеют общую СХД для записей логов команд:
    - на базе общей БД(по умолчанию)
    ИЛИ
    - на базе общей внешней Elasticsrarch
    ИЛИ
    - отдельный Elasticsearch для каждой ноды кластера
  • балансировщик

Пример создания кластера HA JumpServer из 2 узлов

Пример создания кластера JumpServer
- с единой общей БД PostgreSQL(MySQL)
- с единой общей БД Redis
- с общей папкой для хранения видеозаписей $folder/core/data/ с помощью NFS сервера Linux

Для этого нам потребуется:

  1. Сервер с NFS, PostgreSQL, Redis:

    • 4 CPU, 8 ГБ оперативной памяти.
  2. Узел JumpServer Node1:

    • 4 CPU, 8 ГБ оперативной памяти, 100Гб свободного места на диске
  3. Узел JumpServer Node2:

    • 4 CPU, 8 ГБ оперативной памяти, 100Гб свободного места на диске
  4. Сервер HAProxy (или другой балансировщик нагрузки).


1. Подготовка сервера с NFS, PostgreSQL и Redis
  • Сервер: Ubuntu 22.04, IP: 10.10.50.10
Установка и настройка NFS

Команды могут отличаться для других версий Linux, но в целом нужно создать общую папку:

sudo apt install nfs-kernel-server
sudo mkdir -p /data
sudo chown -R nobody:nogroup /data/
sudo chmod 777 /data/
sudo nano /etc/exports

Добавьте строку в файл /etc/exports:

/data 10.10.50.10/24(rw,sync,no_subtree_check)

Примените настройки и перезапустите NFS-сервис:

sudo exportfs -a
sudo systemctl restart nfs-kernel-server
Установка и настройка PostgreSQL

Установка репозитория:

sudo apt update
sudo apt install -y wget gnupg2
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc|sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
sudo apt update

Установите PostgreSQL

sudo apt install -y postgresql-16 

Запустите

sudo systemctl enable postgresql
sudo systemctl start postgresql
sudo systemctl status postgresql

Создайте базу данных:

sudo -u postgres psql
CREATE DATABASE jumpserver;
CREATE USER jumpserver WITH PASSWORD 'KXOeyNgDeTdpeu9q';
GRANT ALL PRIVILEGES ON DATABASE jumpserver TO jumpserver;
\q

Откройте файл конфигурации

sudo vim /etc/postgresql/16/main/postgresql.conf

Измените параметр:

listen_addresses = '*'

Откройте файл конфигурации:

sudo vim /etc/postgresql/16/main/pg_hba.conf

И добавьте в конец файла:

host    all             all             0.0.0.0/0               md5

Настройте файрволл:

sudo ufw allow from 192.168.100.0/24 to any port 5432
sudo ufw reload

И перезапустите сервис для применения изменений:

sudo systemctl restart postgresql
sudo systemctl status postgresql
Установка и настройка Redis

Инструкции зависят от версии ОС. После установки Redis выполните:

sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /etc/redis.conf
sed -i "561i maxmemory-policy allkeys-lru" /etc/redis.conf
sed -i "481i requirepass KXOeyNgDeTdpeu9q" /etc/redis.conf

Это позволит доступ к Redis с паролем KXOeyNgDeTdpeu9q. Обязательно используйте уникальный пароль для вашего сервера. Откройте порт 6379 в файрволле.

2. Установка JumpServer
Установка первой ноды JumpServer
Монтирование каталога NFS

Установите клиент NFS, смонтируйте папку и настройте автоматическое монтирование при загрузке:

sudo apt install nfs-common
mkdir -p /opt/jumpserver/core/data
mount -t nfs 10.10.50.10:/data /opt/jumpserver/core/data
echo "10.10.50.10:/data /opt/jumpserver/core/data nfs defaults 0 0" >> /etc/fstab
Настройка конфигурации JumpServer

Редактируйте файл config-example.txt в папке установщика:

# Измените следующие параметры, остальные оставьте по умолчанию.
# ВАЖНО: SECRET_KEY должен совпадать на всех узлах JumpServer, иначе данные не будут расшифровываться.

VOLUME_DIR=/opt/jumpserver

SECRET_KEY=    
BOOTSTRAP_TOKEN=                                
LOG_LEVEL=ERROR                                                 
SESSION_EXPIRE_AT_BROWSER_CLOSE=True                            

# PostgreSQL 

DB_ENGINE=postgresql
DB_HOST=10.10.53.210
DB_PORT=5432
DB_USER=jumpserver
DB_PASSWORD=KXOeyNgDeTdpeu9q
DB_NAME=jumpserver

# Redis 

REDIS_HOST=10.10.50.10
REDIS_PORT=6379
REDIS_PASSWORD=KXOeyNgDeTdpeu9q

# KoKo Lion 
SHARE_ROOM_TYPE=redis                                            
REUSE_CONNECTION=False                                           

Запустите установку:

./jmsctl.sh install

После завершения установки вы получите значения для:

SECRET_KEY=kWQdmdCQKjaWlHYpPhkNQDkfaRulM6YnHctsHLlSPs8287o2kW    
BOOTSTRAP_TOKEN=KXOeyNgDeTdpeu9q
Установка второй ноды JumpServer

Установите клиент NFS, смонтируйте папку точно также как на первой ноде.

При редактировании файла конфигурации JumpServer заполните значения SECRET_KEY и BOOTSTRAP_TOKEN , полученные после установки первой ноды:

VOLUME_DIR=/opt/jumpserver

SECRET_KEY=kWQdmdCQKjaWlHYpPhkNQDkfaRulM6YnHctsHLlSPs8287o2kW    
BOOTSTRAP_TOKEN=KXOeyNgDeTdpeu9q                                
LOG_LEVEL=ERROR                                                 
SESSION_EXPIRE_AT_BROWSER_CLOSE=True                            

# PostgreSQL 

DB_ENGINE=postgresql
DB_HOST=10.10.53.210
DB_PORT=5432
DB_USER=jumpserver
DB_PASSWORD=KXOeyNgDeTdpeu9q
DB_NAME=jumpserver

# Redis 

REDIS_HOST=10.10.50.10
REDIS_PORT=6379
REDIS_PASSWORD=KXOeyNgDeTdpeu9q

# KoKo Lion 
SHARE_ROOM_TYPE=redis                                            
REUSE_CONNECTION=False 

И запустите установку

./jmsctl.sh install
Результат

После завершения настройки вы получите два узла JumpServer, которые используют один PostgreSQL/Redis сервер и хранилище NFS. Вы можете использовать любой из узлов для доступа к целевым устройствам или настроить HAProxy для автоматического перенаправления пользователей на активный узел.


<< Установка JumpServer Community Edition Настройка HAProxy для HA-кластера JumpServer >>

Нужна помощь?

Поддержка во время пилота JumpServer PAM Enterprise Edition

Вы начали тестирование JumpServer PAM EE и столкнулись с проблемой? Наш процесс включает в себя организацию групп переписок в электронной почте или групп в Telegram для оперативного решения вопросов. Если вы уверены, что вас не добавили в такую группу, обратитесь к вашему поставщику или к нам по адресу support@afi-d.ru

Обучение ваших специалистов настройке и администрированию JumpServer PAM

В рамках действующей подписки на техническую поддержку мы обучим ваших специалистов установке, настройке, адмнистрированию JumpServer PAM, а также восстановлению после ошибок и аварий.

Обучение проходит онлайн, по заранее согласованному плану, включает в себя обязательную проверку знаний на практике с выдачей именных сертификатов (в случае успешной сдачи экзамена).

Видео-инструкции

Посетите наш канал на RuTube с видео-инструкциями по настройке всех разделов JumpServer PAM. Видео на русском языке и актуализируются с выходом новых версий.

Техподдержка бесплатной редакции JumpServer PAM Community Edition

Мысль о внедрении непростой, но критичной для бизнеса PAM-системы может пугать кажущейся сложностью настройки системы, обучением администраторов и специалистов ИБ, изменениями в процессах работы с учетными записями.

Чтобы внедрение и настройка JumpServer Community Edition были комфортными, а также чтобы вы всегда могли обратиться за помощью к профессионалам, AFI Distribution предлагают годовую подписку на техническую поддержку.

Пакет поддержки в 1.5 млн рублей за экземпляр JumpServer Community Edition (без ограничений на количество пользователей и целевых систем) включает всё необходимое для использования PAM:

  • документацию на русском языке;
  • сценарии использования и рекомендуемые архитектуры для установки;
  • обучение администраторов и специалистов ИБ работе с JumpServer;
  • подсказки и решения для популярных вопросов;
  • оповещения о выходе новых версий с проверенной инструкцией для апгрейда;
  • подключение к Radius и многофактороной аутентификации «Мультифактор» ;
  • прямой доступ к инженеру (без первой линии) с понятным SLA.
Узнать больше и приобрести вы можете на странице Подписка на техподдержку