Directorio de artículos
- Prefacio
- Uno: principio de funcionamiento LVS-DR
- Dos: implementación de LVS-DR
- 2.3 Configurar dos nodos WEB
-
- 2.4 Realice los siguientes ajustes en los dos servidores LVS activos y en espera que se mantengan activos:
- 2.5 Abra el servicio, vincule todas las tarjetas de red de la máquina virtual al modo de solo host y pruebe
- 2.6 Prueba la función de interruptor automático de la herramienta de mantenimiento de fallas LVS
- 2.7 La prueba es exitosa o se accede normalmente al servidor WEB del nodo
Prefacio
Uno: principio de funcionamiento LVS-DR
1.1: Descripción general del modo 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: ¿Cómo analizar el flujo de paquetes LVS-DR?
Para facilitar el análisis del principio, el Cliente y la máquina del clúster se colocan en la misma red, y la ruta del paquete de datos es 1-2-3-4.
1. El cliente envía una solicitud al VIP de destino y el Director (balanceador de carga) la recibe. En este momento, el encabezado IP y la información del encabezado del marco de datos es:
2. 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 lo envía a la LAN . La información del encabezado IP y del encabezado del marco de datos es la siguiente:
3. RealServer_1 recibe este marco y encuentra que la IP de destino coincide con la 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 IP y la información del encabezado del marco de datos es
4. El cliente recibirá el mensaje de respuesta. El cliente piensa 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
En el clúster de balanceo de carga LVS-DR, el balanceador de carga y el servidor de nodo deben configurarse con la misma dirección VIP
. Tener la misma dirección IP en la red de área local inevitablemente causará 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. Debe responder a la transmisión de ARP, procese
el servidor de nodo para que no responda a las solicitudes de ARP para VIP
Utilice la interfaz virtual lo: 0 para llevar la dirección VIP.
Establezca el parámetro del kernel arp_ignore = 1: el sistema solo responde a la solicitud ARP cuya IP de destino es la IP local.
RealServe devuelve el paquete (la IP de origen es VIP) y es reenviado por el enrutador. Debe obtenerse primero al volver a encapsular el paquete. La dirección MAC del enrutador Al
enviar una solicitud ARP, Linux usa la dirección IP de origen del paquete IP (es decir, VIP) como la dirección IP de origen en el paquete de solicitud ARP de forma predeterminada, en lugar de usar la dirección IP de la interfaz de envío (como ens33).
Después de que el enrutador recibe la solicitud ARP , Actualizará las entradas de ARP
El VIP original correspondiente a la dirección MAC del Director se actualizará a la dirección MAC del ⅥP correspondiente al RealServer.
En este momento, el enrutador reenviará el nuevo mensaje de solicitud al RealServer de acuerdo con la entrada de la tabla ARP, haciendo que el VIP del Director deje de ser válido.
Solución
Procese el servidor de nodo y establezca el parámetro del kernel arp_announce = 2: el sistema no usa la dirección de origen del paquete IP para establecer la dirección de origen de la solicitud ARP, pero selecciona la dirección IP de la interfaz de envío
1.4: Métodos para resolver los dos problemas ARP anteriores
修改/etc/sysctl.conf文件
对节点服务器进行处理,使其不响应针对VIP的ARP请求
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
Dos: implementación de LVS-DR
2.1: Entorno del caso
Para mejorar aún más la capacidad de carga del sitio web de la empresa, la empresa decidió expandir la plataforma del sitio web existente y crear un clúster de equilibrio de carga basado en LVS. Teniendo en cuenta la eficiencia de acceso del clúster, el administrador adoptará el modo DR del clúster LVS y el dispositivo de almacenamiento compartido se almacena en la red privada interna.
LVS1:192.168.100.20 PC-2
LVS2:192.168.100.3 PC-3
Web1:192.168.100.4 PC-4
Web2:192.168.100.5 PC-5
VIP=192.168.100.10
Win 10 :192.168.100.150
2.2 Primero configure dos agentes LVS
2.2.1 Instale el software relacionado keepalived (copia de seguridad en caliente de dos máquinas) ipvsadm (software de control LVS)
root@pc-2 ~]# yum install keepalived ipvsadm -y
root@pc-3 ~]# yum install keepalived ipvsadm -y
Modificar archivos de configuración, habilitar el enrutamiento y deshabilitar la redirección
root@pc-2 ~] Vi /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects=0
~
[root@pc-2 ~]# sysctl -p //使其生效
net.ipv4.ip_forward = 1 开启路由功能
PROC响应 关闭重定向功能
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
2.2.2 Configurar la interfaz de la tarjeta de red física, la interfaz de la tarjeta de red virtual
[root @ pc-2 network-scripts] # cp ifcfg-ens33 ifcfg-ens33: 0
[root @ pc-2 network-scripts] # vim ifcfg-ens33: 0
2.2.3 Cree un archivo de script dr para una fácil operación
cd /etc/init.d/
vim dr.sh
// Contenido del script:
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10
RIP1=192.168.100.4
RIP2=192.168.100.5
case "$1" in
start)
/sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
/sbin/route add -host $VIP dev ens33:0
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
echo "ipvsadm starting ---- ------[ok]"
;;
stop)
/sbin/ipvsadm -C
systemctl stop ipvsadm
ifconfig ens33:0 down
route del $VIP
echo "ipvsamd stoped--------------[ok]"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ]; then
echo "ipvsadm stoped----------------------"
exit 1
else
echo "ipvsamd Runing------------[ok]"
fi
;;
*)
echo "Usage: $0 {start | stop | status }"
exit 1
esac
exit 0
Agregue permisos, nota: ¡no ejecute el script todavía!
chmod + x dr.sh
Configurar la interfaz virtual PC-3
ifup ens33: 0 // Habilita virtual VIP
systemctl stop firewalld setenforce 0
service dr.sh start // Habilita el servicio LVS
2.3 Configurar dos nodos WEB
Colocación PC-4, PC-5
2.3.1 Instalar el software httpd
[root@pc-5 ~]# yum install -y httpd
[root@pc-4 ~]# yum install -y httpd
关闭防火墙
systemctl stop firewalld
setenforce 0
[root@pc-5 ]# vim /var/www/html/index.html
2.3.2 Configurar la dirección de bucle invertido bucle 0
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
Vim ifcfg-lo:0
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
Vim ifcfg-lo:0
2.3.3 Escribir scripts de servicios web
root@pc-4 network-scripts]# cd /etc/init.d
[root@pc-4 init.d]# vim web.sh
#!/bin/bash
VIP=192.168.100.10
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP // 关闭ARP响应
/sbin/route add -host $VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $VIP /dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore //启动ARP响应
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stopd"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
2.4 Realice los siguientes ajustes en los dos servidores LVS activos y en espera que se mantengan activos:
2.4.1 Configurar parámetros keepalived
PC-2 和 PC-3 服务器上
编辑keepalived
cd /etc/keepalived/
Root@pc-2 keepalived]# vim keepalived.conf
#! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1 //第一处修改:改为127.0.0.1
smtp_connect_timeout 30
router_id LVS_01 //第二处修改:LVS2服务器修改为02
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER //第三处:备用服务器LVS2改为BACKUP
interface ens33 //第四处:改为ens33
virtual_router_id 10 //第五处:虚拟组,两个LVS服务器必须一样
priority 100 //第六处:备用LVS2优先级小于100,设为90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.10 //第七处:只要虚拟IP地址
}
}
virtual_server 192.168.100.10 80 {
//第八处:虚拟IP地址和端口
delay_loop 6
lb_algo rr
lb_kind DR //第九处:我们使用的是LVS的DR模式
persistence_timeout 50
protocol TCP
real_server 192.168.100.4 80 {
//10、web1服务器节点
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.100.5 80 {
//11、web2的服务器节点
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
### 2.4.2 将文件复制到另外一台LVS
[root@pc-2 keepalived]# scp keepalived.conf root@192.168.100.3:/etc/keepalived/
The authenticity of host '192.168.100.3 (192.168.100.3)' can't be established.
ECDSA key fingerprint is SHA256:90aPw0S3HsHIz87PlUJMnwuceFtLo+xqNo6qSzF4vME.
ECDSA key fingerprint is MD5:86:db:7f:af:8d:e0:7d:c0:a2:0c:b1:17:e9:9f:0b:5d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.3' (ECDSA) to the list of known hosts.
[email protected]'s password:
keepalived.conf
2.4.3 Modifique los parámetros relevantes para asegurarse de que el ROUTER-ID sea diferente, el grupo vrrp sea el mismo y la prioridad sea diferente
2.5 Abra el servicio, vincule todas las tarjetas de red de la máquina virtual al modo de solo host y pruebe
systemctl restart keepalived
systemctl restart ipvsadm.service
service network restart
service dr.sh start
service web.sh start
2.6 Prueba la función de interruptor automático de la herramienta de mantenimiento de fallas LVS
La herramienta keepalived puede realizar una conmutación por error automáticamente, apagar el servicio del servidor LVS1 y simular fallas. Si el cliente aún puede comunicarse con la dirección IP virtual y puede acceder al sitio web normalmente, significa que LVS2 está funcionando en lugar de LVS1, evitando un solo punto de falla. Arriba.
2.6.1 Detenga manualmente la interfaz virtual para simular la prueba de falla
root@pc-2 ~]# ifdown ens33:0
[root@pc-2 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.20 netmask 255.255.255.0 broadcast 192.168.100.255
inet6 fe80::20c:29ff:fe5c:722e prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:5c:72:2e txqueuelen 1000 (Ethernet)
RX packets 6353 bytes 497090 (485.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12384 bytes 1197061 (1.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 53132 bytes 4193520 (3.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 53132 bytes 4193520 (3.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:bc:78:98 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
2.7 La prueba es exitosa o se accede normalmente al servidor WEB del nodo