Implementar LVS-DR + clúster de alta disponibilidad keepalived (teoría y caso)

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.Inserte la descripción de la imagen aquí

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. Inserte la descripción de la imagen aquí
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: Inserte la descripción de la imagen aquí
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: Inserte la descripción de la imagen aquí
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
Inserte la descripción de la imagen aquí
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
Inserte la descripción de la imagen aquí
. 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
Inserte la descripción de la imagen aquí
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). Inserte la descripción de la imagen aquí
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.
Inserte la descripción de la imagen aquí
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.

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
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: 0Inserte la descripción de la imagen aquí

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
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
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

Inserte la descripción de la imagen aquí

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

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

cd /etc/sysconfig/network-scripts/
 cp ifcfg-lo ifcfg-lo:0
Vim ifcfg-lo:0

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

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

Inserte la descripción de la imagen aquí

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

Inserte la descripción de la imagen aquí

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

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

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

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/BIGmustang/article/details/108351361
Recomendado
Clasificación