Configuración de clúster LVS+Keepalived+MariaDB

  1. Preparación del entorno Nodo 1: 172.16.2.95 Nodo 2: 172.16.2.160 Nodo 3: 172.16.2.220 LVS1: 172.16.2.67 LVS2: 172.16.2.234
  2. Instalación del clúster MariaDB

https://www.cnblogs.com/linyouyi/p/11515639.html

  1. Configuración en las tres máquinas con MariaDB
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
ifconfig lo:0 172.16.2.253 broadcast 172.16.2.253 netmask 255.255.255.255 up
route add -host 172.16.2.253 lo:0

3.1. Verificación de la dirección IP virtual

//01
[root@hadoop01 linyouyi]# ip addr show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 172.16.2.253/32 brd 172.16.2.253 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
[root@hadoop01 linyouyi]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.2.1      0.0.0.0         UG    0      0        0 eth0
0.0.0.0         172.16.2.1      0.0.0.0         UG    100    0        0 eth0
169.254.169.254 172.16.2.1      255.255.255.255 UGH   100    0        0 eth0
172.16.2.0      0.0.0.0         255.255.255.0   U     100    0        0 eth0
172.16.2.253    0.0.0.0         255.255.255.255 UH    0      0        0 lo
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
//02
[root@hadoop02 mariadb]# ip addr show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 172.16.2.253/32 brd 172.16.2.253 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
[root@hadoop02 mariadb]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.2.1      0.0.0.0         UG    100    0        0 eth0
169.254.169.254 172.16.2.1      255.255.255.255 UGH   100    0        0 eth0
172.16.2.0      0.0.0.0         255.255.255.0   U     100    0        0 eth0
172.16.2.253    0.0.0.0         255.255.255.255 UH    0      0        0 lo
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
//03
[root@hadoop03 mariadb]# ip addr show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 172.16.2.253/32 brd 172.16.2.253 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
[root@hadoop03 mariadb]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.2.1      0.0.0.0         UG    100    0        0 eth0
169.254.169.254 172.16.2.1      255.255.255.255 UGH   100    0        0 eth0
172.16.2.0      0.0.0.0         255.255.255.0   U     100    0        0 eth0
172.16.2.253    0.0.0.0         255.255.255.255 UH    0      0        0 lo
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0

  1. Instalación de keepalived-1.3.5 e ipvsadm-1.27 en LVS1
[root@LVS1 ~]# yum -y install keepalived ipvsadm
[root@LVS1 ~]# cd /etc/keepalived
[root@LVS1 keepalived]# cp keepalived.conf keepalived.conf.bak
[root@LVS1 keepalived]# vim keepalived.conf
global_defs {
    notification_email {
        admin@linyouyi.com
    }
    notification_email_from ka@localhost
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id lvs1
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type pass
        auth_pass forlvs
    }
    virtual_ipaddress { 
        172.16.2.253
    }
}

virtual_server 172.16.2.253 3306 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.255
    persistence_timeout 600
    protocol TCP
    real_server 172.16.2.95 3306 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }
    }
    real_server 172.16.2.220 3306 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }
    }
    real_server 172.16.2.160 3306 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }
    }
}


[root@LVS1 keepalived]# systemctl start keepalived
[root@LVS1 keepalived]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.2.253:3306 rr persistent 600
  -> 172.16.2.95:3306             Route   1      0          0         
  -> 172.16.2.160:3306            Route   1      0          0         
  -> 172.16.2.220:3306            Route   1      0          0 
// Sin embargo, otras máquinas no pueden acceder al VIP, posiblemente debido a limitaciones en servidores en la nube o problemas de configuración, aún sin solución

4.1. Prueba de funcionamiento

[root@LVS1 keepalived]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:2f:b0:e0 brd ff:ff:ff:ff:ff:ff
    inet 172.16.2.67/24 brd 172.16.2.255 scope global dynamic eth0
       valid_lft 85187sec preferred_lft 85187sec
    inet 172.16.2.253/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe2f:b0e0/64 scope link 
       valid_lft forever preferred_lft forever
// Detener MariaDB en el nodo 220
[root@LVS1 keepalived]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  cx--0009.novalocal:mysql rr persistent 600
  -> 172.16.2.95:mysql            Route   1      0          0         
  -> 172.16.2.160:mysql           Route   1      0          0

  1. Instalación de keepalived-1.3.5 e ipvsadm-1.27 en LVS2
[root@LVS2 keepalived]# vim keepalived.conf
global_defs {
    
    router_id lvs2
}

vrrp_instance VI_1 {
    state BACKUP
    
    priority 99
    
    }
    
}
// Cambiar solo estas secciones en el archivo de configuración, el resto sigue igual que en LVS1

5.1. Prueba de alta disponibilidad de LVS

Detener keepalived en LVS1 para verificar si el VIP se mueve automáticamente a LVS2

[root@LVS1 keepalived]# systemctl stop keepalived

[root@LVS2 ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:a3:75:41 brd ff:ff:ff:ff:ff:ff
    inet 172.16.2.234/24 brd 172.16.2.255 scope global dynamic eth0
       valid_lft 62412sec preferred_lft 62412sec
    inet 172.16.2.253/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fea3:7541/64 scope link 
       valid_lft forever preferred_lft forever
[root@LVS2 ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  cx--0015.novalocal:mysql rr persistent 600
  -> 172.16.2.95:mysql            Route   1      0          0         
  -> 172.16.2.160:mysql           Route   1      0          0         
  -> 172.16.2.220:mysql           Route   1      0          0 

Las demás máquinas no pueden acceder al VIP. Es posible que los servidores en la nube requieran una solicitud especial para IPs virtuales, o que haya diferencias respecto a las máquinas virtuales tradicionales.

https://www.cnblogs.com/galengao/articles/7417520.html

// Comprobar ARP en cada máquina, se observa que la dirección MAC del VIP está como incomplete, lo que impide identificar a qué máquina apunta, por lo tanto no se puede hacer ping ni acceder
[root@cx--0008 ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.16.2.1               ether   fa:16:3e:3d:4d:a0   C                     eth0
10.42.2.0                        (incomplete)                              flannel.1
172.16.2.95              ether   fa:16:3e:dc:a1:c6   C                     eth0
172.16.2.222                     (incomplete)                              eth0
172.16.2.67              ether   fa:16:3e:2f:b0:e0   C                     eth0
172.17.0.2               ether   02:42:ac:11:00:02   C                     docker0
10.42.1.0                        (incomplete)                              flannel.1
172.17.0.4               ether   02:42:ac:11:00:04   C                     docker0
172.16.2.254             ether   fa:16:3e:de:bd:f9   C                     eth0
172.16.2.234             ether   fa:16:3e:a3:75:41   C                     eth0
172.16.2.253                     (incomplete)                              eth0
172.17.0.3               ether   02:42:ac:11:00:03   C                     docker0
172.16.2.17              ether   fa:16:3e:f3:5e:6f   C                     eth0

// Limpiar caché ARP no resuelve el problema
[root@LVS1 keepalived]# arp -n|awk '/^[1-9]/{system("arp -d "$1)}'
SIOCDARP(dontpub): Network is unreachable
SIOCDARP(dontpub): Network is unreachable

ipvsadm -lnc

Etiquetas: LVS Keepalived MariaDB clúster High Availability

Publicado el 10-27 18:02