• 部署LVS-DR+Keepalived高可用群集构建



    LVS-DR工作原理

    LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一 种工作模式。

    • LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用
    • 节点 Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过 Director Server。
    • 为了响应对整个群集的访问,Director Server 与 Real Server 都需要配置 VIP 地址。
      每个Real Server上都有两个IP:VIP(负载均衡对外提供访问的 IP 地址)和RIP(负载均衡后端的真实服务器 IP 地址),但是VIP是隐藏的,就是不能提供解析等功能,只是用来做请求回复的源IP的,Director上只需要一个网卡,然后利用别名来配置两个IP:VIP和DIP(负载均衡与后端服务器通信的 IP 地址),在DIR接收到客户端的请求后,DIR根据负载算法选择一台rs sever的网卡mac作为客户端请求包中的目标mac,通过arp转交给后端RS serve处理,后端再通过自己的路由网关回复给客户端

    LVS-DR数据包流向分析

    为了方便进行原理分析,将Client与群集机器放在同一网络中,数据包流经路线为1-2-3-4
    ①Client向目标VIP发出请求,Director(负载均衡器)接受
    ②Director根据负载均衡算法选择RealServer_1,不修改也不封装IP报文,而是将数据帧的MAC地址改为RealServer_1的MAC地址,然后在局域网上发送
    ③RealServer_1收到这个帧,解封装后发现目标IP与本机匹配(RealServer事先绑定了VIP),于是处理这个报文。随后重新封装报文,发送到局域网
    ④Client将收到回复报文。Client认为等到正常的服务,而不会知道是哪一台处理器的
    ps:如果是跨网段,则报文通过路由器经由internet返回给用户
    在这里插入图片描述

    DR模式特点及缺点

    • Director Server 和 Real Server 必须在同一个物理网络中。
    • Real Server 可以使用私有地址,也可以使用公网地址,如果使用公网地址,可以通过互联网对 RIP 进行直接访问
    • Director Server作为群集的访问入口,但不作为网关使用
    • 所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server
    • Real Server 的网关不允许指向 Director Server IP,即Real Server发送的数据包不允许经过 Director Server
    • Real Server 上的 lo 接口配置 VIP 的 IP 地址

    ARP问题分析

    问题1

    在LVS-DR负载均衡集群中,负载均衡与节点服务器都要配置相同的VIP地址,势必会造成各服务器ARP通信紊乱

    ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收ARP广播,
    只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播

    解决办法

    对节点服务器进行处理,使其不响应针对VIP的ARP请求,
    使用虚接口lo:0承载VIP地址,
    设置内核参数arp_ ignore=1: 系统只响应目的IP为本地IP的ARP请求

    问题2

    RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP) 作为ARP请求包中的源IP地址,而不使用发送接口的IP地址,路由器收到ARP请求后,将更新ARP表项,原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址,导致Director的VIP失效

    解决办法

    对节点服务器进行处理,设置内核参数arp_announce=2,系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址

    Keepalived概述

    Keepalived是企业应用中,单台服务器承担应用存在单点故障的危险,单点故障一旦发生,企业服务器将会发生终端,造成极大的危害和损失

    keepalived工具介绍、

    • keepalived 负载均衡软件设计的,用来管理并监控 LVS 集群中各个服务节点的状态,后来又加入了可以实现高可用的 VRRP 功能。因此,keepalived 除了能够管理 LVS 集群外,还可以为其他服务(例如:Nginx、Haproxy、MySQL等)实现高可用。
    • keepalived 软件主要是通过 VRRP 协议实现高可用功能的。VRRP 是 Virtual Router Redundancy Protocol(虚拟路由器冗余协议的缩写,VRRP 出现的目的就是为了解决静态路由单点故障的问题,它能够保证当个别节点宕机时,整个网络可以不间断地运行。所以,keepalived 一方面具有配置管理 LVS 的功能,同时还具有对 LVS 下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用。

    keepalived服务重要功能

    • 管理LVS负载均衡软件
    • 支持故障自动切换(Failover)
    • 实现LVS集群中节点的健康检查(Health Checking)
    • 实现LVS负载调度节点服务器的高可用性(HA)

    对于节点服务器:健康检查如果发现有故障的节点就会将其隔离或者剔除集群,待其回复后再重新加入的集群当中去

    负载均衡器:健康检查会定时去检查主机的状态(包括主机和服务的状态),如果出现故障就会自动切换到备主机上待主机恢复,在重新让主承载业务请求

    keepalived实现原理

    VRRP虚拟冗余协议

    VRRP会把多个路由组成一个虚拟路由组VRID,VRRP会生成一个虚拟路由(包含虚拟IP、虚拟MAC,局域网内,用户不需要关心谁是主路由/谁是备路由,他们只用虚拟路由器的虚拟IP作为他们的网关),实际上虚拟IP就是承载在Master路由上,也就是说实际的数据是通过Master进行转发的,Backup是通过优先级来决定哪一个是Master路由,优先级最大的那台就是Master,Backup只是用来监听Master定时发送的VRRP报文,如果超时未收到Master发来的VRRP报文,则Backup就会抢占Master,虚拟IP也会一起漂移到Backup上。当Master恢复后,虚拟IP会漂移回到Master上(非健康检查模式)

    keepalived时一款高可用软件,可以工作在三层(网络层)、四层(传输层)和五层(应用层)上,进行健康检测功能。

    我们可以手动配置,选择主用设备和备用设备,选择抢占和非抢占。当开启抢占模式时,原有的主用设备恢复后会抢占原有的备用设备,恢复对VIP的响应,而原有的备用设备则会恢复到备用设备的状态。一般情况下,我们都会把一个硬件性能好的设备作为主用设备,因此我们通常会开启抢占功能。
    keepalived可以工作在类似三层、四层和五层的模式上,当keepalived工作在三层模式时,以IP的形式去进行健康检测,当keepalived工作在四层模式时,以IP+端口的形式去进行健康检测,当keepalived工作在五层模式时,以自定义脚本的方式去进行健康检测。

    Keepalived体系主要模块

    模块作用
    croe模块为Keepalived的核心,负载主进程的启动、维护及全局配置文件的加载和解析
    vrrp模块是来实现VRRP协议的
    check模块负责健康检查,常见的方式有端口及URL检查

    使用Keepalived实现双机热备

    • 基于VRRP协议的热备方式Keepalived可以用作故障切换,每个热备组可以有多台服务器,当然最常用的还是双机热备
    • 在双机热备方案中,故障切换主要针对虚拟IP地址的漂移来实现,因此可以适用于各种应用服务器(如:Web、FTP、Mail、SSH、DNS…)
    • 其中主、备服务器都需要安装Keepalived
      在这里插入图片描述

    LVS+DR+Keepalived高可用群集构建

    环境准备

    主DR服务器:192.168.32.10
    备DR服务器:192.168.32.20
    web服务器1:192.168.32.30
    web服务器2:192.168.32.40
    客户端:192.168.32.50
    VIP:192.168.32.100

    主DR服务器配置

    yum install -y ipvsadm keepalived
    modprobe ip_vs #加载ip_vs模块信息
    cat /proc/net/ip_vs #查看ip_vs模块信息
    在这里插入图片描述

    配置网卡

    cd /etc/sysconfig/network-scripts/
    cp -p ifcfg-ens33 ifcfg-ens33:0
    在这里插入图片描述
    vim ifcfg-ens33:0

    DEVICE=ens33:0
    ONBOOT=yes
    IPADDR=192.168.32.100
    NETMASK=255.255.255.255

    在这里插入图片描述
    在这里插入图片描述
    ifup ens33:0 #开启
    ifconfig #查看
    在这里插入图片描述
    调整proc响应参数

    由于LVS负载均衡器和各节点需要公用vip地址,应该关闭linux内核的重定向相应参数,不充当路由器(转发、重定向)
    vim /etc/sysctl.conf

    net.ipv4.ip_forward = 0
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects =0
    net.ipv4.conf.ens33.send_redirects = 0
    在这里插入图片描述
    sysctl -p #加载
    在这里插入图片描述
    ipvsadm-save > /etc/sysconfig/ipvsadm
    systemctl start ipvsadm
    在这里插入图片描述
    cd /opt
    写一个脚本,并且执行
    #!/bin/bash
    ipvsadm -C
    ipvsadm -A -t 192.168.32.100:80 -s rr
    ipvsadm -a -t 192.168.32.100:80 -r 192.168.32.30:80 -g
    ipvsadm -a -t 192.168.32.100:80 -r 192.168.32.40:80 -g
    ipvsadm
    在这里插入图片描述

    备DR服务器

    yum install -y ipvsadm keepalived
    modprobe ip_vs #加载ip_vs模块信息
    cat /proc/net/ip_vs #查看ip_vs模块信息
    在这里插入图片描述
    cd /etc/sysconfig/network-scripts/
    cp -p ifcfg-ens33 ifcfg-ens33:0
    在这里插入图片描述
    vim ifcfg-ens33:0

    DEVICE=ens33:0
    ONBOOT=yes
    IPADDR=192.168.32.100
    NETMASK=255.255.255.255
    在这里插入图片描述
    systemctl restart network #开启
    ifconfig #查看
    在这里插入图片描述
    调整proc响应参数

    由于LVS负载均衡器和各节点需要公用vip地址,应该关闭linux内核的重定向相应参数,不充当路由器(转发、重定向)
    vim /etc/sysctl.conf

    net.ipv4.ip_forward = 0
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects =0
    net.ipv4.conf.ens33.send_redirects = 0
    在这里插入图片描述
    sysctl -p #加载
    在这里插入图片描述
    ipvsadm-save > /etc/sysconfig/ipvsadm
    systemctl start ipvsadm
    在这里插入图片描述
    cd /opt
    写一个脚本,并且执行
    #!/bin/bash
    ipvsadm -C
    ipvsadm -A -t 192.168.32.100:80 -s rr
    ipvsadm -a -t 192.168.32.100:80 -r 192.168.32.30:80 -g
    ipvsadm -a -t 192.168.32.100:80 -r 192.168.32.40:80 -g
    ipvsadm
    在这里插入图片描述

    web服务器1配置

    yum install -y httpd #安装
    在这里插入图片描述
    cd /etc/sysconfig/network-scripts/
    cp -p ifcfg-ens33 ifcfg-lo:0

    vim ifcfg-lo:0
    DEVICE=lo:0
    ONBOOT=yes
    IPADDR=192.168.32.100
    NETMASK=255.255.255.255

    在这里插入图片描述

    ifup lo:0
    在这里插入图片描述
    在这里插入图片描述
    route add -host 192.168.32.100 dev lo:0 #路由禁锢
    在这里插入图片描述
    vim /etc/sysctl.conf

    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    在这里插入图片描述
    sysctl -p
    在这里插入图片描述

    cd /var/www/html/
    vim index.html

    liuxu

    • 1

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

    web服务器2配置

    yum install -y httpd #安装
    在这里插入图片描述
    配置虚拟IP地址
    cd /etc/sysconfig/network-scripts/
    cp -p ifcfg-ens33 ifcfg-lo:0
    在这里插入图片描述
    vim ifcfg-lo:0
    DEVICE=lo:0
    ONBOOT=yes
    IPADDR=192.168.32.100
    NETMASK=255.255.255.255
    在这里插入图片描述
    ifup lo:0
    在这里插入图片描述
    route add -host 192.168.32.100 dev lo:0 #路由禁锢
    在这里插入图片描述
    调整内核的ARP相应参数以阻止更新VIP的MAC地址,防止冲突
    vim /etc/sysctl.conf

    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    在这里插入图片描述
    sysctl -p
    在这里插入图片描述
    准备页面文件
    cd /var/www/html/
    vim index.html
    在这里插入图片描述
    在这里插入图片描述

    执行脚本

    访问VIP IP
    在这里插入图片描述
    在这里插入图片描述

    部署keepalivd(主-备)

    cd /etc/keepalived/
    cp keepalived.conf keepalived.conf.bak #备份
    vim keepalived.conf

    global_defs {
    router_id lvs_01
    }
    vrrp_instance vi_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 110
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 6666
    }
    virtual_ipaddress {
    192.168.32.100
    }
    }
    virtual_server 192.168.32.100 80 {
    lb_algo rr
    lb_kind DR
    persistence_timeout 6
    protocol TCP
    real_server 192.168.32.30 80 {
    weight 1
    TCP_CHECK {
    connect_port 80
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
    }
    real_server 192.168.32.40 80 {
    weight 1
    TCP_CHECK {
    connect_port 80
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
    }
    }
    在这里插入图片描述
    在这里插入图片描述

    cd /etc/keepalived/
    cp keepalived.conf keepalived.conf.bak #备份

    global_defs {
    router_id lvs_02
    }
    vrrp_instance vi_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 105
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 6666
    }
    virtual_ipaddress {
    192.168.32.100
    }
    }
    virtual_server 192.168.32.100 80 {
    lb_algo rr
    lb_kind DR
    persistence_timeout 6
    protocol TCP
    real_server 192.168.32.30 80 {
    weight 1
    TCP_CHECK {
    connect_port 80
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
    }
    real_server 192.168.32.40 80 {
    weight 1
    TCP_CHECK {
    connect_port 80
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
    }
    }
    在这里插入图片描述

    systemctl start keepalived
    在这里插入图片描述

    验证

    主dr服务器
    在这里插入图片描述
    备dr服务器
    在这里插入图片描述
    关闭主dr服务器keepalived,查看
    在这里插入图片描述
    查看备dr服务器
    在这里插入图片描述

  • 相关阅读:
    【附源码】Python计算机毕业设计网络教育平台设计
    方案:基于AI烟火识别与视频技术的秸秆焚烧智能化监控预警方案
    基于matlab的三维点云数据ICP拼接算法实现
    GRU 训练和解码的时候h随着输入的变化而变化
    GB/T 26518-2023 高分子增强复合防水片材检测
    【C++】友元类 ( 友元类简介 | 友元类声明 | 友元类单向性 | 友元类继承性 | 友元类作用 | 友元类和友元函数由来 | Java 反射机制 | C / C++ 编译过程 )
    df -h 显示/根目录占100%
    做完这些_成为机器学习方面的专家
    【UniApp】-uni-app-项目实战页面布局(苹果计算器)
    【算法竞赛】【模式串匹配算法(KMP)】【附带模板题】
  • 原文地址:https://blog.csdn.net/l17605229954/article/details/126729044