- 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
- Instalación del clúster MariaDB
https://www.cnblogs.com/linyouyi/p/11515639.html
- 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
- 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
- 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