LVS实现负载均衡(DR直接路由模式+TUNNEL隧道模式)及LVS的健康检测(ldirectord+keepalived)

1.LVS

LVS(Linux Virtual Server),Linux虚拟服务器,是一个虚拟的服务器集群系统。是使用集群技术和Linux操作系统实现的一个高性能、高可用的服务器.

2.ipvsamd的安装

ipvs称之为IP虚拟服务器(IP Virtual Server,简写为IPVS),是运行在LVS下的提供负载平衡功能的一种技术。Ipvs具体实现是由ipvsadm这个程序来完成
yum install -y ipvsadm.x86_64
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
vim /etc/sysconfig/ipvsadm-config
在这里插入图片描述
在这里插入图片描述


3. ipvsamd的DR模式

LVS DR模式工作原理
在这里插入图片描述
1、客户端发送请求至调度器(VIP),请求报文源地址是CIP,目标地址为VIP;
2、LVS调度器接收到请求,报文在PREROUTING链检查,确定目的IP是本机,于是将报文发送至INPUT链,ipvs内核模块确定请求的服务是配置的LVS集群服务,然后根据用户设定的均衡策略选择某台后端RS,并将目标MAC地址修改RIP的MAC地址。因为调度器和后端服务器RS在同个网段,因此直接二层互通,将请求发给选择的RS处理;
3、因为报文目的mac是本机,且RS上有配置VIP,因此RS能接收该报文。后端服务处理完请求后,将响应直接发往客户端,此时源IP地址为VIP,目标IP为CIP。


3.1 调度器(Director+vs)的配置

实验环境:
servera:lvs主机
server:rs主机
serverc:rs主机
在lvs(servera)主机
ipvsadm -h查看编辑策略的方法
ipvsadm -A -t 192.168.43.200:80 -s rr添加策略:设置虚拟主机及端口
ipvsadm -ln查看策略(-n 不做地址解析)
ipvsadm -a -t 192.168.43.200:80 -r 192.168.43.20:80 -g添加真实的服务器(serverb)
ipvsadm -a -t 192.168.43.200:80 -r 192.168.43.30:80 -g添加真实的服务器
ip addr add 192.168.43.200/24 dev ens33(serverc)添加虚拟服务器IP

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


3.2 真实服务器(rs)的配置

在serverb和serverc主机
ip addr add 192.168.43.200/24 dev ens33
在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述
在这里插入图片描述
**

3.3 rs配置防火墙使用户必须经过调度器访问rs

在rs(server和serverc)上
yum install -y arptables
arptables -A INPUT -d 192.168.43.200 -j DROP使用户请求不能直接到达rs
arptables -A OUTPUT -s 192.168.43.200 -j mangle --mangle-ip-s 192.168.43.20使rs 以用户请求的IP返回数据
arptables-save > /etc/sysconfig/arptables保存策略
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


测试:
在这里插入图片描述


4. ipvsamd的Tunnel模式

LVS Tunnel模式工作原理
在这里插入图片描述
(1)IP隧道技术又称为IP封装技术,它可以将带有源和目标IP地址的数据报文使用新的源和目标IP进行二次封装(即 [ DIP:RIP ]CIP:VIP),这样这个报文就可以发送到一个指定的目标主机上。
(2)隧道模式下,调度器和后端服务器组之间使用IP隧道技术。当客户端发送的请求(CIP–>VIP)被director接收后,director修改该报文,加上IP隧道俩端的IP地址作为新的源和目标地址,并将请求转发给后端被选中的一个目标。
(3)当后端服务器接收到报文后,首先解封该报文原有的CIP—>VIP,该后端服务器发现自身的tun接口上配置了VIP,因此接受该数据包。当请求处理完成后,结果将不会重新交给director,而是直接返回给客户端。此时响应数据包的源IP为VIP,目标IP为CIP。

4.1 调度器(Director+vs)的配置

实验环境:varnish的配置文件中设置有调度器
servera:lvs主机
server:rs主机
serverc:rs主机

ipvsadm -C清空策略规则
modprobe ipip添加隧道模式所需要的模块
ipvsadm -A -t 192.168.43.200:80 -s rr 添加虚拟IP到调度器
ipvsadm -a -t 192.168.43.200:80 -r 192.168.43.20:80 -i添加rs的ip到调度器(隧道模式)
ipvsadm -a -t 192.168.43.200:80 -r 192.168.43.30:80 -i添加rs到调度器
systemctl restart ipvsadm.service重启服务
ip addr add 192.168.43.200/24 dev tunl0添加虚拟ip到tunl0
ip link set up tunl0激活网卡
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


4.2 真实服务器(rs)的配置

modprobe ipip添加隧道模式所需要的模块
ip addr add 192.168.43.200/24 dev tunl0添加虚拟ip到tunl0
ip link set up tunl0激活网卡
在这里插入图片描述
在这里插入图片描述


4.3 rs中关闭反向过滤规则

sysctl -a | grep rp_filter
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试:
在这里插入图片描述


5.LVS的健康检测机制

在生产工作中,我们的服务器并不是一致都处于健康状态的,当服务器出现宕机时,为了给用户更好的体验,我们使用LVS的健康检测(基于DR模式)下的,即当有服务器出现故障时,系统会自动剔除该服务器,其他的服务器接替它的工作,使得用户访问不受影响,当服务器故障排除时,系统将会自动添加该服务器,服务器继续正常工作。
环境:LVS的DR模式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


5.1 第三方插件(ldirectord)

解决情形:当rs服务器中出现问题时

1.在yum源中添加高可用的软件包并安装插件

yum install -y ldirectord-3.9.5-3.1.x86_64.rpm
在这里插入图片描述
在这里插入图片描述


2 编辑ldirectord的配置文件

checktimeout=3
checkinterval=1
autoreload=yes
quiescent=no

virtual=192.168.43.200:80 ###定义虚拟服务
        real=192.168.43.20:80 gate  ##rs
        real=192.168.43.30:80 gate  ##rs
        fallback=127.0.0.1:80 gate  ##如果服务都挂了返回本机
        service=http
        scheduler=rr
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=80
        request="index.html"
        #receive="Test Page"
        #virtualhost=www.x.y.z

在这里插入图片描述
在这里插入图片描述

3.测试:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


5.2 高可用(keepalived)

在这里插入图片描述

解决情形:调度器出现问题
实验环境:varnish的配置文件中设置有调度器
servera:lvs主机
serverb:rs主机
serverc:rs主机
添加serverd作为备用lvs主机
在这里插入图片描述

1.安装keepalived

tar zxf keepalived-2.0.20.tar.gz解压包
yum install openssl-devel.x86_64 -y安装缺少的二进制文件
./configure --prefix=/usr/local/keepalived --with-init=systemd源码编译
make && make install安装
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:在调度器servera与备用调度器serverd上都安装keepalived,并同样做软连接


2.配置keepalived

注意:在servera和serverd上都进行配置
在servera
在这里插入图片描述

! Configuration File for keepalived

global_defs {   #全局定义块
   notification_email { #邮件通知,指定keepalived在发生事件(切换),需要发送email到的对象。	可以有多个,每行一个。
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1   #smtp_*指定发送email的smtp服务器
   smtp_connect_timeout 30
   router_id LVS_DEVEL   #router_id运行keepalived的机器的一个标识
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER # 指定该节点为主节点,备用节点设置为BACKUP
    ##state指定instance的初始化状态,在两台router都启动后,马上会发生竞选,高	priority的会竞选为Master,因而这里的state并不表示这台就一直是Master。
    interface ens33 #指定绑定虚拟IP的网络接口
    virtual_router_id 51
    priority 100  # 主节点的优先级,数值在1~254,注意从节点必须比主节点的优先级别低
    advert_int 1  #组播信息发送间隔,两个节点需一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.43.200   #指定虚拟IP,两个节点需设置一样
    }
}

virtual_server 192.168.43.200 80 {
    delay_loop 3  #指定检查间隔
    lb_algo rr    #指定lvs算法
    lb_kind DR    #指定lvs模式为DR
    #persistence_timeout 50   #持久连接设置,会话保持时间,在此处需要注释
    protocol TCP #指定转发协议为TCP协议

    real_server 192.168.43.20 80 {
        TCP_CHECK {
        weight 1
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.43.30 80 {
        TCP_CHECK {
        weight 1
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

在serverd
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


重启服务后
在这里插入图片描述
在这里插入图片描述


3.测试

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

版权声明:本文为Aimee_c原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Aimee_c/article/details/105877491