В современном мире недопустимо потеря связи с системными продуктами, от которой зависит ваша работа или отдых, требуется организация отказоустойчивости системы. В данной статье мы рассмотрим способ организации отказоустойчивого кластера VMware horizon.
Нашу систему мы будем разворачивать на CentOS 7, под пользователем root (главный пользователь системы). Все команды будет вноситься через консоль по ssh.
Я не буду рассказывать, как поднимать connection server horizon и как добавлять DNS имя, этого добра и так в сети много, будем считать, что у вас это уже все есть и вы легко это можете настроить.
Для нашего балансировщика необходимо развернуть 2 машины, и задать им соответствующие имена, с помощью команд
Сервер №1
#hostnamectl set-hostname haproxy-1
#systemctl restart systemd-hostnamed
Сервер №2
#hostnamectl set-hostname haproxy-2
#systemctl restart systemd-hostnamed
Далее идут настройки которые мы делаем на обоих серверах.
Проверяем что все обновления установлены.
#yum update –y
Устанавливаем необходимые программные пакеты.
#yum install nano
Устанавливаем пакет haproxy.
#yum install haproxy
Включаем haproxy.
#systemctl enable haproxy
#systemctl start haproxy
Открываем необходимые порты.
#firewall-cmd --permanent --add-port=80/tcp
#firewall-cmd --permanent --add-port=443/tcp
# firewall-cmd --reload
Если на обоих серверах вы видите подобную картинку, то переходим непосредственно настройке haproxy.
Редактируем конфигурационный файл.
#nano /etc/haproxy/haproxy.cfg
Заменяем всю конфигурацию на:
#HAProxy configuration
#Global definitions
global
log 127.0.0.1 local0
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
stats socket /var/lib/haproxy/stats
maxconn 2048
user haproxy
group haproxy
daemon
defaults
log global
mode http
option http-server-close
option dontlognull
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
### Доступ к статистике ###
frontend balance_http
bind *:80
stats enable
stats uri /haproxy_stats
### задаем свой логин и пароль для доступа###
stats auth admin:12345
### Настройки балансировщика horizon ###
frontend horizon-https
mode tcp
bind *:443
timeout client 91s
default_backend horizon
### Параметры для connection server ###
backend horizon
mode tcp
balance leastconn
###Имена и адреса connection server ###
server cs1.domain.com 192.168.1.100:443 check inter 5s fall 4 rise 3 ssl verify none
server cs2.domain.com 192.168.1.101:443 check inter 5s fall 4 rise 3 ssl verify none
Сохраняем наши настройки и перезагружаем сервис.
#systemctl restart haproxy
Проверяем что у нас все работает.
#systemctl status haproxy
Так же, проверяем что статистика работает, в браузере вводим ip адрес haproxy с приставкой /haproxy_stats.
Убеждаемся, что на обоих серверах выводится подобная информация.
Теперь нам необходимо настроить отказоустойчивость с помощью keepalived и виртуального ip адреса, так называемого VIP.
Настройку VIP мы будем делать на роутере Mikrotik, с помощью протокола vrrp.
Проще всего это сделать через командную строку:
/interface vrrp add interface=bridge name=haproxy version=2 vrid=10
/ip address add address=192.168.1.150/24 interface= haproxy network=192.168.1.0
В моей сети используется один роутер, поэтому данная настройка будет помечена красным цветом, но она будет работать. В сети где используется репликация роутера, протокол vrrp необходимо настраивать на обоих роутерах, тогда она будет отрабатываться правильно.
Теперь мы переходим к установке и настройке keepalived.
Устанавливаем keepalived на обоих серверах.
#yum install keepalived
Определяем имя интерфейса
Сервер №1
#ip a | grep 192.168.1.50
Сервер №2
#ip a | grep 192.168.1.51
Видим имя интерфейса ens160, запоминаем его, оно нам будет нужно при конфигурации keepalived.
Добавляем на оба сервера правила.
#firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens160 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
#firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface ens160 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
#firewall-cmd –reload
Редактируем конфигурационные файлы.
#nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1
Заменяем содержимое на обоих серверах.
#nano /etc/keepalived/keepalived.conf
Сервер №1
! Configuration File for keepalived
vrrp_script chk_haproxy {
script "killall -0 haproxy" # check the haproxy process
interval 2 # every 2 seconds
weight 2 # add 2 points if OK
}
vrrp_instance VI_1 {
interface ens160 # interface to monitor
state MASTER # MASTER on web-node-1, BACKUP on web-node-2
virtual_router_id 51
priority 101 # 101 on web-node-1, 100 on web-node-2
virtual_ipaddress {
192.168.1.150/24 # virtual ip address
}
track_script {
chk_haproxy
}
}
Сервер №2
! Configuration File for keepalived
vrrp_script chk_haproxy {
script "killall -0 haproxy" # check the haproxy process
interval 2 # every 2 seconds
weight 2 # add 2 points if OK
}
vrrp_instance VI_1 {
interface ens160 # interface to monitor
state SLAVE # MASTER on web-node-1, BACKUP on web-node-2
virtual_router_id 51
priority 100 # 101 on web-node-1, 100 on web-node-2
virtual_ipaddress {
192.168.1.150/24 # virtual ip address
}
track_script {
chk_haproxy
}
}
Запускаем службу на обоих серверах.
#systemctl enable keepalived && service keepalived start
Проверяем статус.
#systemctl status keepalived
Теперь мы можем проверить доступность серверов через VIP адрес с помощью браузера. Можно это сделать с помощью добавления приставки /haproxy_stats, должно открыться окно статистики haproxy.
Остается только присвоить нашему VIP адресу DNS имя и проверить работу через клиент horizon.