zoukankan      html  css  js  c++  java
  • Keepalived+LVS-DR+Nginx高可用故障切换模式

    LVS架构中,不管是NAT模式还是DR模式,当后端的RS宕掉后,调度器依然会把请求转发到宕掉的RS上,这样的结果并不是我们想要的。其实,keepalived就可以解决问题,它不仅仅有高可用的功能,还有负载均衡。也就是说keepalived已经嵌入了LVS功能,完整的keepalived+LVS架构需要有两台调度器实现高可用,提供调度器的只需要一台,另外一台作为备用。LVS架构模式了解:【Linux】虚拟服务器之LVS
    准备:
    1,四台服务器或虚拟机:
    主keepalived(调度器):192.168.243.133 (keepalived和ipvsadm)
    从keepalived(调度器):192.168.243.134 (keepalived和ipvsadm)

    • 真实服务器rs1:192.168.243.135 (nginx)
    • 真实服务器rs2:192.168.243.136 (nginx)
    • VIP:192.168.243.100

    2,keepalived的安装:【keepalived】CentOS7.0下安装教程
    3,时间同步+防火墙设置+SELinux设置:【Linux】时间同步设置+防火墙设置+SELinux设置
    4,安装ipvsadm,这是实现LVS的核心工具,一条命令即可:

    yum install -y ipvsadm
    

    5,真实服务器安装Nginx:【Nginx】Nginx简介及在CentOS7.0下安装教程
    进入正题:
    1,编辑keepalived的配置文件:

    vi /usr/local/keepalived-1.3.4/etc/keepalived/keepalived.conf
    

    这是配置文件里面的一些内容:

    vrrp_instance VI_1 {
       #备用服务器上为 BACKUP
       state MASTER
      #绑定vip的网卡为ens33,根据自己的服务器来设置
        interface ens33
        virtual_router_id 51
        #备用服务器上为90
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.243.100
        }
    }
    virtual_server 192.168.243.100 80 {
        #(每隔10秒查询realserver状态)
        delay_loop 10
        #(lvs 算法)
        lb_algo rr
        #(DR模式)
        lb_kind DR
        #(同一IP的连接60秒内被分配到同一台realserver)
        persistence_timeout 60
        #(用TCP协议检查realserver状态)
        protocol TCP
        
        #真实服务器(nginx) 
        real_server 192.168.243.135 80 {
            #(权重)
            weight 100
            TCP_CHECK {
            #(10秒无响应超时)
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
            }
        }
        
        #真实服务器(nginx) 
        real_server 192.168.243.136 80 {
            weight 100
            TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
            }
         }
    }
    
    

    2,这里在keepalived的配置文件中定义的LVS模式为DR模式,还需要在两台rs上执行lvs_dr_rs.sh脚本

    vi /usr/local/sbin/lvs_dr_rs.sh
    

    将下面内容可粘贴至该脚本文件中:

    #/bin/bash
    vip=192.168.243.100
    #把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
    ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip lo:0
    #以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
    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
    

    3,执行:sh /usr/local/sbin/lvs_dr_rs.sh
    4,在两台真实服务器上面执行完毕之后,执行ip addr就能看到两台服务器的lo都绑定好了虚拟ip,如图:
    这里写图片描述
    注意:服务器重启之后绑定的这个虚拟ip就没有了,需要再执行一下脚本,所以可以把对这个脚本的执行放到开机自启中。

    执行命令:vi /etc/rc.d/rc.local
    将以下内容添加至该文件中:sh /usr/local/sbin/lvs_dr_rs.sh
    保存退出,然后添加执行权限:chmod +x rc.local
    

    之后,在133上启动keepalived服务:systemctl start keepalived
    执行ip addr,可以看到在ens33上面绑定的虚拟ip,如图:
    这里写图片描述
    然后可以在调度器133上执行命令ipvsadm -ln查看连接数,如图:
    这里写图片描述
    当我把135关掉之后,就只有一台在连接了
    这里写图片描述
    高可用故障切换模式,这个功能实现的有些难度,钻研了好几天才出来,主要是因为这里面的逻辑不是太好理清楚。每次开4个虚拟机做实验,CPU都飙到87%也是很酸爽,很害怕下一秒笔记本就崩掉~
    最后上一张,根据我的理解,画的逻辑图:
    在这里插入图片描述
    感谢您的阅读~

  • 相关阅读:
    自己动手写RTP服务器——传输所有格式的视频
    自己动手写RTP服务器——用RTP协议传输TS流
    自己动手写RTP服务器——关于RTP协议
    P2P直播、点播技术学习经验
    开源网络通信库参考
    小明历险记:规则引擎drools教程一
    Drools规则引擎入门指南(一)
    drools规则引擎初探
    《高性能MySQL》笔记-BLOB与TEXT
    业务系统上下游数据一致性检测系统(类似对账系统)
  • 原文地址:https://www.cnblogs.com/zll-0405/p/10786613.html
Copyright © 2011-2022 走看看