Найти тему

Балансировщик VMware horizon с помощью haproxy

В современном мире недопустимо потеря связи с системными продуктами, от которой зависит ваша работа или отдых, требуется организация отказоустойчивости системы. В данной статье мы рассмотрим способ организации отказоустойчивого кластера 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

-2

Если на обоих серверах вы видите подобную картинку, то переходим непосредственно настройке 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

-3

Сохраняем наши настройки и перезагружаем сервис.

#systemctl restart haproxy

Проверяем что у нас все работает.

#systemctl status haproxy

-4

Так же, проверяем что статистика работает, в браузере вводим ip адрес haproxy с приставкой /haproxy_stats.

-5

Убеждаемся, что на обоих серверах выводится подобная информация.

Теперь нам необходимо настроить отказоустойчивость с помощью 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 необходимо настраивать на обоих роутерах, тогда она будет отрабатываться правильно.

-6

Теперь мы переходим к установке и настройке keepalived.

Устанавливаем keepalived на обоих серверах.

#yum install keepalived

Определяем имя интерфейса

Сервер №1

#ip a | grep 192.168.1.50

Сервер №2

#ip a | grep 192.168.1.51

-7

Видим имя интерфейса 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

-8

Редактируем конфигурационные файлы.

#nano /etc/sysctl.conf

net.ipv4.ip_forward = 1

net.ipv4.ip_nonlocal_bind = 1

-9

Заменяем содержимое на обоих серверах.

#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

}

}

-10

Сервер №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

}

}

-11

Запускаем службу на обоих серверах.

#systemctl enable keepalived && service keepalived start

Проверяем статус.

#systemctl status keepalived

-12

Теперь мы можем проверить доступность серверов через VIP адрес с помощью браузера. Можно это сделать с помощью добавления приставки /haproxy_stats, должно открыться окно статистики haproxy.

Остается только присвоить нашему VIP адресу DNS имя и проверить работу через клиент horizon.

-13