Directorio de artículos
1. El principio de funcionamiento de LVS-DR
1.1 Descripción general del modo LVS-DR
Modo de trabajo del clúster de equilibrio de carga: el enrutamiento directo se
conoce como modo DR. Adopta una estructura de red semiabierta, que es similar a la estructura del modo TUN, pero los nodos no están dispersos por todas partes, sino que están ubicados en la misma red física que el programador.
El programador de carga está conectado a cada servidor de nodo a través de la red local, sin la necesidad de establecer un túnel IP dedicado.
1.2. Analizar el flujo de paquetes LVS-DR
(1)
Para facilitar el análisis del principio, coloque el Cliente y la máquina del clúster en la misma red, la ruta del flujo del paquete de datos es 1-2-3-4
(2) El
cliente envía una solicitud al VIP objetivo, Director (balanceador de carga) recibir. En este momento, el encabezado IP y la información del encabezado del marco de datos es:
(3)
Director selecciona Realserver_1 de acuerdo con el algoritmo de equilibrio de carga, no modifica ni encapsula el mensaje IP, pero cambia la dirección MAC del marco de datos a la dirección MAC de RealServer_1 y luego en la LAN enviar. La información del encabezado IP y del encabezado del marco de datos es la siguiente:
(4)
RealServer_1 recibe este marco y encuentra que la IP de destino coincide con esta máquina después de la desencapsulación (RealServer está vinculado a VIP por adelantado), por lo que procesa este mensaje. Luego, vuelva a encapsular el mensaje y envíelo a la LAN. En este momento, el encabezado de IP y la información del encabezado de la trama de datos es:
(5) El
cliente recibirá el mensaje de respuesta. El cliente cree que está recibiendo un servicio normal, pero no sabe qué servidor lo maneja
Nota: si cruza el segmento de red, el mensaje se devolverá al usuario a través del enrutador a través de terne
1.3 Problemas de ARP en LVS-DR
(1)
En el clúster de equilibrio de carga LVS-DR, el equilibrador de carga y el servidor de nodo deben configurarse con la misma dirección VIP
(2)
Tener la misma dirección IP en la red de área local causará inevitablemente un desorden en la comunicación ARP de cada servidor.
Cuando se envía una transmisión ARP al clúster LVS-DR, debido a que el balanceador de carga y el servidor de nodo están conectados a la misma red, ambos recibirán la transmisión ARP.
En este momento, solo el balanceador de carga de front-end responde y otros servidores de nodo no. Debería responder a la transmisión ARP
(3)
Procese el servidor de nodo para que no responda a las solicitudes de ARP para VIP
Use la interfaz virtual lo: 0 para llevar la dirección VIP.
Configure el parámetro del kernel arp_ignore = 1: el sistema solo responde a las solicitudes ARP cuya IP de destino es la IP local
(4)
RealServe devuelve el paquete (la IP de origen es VIP) y es reenviado por el enrutador. Al volver a encapsular el paquete, primero debe obtener la dirección MAC del enrutador. Al
enviar una solicitud ARP, Linux usa la dirección IP de origen del paquete IP (a saber, VIP) como ARP por defecto. La dirección IP de origen en el paquete de solicitud en lugar de la dirección IP de la interfaz de envío (por ejemplo, ens33)
(5) Después de que el
enrutador reciba la solicitud ARP, actualizará la entrada de la tabla ARP
El VIP original correspondiente a la dirección MAC del Director se actualizará a la dirección MAC del ⅥP correspondiente al RealServer.
(6)
En este momento, el enrutador reenviará el mensaje a RealServer de acuerdo con la entrada de la tabla ARP, lo que provocará que el Director Invalidación VIP
1.4. Solución
Modifique el archivo /etc/sysctl.conf
para procesar el servidor de nodo de modo que no responda a las solicitudes de ARP para VIP
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2 El
sistema no usa paquetes IP Para configurar la dirección de origen de la solicitud ARP, seleccione la dirección IP de la interfaz de envío
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
2. Implementación real de LVS-DR
2.1. Entorno experimental
Software VMware
Un centos7 se utiliza como LVS y utiliza una interfaz virtual. Las direcciones IP son 192.168.100.21; 192.168.100.100
Dos centos7 como servidores Apache, las direcciones IP son 192.168.100.22; 192.168.100.23
Un centos7 se utiliza como almacenamiento NFS, la dirección IP es 192.168.100.24
Nota: puede dejar un mensaje si hay un problema con la configuración de red de la dirección IP
2.2. Propósito experimental
La máquina real visita la URL 192.168.100.100, usa el modo DR para desviar la dirección y consulta el acceso a los hosts Apache1 y Apache2.
Cree un servicio de almacenamiento de archivos de red nfs y experimente con el equilibrio de carga
2.3. Proceso experimental
2.3.1, configurar el programador de carga
2.3.1.1. Configurar la dirección IP virtual (VIP)
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
[root@localhost network-scripts]# vi ifcfg-ens33:0
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.100
NETMASK=255.255.255.255
[root@localhost network-scripts]# ifup ifcfg-ens33:0
[root@localhost network-scripts]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.21 netmask 255.255.255.0 broadcast 192.168.100.255
inet6 fe80::3069:1a3d:774b:18f prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:11:0d:16 txqueuelen 1000 (Ethernet)
RX packets 1170 bytes 110973 (108.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 683 bytes 81523 (79.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.100 netmask 255.255.255.255 broadcast 192.168.100.100
ether 00:0c:29:11:0d:16 txqueuelen 1000 (Ethernet)
省略部分内容
2.3.1.2, ajustar / procesar parámetros de respuesta
Para el modo de clúster DR, dado que el planificador de carga LVS y cada nodo necesitan compartir la dirección VIP, la respuesta del parámetro de redirección del kernel de Linux debe estar desactivada. El
servidor no es un enrutador, por lo que no enviará redirecciones, por lo que esta función se puede desactivar
[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost network-scripts]# sysctl -p
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
2.3.1.3, configurar la estrategia de distribución de carga
[root@localhost ~]#yum -y install ipvsadm
[root@localhost /]# ipvsadm -v
[root@localhost ~]# modprobe ip_vs
[root@localhost ~]# cat /proc/net/ip_vs
[root@localhost ~]# ipvsadm -A -t 192.168.100.100:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.22:80 -g -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.23:80 -g -w 1
[root@localhost ~]# ipvsadm-save > /opt/ipvsadm
[root@localhost ~]# cat /opt/ipvsadm
-A -t localhost.localdomain:http -s rr
-a -t localhost.localdomain:http -r 192.168.100.22:http -g -w 1
-a -t localhost.localdomain:http -r 192.168.100.23:http -g -w 1
2.3.2, configurar servidor de nodo
2.3.2.1. Configuración del servidor de almacenamiento (192.168.100.24)
Primero, verifique si nfs-utils y rpcbind están instalados, si no están instalados con yum
, inicie los dos servicios después de la instalación
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# mkdir /opt/51xit /opt/52xit
[root@localhost ~]# vi /etc/exports
/opt/51xit 192.168.100.0/24(rw,sync)
/opt/52xit 192.168.100.0/24(rw,sync)
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl restart nfs
[root@localhost ~]# systemctl enable nfs
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# echo "this is www.51xit.top" > /opt/51xit/index.html
[root@localhost ~]# echo "this is www.52xit.top" > /opt/52xit/index.html
2.3.2.2. Configurar la dirección IP virtual (VIP) (192.168.100.22 y 192.168.100.23)
Tanto el firewall como la protección del núcleo están apagados, verifique si nfs-utils está instalado
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.255
ONBOOT=yes
[root@localhost network-scripts]# ifup lo:0
[root@localhost network-scripts]# ifconfig
省略部分内容
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.100.100 netmask 255.255.255.255
loop txqueuelen 1000 (Local Loopback)
省略部分内容
[root@localhost network-scripts]# vi /etc/rc.local
/sbin/route add -host 192.168.100.100 dev lo:0
[root@localhost network-scripts]# route add -host 192.168.100.100 dev lo:0
2.3.2.3, ajustar / procesar parámetros de respuesta
[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@localhost network-scripts]# sysctl -p
Los dos servidores de nodo configurados previamente son los mismos
2.3.2.4, instale la página de prueba de montaje httpd
Monte dos servidores de nodo por separado a continuación
[root@localhost ~]# showmount -e 192.168.100.24
Export list for 192.168.100.24:
/opt/52xit 192.168.100.0/24
/opt/51xit 192.168.100.0/24
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount 192.168.100.24:/opt/51xit /var/www/html/
[root@localhost ~]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Aug 6 12:23:03 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=a1c935eb-f211-43a5-be35-2a9fef1f6a89 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/cdrom /mnt iso9660 defaults 0 0
192.168.100.24:/opt/51xit/ /var/www/html/ nfs defaults,_netdev 0 0
[root@localhost ~]# systemctl start httpd
Pruebe si el inicio de sesión es normal
[root@localhost ~]# showmount -e 192.168.100.24
Export list for 192.168.100.24:
/opt/52xit 192.168.100.0/24
/opt/51xit 192.168.100.0/24
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount 192.168.100.24:/opt/52xit /var/www/html/
[root@localhost ~]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Aug 6 12:23:03 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=a1c935eb-f211-43a5-be35-2a9fef1f6a89 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/cdrom /mnt iso9660 defaults 0 0
192.168.100.24:/opt/52xit/ /var/www/html/ nfs defaults,_netdev 0 0
[root@localhost ~]# systemctl start httpd
Pruebe si el inicio de sesión es normal
2.4, verificación
Ingrese 192.168.100.100 en el navegador de la máquina real y
vuelva a ingresar. La
verificación es exitosa.