Versão avaliada: Pacote do repositório Debian.
Configurar o serviço Keepalived utilzando "VRRP"
Configurar hostnames no DNS a ser utilizado
Configurar o arquivo hosts
192.168.1.101 A vip.local.domain
192.168.1.102 A vip.local.domain
192.168.1.201 A node1.local.domain
192.168.1.202 A hode2.local.domain
instalar o pacote Keepalived em cada NODE do cluster:
# apt -V install keepalived
Configuração a ser realizada no Node1:
# cat /etc/keepalived/keepalived.conf
global_defs {
vrrp_version 2
max_auto_priority
enable_script_security
script_user root
}
vrrp_script chk_haproxy {
script "pkill -0 haproxy" # Verifica se o processo está vivo
interval 2
weight -50
fall 2
rise 2
}
# Instância para o primeiro VIP
vrrp_instance NODE1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
advert_int 1
#preempt_delay 300
authentication { <- Não funciona com vrrp_version3
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
10.1.10.101/24 # VIP 1
}
track_script {
chk_haproxy
}
unicast_src_ip 10.1.10.153
unicast_peer {
10.1.10.154
}
}
# Instância para o segundo VIP
vrrp_instance NODE2 {
state BACKUP
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication { <- Não funciona com vrrp_version3
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
10.1.10.102/24 # VIP 2
}
track_script {
chk_haproxy
}
unicast_src_ip 10.1.10.154
unicast_peer {
10.1.10.153
}
}
Teste se o arquivo de configuração esta correto
# keepalived --config-test
# echo "net.ipv4.ip_nonlocal_bind = 1" > /etc/sysctl.d/99-haproxy.conf
# sysctl -p /etc/sysctl.d/99-haproxy.conf
Reinicie o serviço
# systemctl restart keepalived.service
Configuração a ser realizada no Node2:
# cat /etc/keepalived/keepalived.conf
global_defs {
vrrp_version 2
max_auto_priority
enable_script_security
script_user root
}
vrrp_script chk_haproxy {
script "pkill -0 haproxy" # Verifica se o processo está vivo
interval 2
weight -50
fall 2
rise 2
}
# Instância para o primeiro VIP
vrrp_instance NODE1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
#preempt_delay 300
authentication { <- Não funciona com vrrp_version3
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
10.1.10.101/24 # VIP 1
}
track_script {
chk_haproxy
}
unicast_src_ip 10.1.10.153
unicast_peer {
10.1.10.154
}
}
# Instância para o segundo VIP
vrrp_instance NODE2 {
state MASTER
interface eth0
virtual_router_id 52
priority 101
advert_int 1
authentication { <- Não funciona com vrrp_version3
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
10.1.10.102/24 # VIP 2
}
track_script {
chk_haproxy
}
unicast_src_ip 10.1.10.154
unicast_peer {
10.1.10.153
}
}
Teste se o arquivo de configuração esta correto
# keepalived --config-test
# echo "net.ipv4.ip_nonlocal_bind = 1" > /etc/sysctl.d/99-haproxy.conf
# sysctl -p /etc/sysctl.d/99-haproxy.conf
Reinicie o serviço
# systemctl restart keepalived.service
Após o reinicio do "keepalived" é possível realizar teste de ping:
$ ping vip.local.domain
Todas as aplicações passam a conectar no serviços cluster HAProxy pelo FQDN vip.local.domian.
A configuração haproxy.cfg nos dois servidores devem ser as mesmas
global
localpeer <hostname do servidor local>
peers haproxy-peers
peer haproxy1 10.1.10.10:1024
peer haproxy2 10.1.10.11:1024
frontend https-in/listen/stats e outros frontend
# Ao usar tabelas, adicione a sincronização
stick-table type ip size 100k expire 30s peers haproxy-peers store http_req_rate(10s)
TESTE
# tcpdump -v -ni eth1 proto 112