VRRP - keepalived

Konfiguracja usługi

Przed konfiguracją:
  1. Zainstaluj keepalived
  2. 	apt-get install keepalived
    	
  3. Dodaj dodatkową kartę sieciową do maszyny wirtualnej (w VMware Player:)
    1. Kliknij w VirtualMachine->VirtualMachineSettings
    2. Wybierz Hardware, oraz kliknij ADD
    3. Wybierze Network Adapter, kliknij Dalej oraz ustaw opcję Host-only
    4. Zatwierdź zmiany (maszyna wymaga restartu)
    5. uruchom ponownie maszynę VMWare
Założenia:
  1. utrzymujemy 4 wirtualne adresy IP (VIP) zewnętrzne (na interfejsach eth0)
  2. utrzymujemy 2 wirtualne adresy wewnętrzne (na interfejsach eth1)
  3. 2 zewnętrzne VIP są utrzymane w ramach instancji VI_1, 2 w ramach VI_2
  4. 1 wewnętrzny VIP jest utrzymany w ramach instancji VI_3, 1 w ramach VI_4
  5. Serwer pierwszy ustawiamy jako serwer master dla VI_1 i VI_3, oraz jako server SLAVE dla VI_2 i VI_4
  6. Serwer drugi ustawiamy jako serwer master dla VI_2 i VI_4, oraz jako server SLAVE dla VI_1 i VI_3
  7. Każda instancja otrzymuje swój virtual_router_id oraz login i hasło poprzez które będą się komunikowały
  8. wybór który serwer stanie się serwerem master odbywa się poprzez wybór wyższego priorytetu rutera w ramach instancji
  9. czas odświeżania (tj. wysyłania pakietów ADV) ustawiamy na 1 sekundę


Konfiguracja.
W pliku /etc/keepalived/keepalived.conf ustaw konfigurację pierwszego serwera:

vrrp_sync_group VG_1 {
        group {
        VI_1
        VI_2
        }
}
vrrp_sync_group VG_2 {
        group {
        VI_3
        VI_4
        }
}
vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 150
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass qwerty
        }
  virtual_ipaddress {
                192.168.200.10
                192.168.200.11
        }
}

vrrp_instance VI_2 {
        state MASTER
        interface eth1
        virtual_router_id 52
        priority 150
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass ytrewq
        }
        virtual_ipaddress {
                192.168.100.10
        }
}

vrrp_instance VI_3 {
        state BACKUP
        interface eth0
        virtual_router_id 53
        priority 100
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 12345
        }
        virtual_ipaddress {
                192.168.200.12
                192.168.200.13
        }
}

vrrp_instance VI_4 {
        state BACKUP
        interface eth1
        virtual_router_id 54
        priority 100
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 54321
        }
        virtual_ipaddress {
                192.168.100.11
        }
}
Konfiguracja drugiego serwera:
global_defs {
        notification_email {
                kalkos@centuria.pl
        }
        notification_email_from keepalived@asl24.pl
        smtp_server localhost
        smtp_connect_timeout 30
        lvs_id LVS_MAIN2
}

vrrp_sync_group VG_1 {
        group {
        VI_1
        VI_2
        }
}

vrrp_sync_group VG_2 {
        group {
        VI_3
        VI_4
        }
}
vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass qwerty
        }
        virtual_ipaddress {
                192.168.200.10
                192.168.200.11
        }
}

vrrp_instance VI_2 {
        state BACKUP
        interface eth1
        virtual_router_id 52
        priority 100
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass ytrewq
        }
        virtual_ipaddress {
                192.168.100.10
        }
}

vrrp_instance VI_3 {
        state MASTER
        interface eth0
        virtual_router_id 53
        priority 150
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 12345
        }
        virtual_ipaddress {
                192.168.200.12
                192.168.200.13
        }
}

vrrp_instance VI_4 {
        state MASTER
        interface eth1
        virtual_router_id 54
        priority 150
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 54321
        }
        virtual_ipaddress {
                192.168.100.11
        }
}
Wykonujemy nastepujace polecenia:
	root@asl244:/etc/keepalived# ip l s dev eth1 up
	root@asl244:/etc/keepalived# ip l s dev eth0 up              (link powinien byc podniesiony, ale dla pewnosci)
	root@asl244:/etc/keepalived# /etc/init.d/keepalived restart
	Restarting keepalived keepalived....
	root@asl244:/etc/keepalived#
	

Stan wyjściowy na pierwszym serwerze:
root@asl244:~# ip a
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:2c:25:1b brd ff:ff:ff:ff:ff:ff
    inet 192.168.229.128/24 brd 192.168.229.255 scope global eth0    (ten adres jest dodany w konfiguracji OS)
    inet 192.168.1.129/24 brd 192.168.1.255 scope global eth0:1      (ten adres jest dodany w konfiguracji OS)
    inet 192.168.200.10/32 scope global eth0                         (ten adres jest dodany przez keepalived - VRRP)
    inet 192.168.200.11/32 scope global eth0                         (ten adres jest dodany przez keepalived - VRRP)
    inet6 fe80::20c:29ff:fe2c:251b/64 scope link
       valid_lft forever preferred_lft forever
3: eth1:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:2c:25:25 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.10/32 scope global eth1                         (ten adres jest dodany przez keepalived - VRRP)
    inet6 fe80::20c:29ff:fe2c:2525/64 scope link
       valid_lft forever preferred_lft forever
root@asl244:~#
	
Stan wyjściowy na drugim serwerze:
root@asl244-client1:~# ip a
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:dd:6f:bb brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.131/24 brd 192.168.1.255 scope global eth0:1      (ten adres jest dodany w konfiguracji OS)
    inet 192.168.229.130/24 brd 192.168.229.255 scope global eth0    (ten adres jest dodany w konfiguracji OS)
    inet 192.168.200.12/32 scope global eth0                         (ten adres jest dodany przez keepalived - VRRP)
    inet 192.168.200.13/32 scope global eth0                         (ten adres jest dodany przez keepalived - VRRP)       
    inet6 fe80::20c:29ff:fedd:6fbb/64 scope link
       valid_lft forever preferred_lft forever
3: eth1:  mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:dd:6f:c5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.11/32 scope global eth1                          (ten adres jest dodany przez keepalived - VRRP)
    inet6 fe80::20c:29ff:fedd:6fc5/64 scope link
       valid_lft forever preferred_lft forever
root@asl244-client1:~#
	
Włącz trzecią maszynę i przetestuj w następujący sposób:
  1. Dodaj ścieżkę do sieci 192.168.200.0/24 (ip r a 192.168.200.0/24 dev eth0)
  2. Wysyłaj pakiety ping na 192.168.200.10
  3. Wyłącz link na pierwszym serwerze (ip l s dev eth0 down) i poczekaj aż serwer drugi podniesie ten numer ip (możesz diagnozować wyświetlając numery ip - ip a s)
  4. Podnieś link na pierwszym serwerze (ip l s dev eth0 up) i poczekaj aż serwer pierwszy podniesie numer ip)
  5. Wykonaj powyższe dwa kroki pięć razy
  6. Podaj szacunkowy czas oczekiwania na przejęcie przez serwer slave roli serwera master i wykonanie kroku powrotnego
  7. Prześlij prowadzącemu raport z testu (ile pingów zostało utraconych przy każdym przełączaniu).