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
keepalivedna 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.1dobrze 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ę
keepalivedna 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
tracerouteaby spróbować uzyskać więcej informacji o problemie.
Gdy wszystkie węzły działają
keepaliveda ping VIP działa wszędzie,
traceroutepokazuje, ż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
keepalivedjest 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 = tapw 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
keepalivedconfig 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?
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
1 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
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: