• Lvs +keepalivede : 高可用集群


    keepalived为Ivs应运而生的高可用服务。Ivs的调度器无法做高可用,于是keepalived这个软件。 实现的是调度器的高可用

    但是: keepalived不是专为Ivs集群服务的,也可以做其他代理服务器的高可用。

    lvs的高可用集群:主调度器和备调度器(可以有多个)一主两备 一主一备

    主调度器能够正常运行时,有主调度器进行真实后端服务器的分配处理,其余的备用调度器处于冗余状态

    不参与集群的运转,主调度器出现了故障无法运行,备调度器才会承担主调度器的工作

    一旦主调度器恢复工作,继续由主调度器进行处理,备调度器又成冗余

    VRRP:Keeplived是基于vrrp协议实现lvs服务的高可用。解决了调度器单节点的故障问题

    VRRP协议 :提高网络路由器可靠性开发的一种协议

    主备切换的解释

    选举出主和备:预先设定好主和备的优先级,主的优先级高,备的优先级低 一旦开启服务

    vrrp组播通信:224.0.0.18vrrp协议当中的主备服务器通过组播地址进行通信,交换服务器之间的运行状态,主服务器会周期性的发送vrrp的报文消息,以通知其他备服务器的主服务器的现在状态。

    主备切换:主服务器发生故障或者不可达,vrrp协议会把请求转发到备服务器,通过组播地址,vrrp可以迅速的通知其他服务器发生了住别切换,确保新的主服务器可以正常的处理客户端的请求

    故障恢复:一旦主服务器恢复通信,有组播地址进行通信, 发现在恢复的主服务器的优先级会比较高,会抢占原主服务器的位置,成为主服务器,调度和接收请求

    keepalived的体系模块:

    全局模块: core模块,负载整个keepalived启动加载和维护。

    VRRP模块:实现vrrp协议,主备切换。

    check:负责健康检查,检查后端真实服务器的健康健康。配置真实服务器的模块当中。

    脑裂

    脑裂:主备同时拥有vip地址  在高可用系统中,联系两个节点的心跳线,本来是一体的,动作协调的高可用系统,心跳线断开后,分裂成了两个独立的个体,主备之间取了联系,都以为对方出现了故障,两个调度器,就像脑裂人一样,开始抢主的位置,抢占vip,主有vip 备也有vip 导致整个集群失败

    脑裂分析判断原因::

    软件层面:配置文件错误,tcpdump抓包分析好配置 改文件重启即可

    网络层面:高可用服务器之间心跳线检测失败,主备之间无法通信

    硬件层面:连接主备之间的心跳线老化,网卡或者网卡的驱动失败,IP地址配置冲突防火墙没有配置心跳线的传输通道

    如何解决keepalive脑裂的问题

    1 硬件:准备2条心跳线,断了一条,依然能够传送心跳线

    2 设置防火墙一定让心跳信息通过

    3 监控软件,实时检测

    环境介绍:

    dev开发环境开发人员专用

    sit测试环境测试人员使用(开发,运维)

    pre预生产环境运维和开发(和最终的生产 环境保持一致)

    prd生产环境(面向用户的环境。)

    工作方式基于vrrp协议:

    1  确定主备

    2  vip地址只能有一个,出现在主服务器上

    2  vrrp224.0.0.0.18 组播地址,发送vrrp报文,

    4、主备切换,主出现故障, vip地址会飘移到备服务器。

    5.主服务器恢复,VIP地址要回到主

    6、脑裂主备都有vip软件层面q检查配置文件,重启。

    7. keepalived不是只能和IVs搭配,也可以和其他服务配合,实现高可用。

    实验前准备:

    Test1主调度器 20.0.0.10

    Test2 备调度器 20.0.0.20

     后端真实服务器 20.0.0.30 nginx

    后端真实服务器 20.0.0.40  nginnx

    vip地址:20.0.0.100  nginx

    客户端  61

    Lvs Keepalived 实验步骤:

    Test1 20.0.0.10 主调度器

    [root@localhost ~]# systemctl stop firewalld

    [root@localhost ~]# setenforce 0

    [root@localhost ~]# yum -y install ipvsadm keepalived

    [root@localhost ~]# cd /etc/keepalived/

    [root@localhost keepalived]# ls

    keepalived.conf

    [root@localhost keepalived]# vim keepalived.conf

    ##后端真实服务器20.0.0.40的配置直接复制上面20.0.0.30的配置架构

    ##下面的文件全部删除

    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

       smtp_connect_timeout 30

       router_id LVS_01

    #主备服务器的id,不能一致

       vrrp_skip_check_adv_addr

       #vrrp_strict

    #取消严格遵守vrrp协议功能,不取消无法连接

       vrrp_garp_interval 0

       vrrp_gna_interval 0

    }

    vrrp_instance VI_1 {

        state MASTER

      #表示身份,主备MASTER BACKUP

        interface ens33

    #绑定vip地址的物理接口

           virtual_router_id 10

    #虚拟路由器的id

        priority 100

        advert_int 1

    #发送报文的间隔时间

     authentication {

            auth_type PASS

            auth_pass 1111

        }

        virtual_ipaddress {

            20.0.0.100

    #指定集群的vip地址

        }

    }

    virtual_server 20.0.0.100 80 {

        delay_loop 6

    #健康检查的间隔时间

        lb_algo rr

    #负载均衡的调度算法

        lb_kind DR

    #指定LVs集群的工作方式 要大写

        persistence_timeout 0

    #连接保持时间

        protocol TCP

        real_server 20.0.0.30 80 {

            weight 1

    #后端服务器的轮询权重

            TCP_CHECK {

            connect_port 80

    #检测目标的端口号

            connect_timeout 3

    #连接超时时间

           nb_get_retry 3

    #重试的次数

           delay_before_retry 4

    #重试的间隔描述

         }

      }

     real_server 20.0.0.30 80 {

            weight 1

    #后端服务器的轮询权重

            TCP_CHECK {

            connect_port 80

    #检测目标的端口号

            connect_timeout 3

    #连接超时时间

           nb_get_retry 3

    #重试的次数

           delay_before_retry 4

    #重试的间隔描述

         }

      }

    #重启Keep啊lived

    [root@localhost keepalived]# systemctl restart keepalived.service

    #检测配置策略

    [root@localhost keepalived]# ipvsadm -ln

    IP Virtual Server version 1.2.1 (size=4096)

    Prot LocalAddress:Port Scheduler Flags

      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

    TCP  20.0.0.100:80 rr

      -> 20.0.0.30:80                 Route   1      0          0

      -> 20.0.0.40:80                 Route   1      0          0

    [root@localhost keepalived]# ip addr

    #配置内核文件

    [root@localhost keepalived]# 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

    #检测查看内核文件

    [root@localhost keepalived]# sysctl -p

    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

    备调度器test2 20.0.20

    [root@localhost ~]# systemctl stop firewalld

    [root@localhost ~]# setenforce 0

    [root@localhost ~]# yum -y install ipvsadm keepalived

    [root@localhost ~]# cd /etc/keepalived/

    [root@localhost keepalived]# ls

    keepalived.conf

    #直接复制test1的配置  复制前 先备份下

    [root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak

    [root@localhost keepalived]# ls

    keepalived.conf  keepalived.conf.bak

    #远程复制test1的配置

    [root@localhost keepalived]# scp root@20.0.0.10:/etc/keepalived/keepalived.conf /etc/keepalived/

    [root@localhost keepalived]# ls

    keepalived.conf  keepalived.conf.bak

    [root@localhost keepalived]# vim keepalived.conf

    #在再修改下几个字符 标识符、主备名称,优先级

    #同上主服务操作步骤

    [root@localhost keepalived]# systemctl restart keepalived.service

    [root@localhost keepalived]# ipvsadm -ln

    IP Virtual Server version 1.2.1 (size=4096)

    Prot LocalAddress:Port Scheduler Flags

      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

    TCP  20.0.0.100:80 rr

      -> 20.0.0.30:80                 Route   1      0          0

      -> 20.0.0.40:80                 Route   1      0          0

    [root@localhost keepalived]# 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

    #备服务器没有vip 地址

    后端真实服务器test3 20.0.0.30

    #配置页面内容 vip地址 再添加选址标识

    [root@localhost ~]# systemctl restart nginx.service

    [root@localhost ~]# systemctl restart nginx.service

    [root@localhost ~]# cd /usr/local/nginx/html/

    [root@localhost html]# ls

    50x.html  bbs  index.html  index.php

    [root@localhost html]# vim index.html

    随便写入内容

    #配置回环的虚拟网卡,设置VIP承载

    [root@localhost html]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0

    DEVICE=lo:0

    ONBOOT=yes

    IPADDR=20.0.0.100

    NETMASK=255.255.255.255

    [root@localhost html]# ifup ifcfg-lo

    #添加静态路由

    [root@localhost html]# route add -host 20.0.0.100 dev lo:0

    #配置内核文件

    [root@localhost html]# 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

    [root@localhost html]# sysctl -p

    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

    后端真实服务器test4

    同上配置

    Last login: Mon Oct 16 22:39:57 2023 from 20.0.0.99

    [root@localhost ~]# systemctl restart nginx

    [root@localhost ~]# systemctl restart nginx

    [root@localhost ~]# cd /usr/share/nginx/html/

    [root@localhost html]#

    [root@localhost html]# ls

    50x.html  index.html

    [root@localhost html]# vim index.html

    [root@localhost html]# vim /etc/sysconfig/network

    network          network-scripts/

    #配置回环的虚拟网卡,设置VIP承载

    [root@localhost html]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0

    [root@localhost html]# ifup ifcfg-lo:0

    #添加静态路由

    [root@localhost html]# route add -host 20.0.0.100 dev lo:0

    [root@localhost html]# vim /etc/sysctl.conf

    [root@localhost html]# sysctl -p

    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

    验证测试

    Test1

    [root@localhost keepalived]# systemctl stop keepalived.service

    Test2

    Ip addr

    VIP地址飘到备用调度器上

    [root@www ~]# curl 20.0.0.100

    this is 33

    [root@www ~]# curl 20.0.0.100

  • 相关阅读:
    【LeetCode热题100】【子串】最小覆盖子串
    springboot中药知识分享网站设计毕业设计源码201818
    java计算机毕业设计web网上办公自动化系统MyBatis+系统+LW文档+源码+调试部署
    文献管理软件Zotero之入门篇(1)
    4-为什么有了gil锁还要互斥锁?进程,线程和协程 以及进程,线程和协程的使用场景、什么是鸭子类型、并行和并发
    视口标签viewport
    生产真实案例:震惊,几条SQL把服务器干崩了,事后还大言不惭!
    SD_DATA_RECEIVE_SHIFT_REGISTER
    Arthas(1):Java诊断工具Arthas入门教程
    652. 寻找重复的子树 - 力扣(LeetCode)
  • 原文地址:https://blog.csdn.net/Lachewuxian/article/details/134019644