Utrzymuje aktywność w sieci Tinc VPN, nie może pingować adresu VIP po wyborach



Opis
>

Konfiguracja
>
Mam 3 węzły połączone ze sobą za pomocą Tinc VPN, w których chciałbym zainstalować HAproxy i mieć VIP, aby sam HAproxy był w wysokiej dostępności.
Oto szczegóły węzłów:
  • Host 1 ma adres IP 10.0.0.222/32 na interfejsie vpn
  • Host 2 ma adres IP 10.0.0.13/32 na interfejsie vpn
  • Węzeł 3 ma adres IP 10.0.0.103/32 na interfejsie vpn

W tym celu zainstalowałem
       keepalived
na każdej maszynie.
Dołączyłem również następujący sysctl:
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1

Węzeł 1 ma następujące cechy

/etc/keepalived/keepalived.conf

plik:
global_defs {
enable_script_security
router_id node-1
}vrrp_script haproxy-check {
script "/usr/bin/killall -0 haproxy"
interval 2
weight 2
}vrrp_instance haproxy-vip {
state MASTER
priority 150
interface vpn
virtual_router_id 1
advert_int 1 virtual_ipaddress {
10.0.0.1/32
} track_script {
haproxy-check
}
}

Węzły 2 i 3 mają następujące cechy

/etc/keepalived/keepalived.conf

plik:
global_defs {
enable_script_security
router_id node-2 # Node 3 has "node-3" here.
}vrrp_script haproxy-check {
script "/usr/bin/killall -0 haproxy"
interval 2
weight 2
}vrrp_instance haproxy-vip {
state BACKUP
priority 100
interface vpn
virtual_router_id 1
advert_int 1 virtual_ipaddress {
10.0.0.1/32
} track_script {
haproxy-check
}
}

Gdy wszystkie węzły działają
       keepalived
, Węzeł 1 jest głównym i VIP
       10.0.0.1
dobrze skonfigurowane, 2 inne węzły pingują go.

Dzienniki węzła 1
>
Dzienniki uruchamiania
       keepalived
:
Dec  5 14:07:53 node-1 systemd[1]: Starting Keepalive Daemon (LVS and VRRP)...
Dec 5 14:07:53 node-1 Keepalived[5870]: Starting Keepalived v1.3.2 (12/03,2016)
Dec 5 14:07:53 node-1 systemd[1]: Started Keepalive Daemon (LVS and VRRP).
Dec 5 14:07:53 node-1 Keepalived[5870]: WARNING - default user 'keepalived_script' for script execution does not exist - please create.
Dec 5 14:07:53 node-1 Keepalived[5870]: Opening file '/etc/keepalived/keepalived.conf'.
Dec 5 14:07:53 node-1 Keepalived[5871]: Starting Healthcheck child process, pid=5872
Dec 5 14:07:53 node-1 Keepalived_healthcheckers[5872]: Initializing ipvs
Dec 5 14:07:53 node-1 Keepalived_healthcheckers[5872]: Registering Kernel netlink reflector
Dec 5 14:07:53 node-1 Keepalived_healthcheckers[5872]: Registering Kernel netlink command channel
Dec 5 14:07:53 node-1 Keepalived_healthcheckers[5872]: Opening file '/etc/keepalived/keepalived.conf'.
Dec 5 14:07:53 node-1 Keepalived[5871]: Starting VRRP child process, pid=5873
Dec 5 14:07:53 node-1 Keepalived_vrrp[5873]: Registering Kernel netlink reflector
Dec 5 14:07:53 node-1 Keepalived_vrrp[5873]: Registering Kernel netlink command channel
Dec 5 14:07:53 node-1 Keepalived_vrrp[5873]: Registering gratuitous ARP shared channel
Dec 5 14:07:53 node-1 Keepalived_vrrp[5873]: Opening file '/etc/keepalived/keepalived.conf'.
Dec 5 14:07:53 node-1 Keepalived_healthcheckers[5872]: Using LinkWatch kernel netlink reflector...
Dec 5 14:07:53 node-1 Keepalived_vrrp[5873]: Using LinkWatch kernel netlink reflector...
Dec 5 14:07:53 node-1 Keepalived_vrrp[5873]: VRRP_Script(haproxy-check) succeeded
Dec 5 14:07:54 node-1 Keepalived_vrrp[5873]: VRRP_Instance(haproxy-vip) Transition to MASTER STATE
Dec 5 14:07:54 node-1 Keepalived_vrrp[5873]: VRRP_Instance(haproxy-vip) Changing effective priority from 150 to 152
Dec 5 14:07:55 node-1 Keepalived_vrrp[5873]: VRRP_Instance(haproxy-vip) Entering MASTER STATE
Dec 5 14:07:57 node-1 ntpd[946]: Listen normally on 45 vpn 10.0.0.1:123


Węzeł 1
       ip addr
:
>
vpn: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.0.0.222/24 scope global vpn
valid_lft forever preferred_lft forever
inet 10.0.0.1/24 scope global secondary vpn
valid_lft forever preferred_lft forever


Dzienniki węzła 2 i 3
>
Dec  5 14:14:32 node-2 systemd[1]: Starting Keepalive Daemon (LVS and VRRP)...
Dec 5 14:14:32 node-2 Keepalived[13745]: Starting Keepalived v1.3.2 (12/03,2016)
Dec 5 14:14:32 node-2 Keepalived[13745]: WARNING - default user 'keepalived_script' for script execution does not exist - please create.
Dec 5 14:14:32 node-2 Keepalived[13745]: Opening file '/etc/keepalived/keepalived.conf'.
Dec 5 14:14:32 node-2 Keepalived[13746]: Starting Healthcheck child process, pid=13747
Dec 5 14:14:32 node-2 Keepalived_healthcheckers[13747]: Initializing ipvs
Dec 5 14:14:32 node-2 systemd[1]: Started Keepalive Daemon (LVS and VRRP).
Dec 5 14:14:32 node-2 Keepalived_healthcheckers[13747]: Registering Kernel netlink reflector
Dec 5 14:14:32 node-2 Keepalived_healthcheckers[13747]: Registering Kernel netlink command channel
Dec 5 14:14:32 node-2 Keepalived[13746]: Starting VRRP child process, pid=13748
Dec 5 14:14:32 node-2 Keepalived_healthcheckers[13747]: Opening file '/etc/keepalived/keepalived.conf'.
Dec 5 14:14:32 node-2 Keepalived_vrrp[13748]: Registering Kernel netlink reflector
Dec 5 14:14:32 node-2 Keepalived_vrrp[13748]: Registering Kernel netlink command channel
Dec 5 14:14:32 node-2 Keepalived_vrrp[13748]: Registering gratuitous ARP shared channel
Dec 5 14:14:32 node-2 Keepalived_vrrp[13748]: Opening file '/etc/keepalived/keepalived.conf'.
Dec 5 14:14:32 node-2 Keepalived_healthcheckers[13747]: Using LinkWatch kernel netlink reflector...
Dec 5 14:14:32 node-2 Keepalived_vrrp[13748]: Using LinkWatch kernel netlink reflector...
Dec 5 14:14:32 node-2 Keepalived_vrrp[13748]: VRRP_Instance(haproxy-vip) Entering BACKUP STATE
Dec 5 14:14:32 node-2 Keepalived_vrrp[13748]: VRRP_Script(haproxy-check) succeeded
Dec 5 14:14:33 node-2 Keepalived_vrrp[13748]: VRRP_Instance(haproxy-vip) Changing effective priority from 100 to 102


Węzły 2 i 3
       ip addr
:
>

Węzeł 2

vpn: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.0.0.13/24 scope global vpn
valid_lft forever preferred_lft forever


Węzeł 3

vpn: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.0.0.103/24 scope global vpn
valid_lft forever preferred_lft forever


Ten problem
>
Ale kiedy przestaję
       keepalived
na węźle 1 węzeł 3 jest wybierany jako główny i rejestruje VIP, a tylko węzeł 3 sprawdza 10.0.0.1.

Dzienniki węzła 1
>
Po zatrzymaniu:
Dec  5 14:15:26 node-1 systemd[1]: Stopping Keepalive Daemon (LVS and VRRP)...
Dec 5 14:15:26 node-1 Keepalived[5871]: Stopping
Dec 5 14:15:26 node-1 Keepalived_healthcheckers[5872]: Stopped
Dec 5 14:15:26 node-1 Keepalived_vrrp[5873]: VRRP_Instance(haproxy-vip) sent 0 priority
Dec 5 14:15:27 node-1 Keepalived_vrrp[5873]: Stopped
Dec 5 14:15:27 node-1 Keepalived[5871]: Stopped Keepalived v1.3.2 (12/03,2016)
Dec 5 14:15:27 node-1 systemd[1]: Stopped Keepalive Daemon (LVS and VRRP).
Dec 5 14:15:28 node-1 ntpd[946]: Deleting interface #45 vpn, 10.0.0.1#123, interface stats: received=0, sent=0, dropped=0, active_time=451 secs


Węzeł 1
       ip addr
:
>
vpn: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.0.0.222/24 scope global vpn
valid_lft forever preferred_lft forever


Dzienniki węzła 2
>
Dec  5 14:15:27 node-2 Keepalived_vrrp[13748]: VRRP_Instance(haproxy-vip) Transition to MASTER STATE
Dec 5 14:15:27 node-2 Keepalived_vrrp[13748]: VRRP_Instance(haproxy-vip) Received advert with higher priority 102, ours 102
Dec 5 14:15:27 node-2 Keepalived_vrrp[13748]: VRRP_Instance(haproxy-vip) Entering BACKUP STATE


Węzeł 2
       ip addr
:
>
vpn: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.0.0.13/24 scope global vpn
valid_lft forever preferred_lft forever


Dzienniki węzła 3
>
Dec  5 14:15:27 node-3 Keepalived_vrrp[31252]: VRRP_Instance(haproxy-vip) Transition to MASTER STATE
Dec 5 14:15:27 node-3 Keepalived_vrrp[31252]: VRRP_Instance(haproxy-vip) Received advert with lower priority 102, ours 102, forcing new election
Dec 5 14:15:28 node-3 Keepalived_vrrp[31252]: VRRP_Instance(haproxy-vip) Entering MASTER STATE
Dec 5 14:15:29 node-3 ntpd[27734]: Listen normally on 36 vpn 10.0.0.1:123


Węzeł 3
       ip addr
:
>
vpn: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.0.0.103/24 scope global vpn
valid_lft forever preferred_lft forever
inet 10.0.0.1/24 scope global secondary vpn
valid_lft forever preferred_lft forever


Jeszcze kilka szczegółów
>

rysunek kalkowy
>
użyłem
       traceroute
aby spróbować uzyskać więcej informacji o problemie.
Gdy wszystkie węzły działają
       keepalived
a ping VIP działa wszędzie,
       traceroute
pokazuje, że dla wszystkich węzłów:
$ traceroute 10.0.0.1
traceroute to 10.0.0.1 (10.0.0.1), 30 hops max, 60 byte packets
1 10.0.0.1 (10.0.0.1) 0.094 ms 0.030 ms 0.019 ms

gdy
       keepalived
jest zatrzymany na węźle 1 i został wybrany węzeł 3, węzeł 1 nie może określić, gdzie znajduje się VIP:
$ traceroute 10.0.0.1
traceroute to 10.0.0.1 (10.0.0.1), 30 hops max, 60 byte packets
1 * * *
2 * * *
...
29 * * *
30 * * *

Węzeł 2 oczekuje, że Węzeł 1 będzie miał VIP:
$ traceroute 10.0.0.1
traceroute to 10.0.0.1 (10.0.0.1), 30 hops max, 60 byte packets
1 10.0.0.222 (10.0.0.222) 0.791 ms 0.962 ms 1.080 ms
2 * * *
3 * * *
...

Węzeł 3 ma VIP, więc działa.

Tinc DeviceType
>
Przeczytaj archiwum poczty, w którym sugerowano użycie
       DeviceType = tap
w konfiguracji Tinc, aby uzyskać pakiety ARP (o ile zrozumiałem), ale to nie pomogło.
Właściwie nie jestem pewien, czy Tinc jest głównym powodem, dla którego odbywają się wybory.

Spróbuj bez Tinc
>
Zmieniłem
       keepalived
config do korzystania z publicznego interfejsu internetowego przy użyciu emisji pojedynczej.
Dodałem następujący blok do każdej konfiguracji keepalived na każdym węźle (tutaj dla
       node-1
):
   unicast_src_ip XXX.XXX.XXX.XXX # node's public IP address
unicast_peer {
XXX.XXX.XXX.XXX # other node's public IP address
XXX.XXX.XXX.XXX # other node's public IP address
}

Ale zachowanie jest dokładnie takie samo, jak opisano powyżej, więc Tinc nie powinien być łączony.

Zapytanie ofertowe
>
Czy ktoś może mi pomóc dowiedzieć się, co jest nie tak i rozwiązać ten problem, aby podczas nowych wyborów węzły znalazły VIP w nowej lokalizacji?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Podobny problem rozwiązałem dodając
         Mode = switch
do mojego tinc.conf.
Problem, na który natknąłem się, był podobny do tego, co opisałeś; keepalived przeniesie skonfigurowany przeze mnie wirtualny adres IP (wskazujący na prosty serwer nginx) między moimi 3 węzłami zgodnie z oczekiwaniami. Jednak jedynym węzłem, który mógł skontaktować się z usługą, był wybrany MASTER. Wynikało to z faktu, że tablica routingu została zbudowana statycznie z plików konfiguracyjnych hosta, a nie z danych ARP.
Naprawdę wydaje mi się dziwne, że twoja próba nie powiodła się. Kiedy zmieniłem konfiguracje, aby działały w mojej sieci lokalnej, która ma router, funkcja keepalived i haproxy działała zgodnie z oczekiwaniami, a vip był widoczny w tabeli ARP routera. Czy na pewno zmieniłeś konfigurację haproxy i keepalived dla testu lokalnego?
Powodzenia!
Spinki do mankietów:

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się