Продукты: Indeed CM
Затрагиваемые компоненты:
Для серверов Indeed CM возможно использовать балансировщик нагрузок HAProxy. Для обеспечения отказоустойчивости самого сервера с HAProxy рекомендуется развернуть второй сервер и использовать конфигурацию HAProxy + Keepalived.
Для установки и настройки HAProxy + Keepalived выполните следующие действия:
1. Разверните два сервера с Ubuntu (LTS).
2. Введите их в сеть. Добавьте соответствия IP и DNS имени в файле /etc/hosts для серверов Indeed CM и серверов Ubuntu c HAProxy + Keepalived.
3. Выполните установку HAProxy на первом сервере:
- Запустите терминал
- Установите HAProxy: sudo apt-get install haproxy
- Для дальнейшего удобства установите Midnight Commander: sudo apt-get install mc
- Откройте Midnight Commander: sudo mc
- Откройте файл /etc/default/haproxy и добавьте строку ENABLED=1 (Эта настройка позволяет автоматически запускать HAProxy при загрузке системы)
- Отредактируйте файл конфигурации HAProxy: /etc/haproxy/haproxy.cfg используя пример:
global
log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy maxconn 4096 stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s user haproxy group haproxy daemon
# Default SSL material locations
# ca-base /etc/ssl/certs # crt-base /etc/ssl/private
ca-base /etc/ssl/cm # Путь к сертификатам crt-base /etc/ssl/cm # Путь к сертификатам
# TODO:....
# ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS # ssl-default-bind-options no-sslv3
defaults
log global mode http option httplog option dontlognull option abortonclose option splice-auto retries 3 # Кол-во попыток до того, как понизить статус сервера option redispatch # Позволит пользователям пройти к другому серверу если сервер, на который ссылаются их куки, не работает
# Тайм ауты
timeout connect 30s timeout client 5400s timeout server 5400s timeout check 10s errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http
# Модуль статистики. Доступен по http://<IP адрес сервера>:9000/haproxy_stats Login:admin Pass:admin
listen stats
bind *:9000 mode http stats enable # Enable stats page stats refresh 30s # Refresh page stats realm Haproxy\ Statistics # Title text for popup window stats uri /haproxy_stats # Stats URI stats auth admin:admin # Authentication credentials
############################################# ########### CM SSL Pass-Through ############# #############################################
frontend frontend_cm_80
maxconn 10000 bind *:80 redirect scheme https if !{ ssl_fc } # redirect to https option tcplog
frontend frontend_cm_443
maxconn 12000 bind *:443 mode tcp # full-duplex connection will be established between clients and servers, and no layer 7 examination will be performed option tcplog default_backend backend_cm_443
backend backend_cm_443
mode tcp # full-duplex connection will be established between clients and servers, and no layer 7 examination will be performed fullconn 12000 balance roundrobin # Алгоритм выбора сервера (наименее загруженный по порядку) default-server weight 100 maxconn 800 port 443 server indeed1 IndeedCM1.demo.local:443 check # DNS имя сервера Indeed CM1 server indeed2 IndeedCM2.demo.local:443 check # DNS имя сервера Indeed CM2
- Проверить файл конфигурации можно командой: haproxy -c -f /etc/haproxy/haproxy.cfg
- Запустите HAProxy sudo /etc/init.d/haproxy start. Перезапуск сервиса выполняется командами: sudo systemctl restart haproxy или sudo service haproxy restart
- Проверьте работу сервиса перейдя по ссылке: http://<IP адрес сервера Ubuntu c haproxy>:9000/haproxy_stats Login: admin Pass: admin (для конфигурации из примера). Ниже на скриншоте продемонстрирована работа сервиса HAProxy с двумя серверами Indeed CM.
Полезные ссылки для настройки файла конфигурации:
4. Установите Keepalived на первом сервере:
https://www.leaseweb.com/labs/2011/09/setting-up-keepalived-on-ubuntu-load-balancing-using-haproxy-on-ubuntu-part-2/
- Для этого выполните команду sudo apt-get install keepalived
- Отредактируйте файл /etc/sysctl.conf добавив строки:
net.ipv4.ip_forward=1
net.ipv4.ip_nonlocal_bind=1
- Выполните команду sudo sysctl -p для проверки добавленных изменений
- Создайте файл конфигурации /etc/keepalived/keepalived.conf
- Настройте файл конфигурации согласно примеру:
# Keepalived process identifier
lvs_id haproxy_DH }
# Script used to check if HAProxy is running
vrrp_script check_haproxy { script "killall -0 haproxy" interval 2 weight 2 }
# Virtual interface # The priority specifies the order in which the assigned interface to take over in a failover
vrrp_instance VI_01 { state MASTER # MASTER для основного сервера, BACKUP для резевного interface ens33 # Имя интерфейса можно узнать с помощью команды ifconfig virtual_router_id 51 priority 101 # Для основного сервера с haproxy 101, для резевного 100
# The virtual ip address shared between the two loadbalancers
virtual_ipaddress { 192.168.43.101 # Виртуальный IP, по которому будет доступен keepalived }
track_script { check_haproxy } }
- Сохраните и закройте файл конфигурации
- Для виртуального адреса из примера: 192.168.43.101 создайте A-запись в DNS (например, на имя cm.demo.local). DNS Manager>Forward Lookup Zones>New Host (A or AAAA)… По этому адресу в дальнейшем будут доступны сервера Ubuntu c балансировщиком нагрузок HAProxy
- Запустите keepalived командой /etc/init.d/keepalived start. Проверить работоспособность сервиса можно командой: ip addr show ens33 (имя сетевого интерфейса). Для перезагрузки службы используйте команду: sudo service keepalived restart
5. По аналогии с п. 3 выполните настройку HAProxy на втором сервере с Ubuntu. Файлы конфигурации haproxy.cfg должны совпадать на обоих серверах.
6. Повторите действия из п. 4 на втором сервере. Конфигурационный файл keepalived.conf на втором сервере будет отличаться следующим образом:
state BACKUP # set this to BACKUP on the other machine priority 100 # set this to 100 on the other machine
Настройка Агента Indeed CM
1. Выпустите SSL сертификат на DNS имя присвоенное для keepalived (например на cm.demo.local). Для создания SSL сертификата дополнительного сервера воспользуйтесь утилитой IndeedCM.Agent.Cert.Generator.exe с файлом ключа корневого сертификата Indeed CM Agent CA.key и выполните команду:
IndeedCM.Agent.Cert.Generator.exe /ssl /sn <DNS имя> /rootKey <путь к каталогу с ключом корневого сертификата> Пример: IndeedCM.Agent.Cert.Generator.exe /ssl /sn cm.demo.local /rootKey "C:\AgentCertGenerator\Indeed CM Agent CA.key"
2. Полученный файл cm.demo.local_ssl_cert.pfx необходимо скопировать на сервер Ubuntu и переконвертировать в .pem, выполнив команду в терминале:
openssl pkcs12 -in cm.demo.local_ssl_cert.pfx -out cm.demo.local_ssl_cert.pem -nodes
А также Indeed CM Agent CA.cer переконвертировать в .crt:
openssl x509 -inform DER -in "Indeed CM Agent CA.cer" -out Indeed_CM_Agent_CA.crt
3. Переместите эти сертификаты в /etc/ssl/certs (путь по умолчанию). Если используете файл конфигурации из примера, то в /etc/ssl/cm.
sudo cp Indeed_CM_Agent_CA.crt /etc/ssl/certs
sudo cp cm.demo.local_ssl_cert.pem /etc/ssl/certs
4. Отредактируйте файл конфигурации haproxy.cfg, добавив секцию и изменив её под вашу конфигурацию. Пример секции файла конфигурации:
############################################ ############### AGENT SSL ################## ############################################
frontend frontend_agent_https
bind *:3003 ssl crt /etc/ssl/cm/cm.demo.local_ssl_cert.pem ca-file /etc/ssl/cm/Indeed_CM_Agent_CA.crt verify required # Привязываем сертификат агента option forwardfor # Передать оригинальный ip адрес клиента серверу http-request set-header X-IndeedCM-ClientCert %{+Q}[ssl_c_der,base64] default_backend backend_agent_https # Указываем какой сервер обрабатывает запросы
backend backend_agent_https
balance roundrobin # Алгоритм выбора сервера (наименее загруженный по порядку) option prefer-last-server # Попытка повторно использовать тоже соединение к серверу option forwardfor # Передать оригинальный ip адрес клиента серверу option httpchk GET /agentserviceapi/api/healthcheck/isHealthy cookie IndeedCMAgentProxy insert indirect nocache # Указываем, что мы используем cookie для выбора сервера, а indirect - что куки не будут передаваться дальше на сервера, а останутся на прокси сервере. nocache - чтобы proxy не кэшил страницы, иначе есть шансы что он всем отдаст одни и те же страницы с одинаковым cookie (и будет загружен лишь один сервер) server indeed1 IndeedCM1.demo.local:3003 check inter 5000ms cookie CM1 ssl verify none server indeed2 IndeedCM2.demo.local:3003 check inter 5000ms cookie CM2 ssl verify none
frontend frontend_agent_reg_https
bind *:3004 ssl crt /etc/ssl/cm/cm.demo.local_ssl_cert.pem ca-file /etc/ssl/cm/Indeed_CM_Agent_CA.crt verify none # Привязываем сертификат агента option forwardfor # Передать оригинальный ip адрес клиента серверу default_backend backend_agent_reg_https # Указываем какой сервер обрабатывает запросы
backend backend_agent_reg_https
option httpchk GET /agentregistrationapi/api/healthcheck/isHealthy option forwardfor # Передать оригинальный ip адрес клиента серверу balance roundrobin # Алгоритм выбора сервера (наименее загруженный по порядку) server indeed1 IndeedCM1.demo.local:3003 check inter 5000ms ssl verify none server indeed2 IndeedCM2.demo.local:3003 check inter 5000ms ssl verify none
5. На сервере Indeed CM перейдите в Диспетчер служб IIS>IndeedCM Agent Site>agentserviceapi и для Параметры SSL выставьте Требовать SSL и Принимать. Для сохранения нажмите Применить.
6. Для настройки Агентов на рабочих станций необходимо создать файл реестра (.reg) со следующим содержанием:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\IndeedCM\Agent]
"AgentRegistrationServiceUrl"="" "AgentServiceUrl"=""
Для 32-разрядных ОС параметры настраиваются в ветке:
[HKEY_LOCAL_MACHINE\SOFTWARE\IndeedCM\Agent]
Ниже приведен пример содержимого заполненного .reg-файла для подключения к серверу HAProxy + Keepalived согласно файлу конфигурации haproxy.cfg и выданному DNS имени для сервиса Keepalived (cm.demo.local):
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\IndeedCM\Agent]
"AgentRegistrationServiceUrl"="https://cm.demo.local:3004/agentregistrationapi/" "AgentServiceUrl"="https://cm.demo.local:3003/agentserviceapi/"
7. Распространите файл реестра и внесите изменения на рабочие станции пользователей. Для применения внесенных изменений перезагрузите рабочую станцию с установленным Агентом Indeed CM или перезапустите службу Indeed CM Agent Service.
|