zoukankan      html  css  js  c++  java
  • LVS+keepalived均衡nginx配置

           如果单台LVS发生突发情况,例如宕机、发生不可恢复现象,会导致用户无法访问后端所有的应用程序。避免这种问题可以使用HA故障切换,也就是有一台备用的LVS,主LVS 宕机,LVS VIP自动切换到从,可以基于LVS+Keepalived实现负载均衡及高可用功能,满足网站7x24小时稳定高效的运行。

          Keepalived基于三层检测(IP层,TCP传输层,及应用层),主要用于检测WEB服务器的状态,如果有一台WEB服务器死机,或工作出现故障,Keepalived检测到并将有故障的WEB服务器从系统中剔除;

           当后端一台WEB服务器工作正常后Keepalived自动将WEB服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的WEB服务器。

    需要注意,如果使用了keepalived.conf配置,就不需要再执行ipvsadm  -A命令去添加均衡的realserver命令了,所有的配置都在keepalived.conf里面设置即可

           LVS+Keepalived负载均衡高可用集群架构适用于千万级并发网站,在互联网企业得到大力的应用,如下为完整LVS+Keepalived企业级配置方法和步骤:

    一、Ipvsadm编译安装

    基于yum安装

    yum install -y ipvsadm*

    基于源码安装

    wget  -c  http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz 
    ln -s /usr/src/kernels/2.6.*  /usr/src/linux
    tar -xzf ipvsadm-1.24.tar.gz 
    cd ipvsadm-1.24 
    make 
    make install

    二、 Keepalived安装配置

    1)keepalive编译安装

    yum install -y keepalived*

    cd  /usr/src
    wget  -c  http://www.keepalived.org/software/keepalived-1.1.15.tar.gz 
    tar  -xzvf  keepalived-1.1.15.tar.gz 
    cd  keepalived-1.1.15 
    ./configure
    make && make install
    DIR=/usr/local/ 
    cp  $DIR/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
    cp  $DIR/etc/sysconfig/keepalived  /etc/sysconfig/
    mkdir  -p  /etc/keepalived
    cp  $DIR/sbin/keepalived /usr/sbin/

    2)Master上keepalived.conf配置代码:

    ! Configuration File for keepalived
    global_defs {
       notification_email {
          wgkgood@163.com
       }
       notification_email_from wgkgood@163.com
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface ens33
        lvs_sync_daemon_inteface ens33
        virtual_router_id 51
        priority 100
        advert_int 5 
    nopreempt
    authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.15 } } virtual_server 192.168.1.15 80 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 0 protocol TCP real_server 192.168.1.13 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 1 delay_before_retry 2 connect_port 80 } HTTP_GET { url { path /index.html digest 922fce4cfdadc6a0774b2eb63e5b1e9c status_code 200 } } } real_server 192.168.1.14 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 1 delay_before_retry 2 connect_port 80 } HTTP_GET { url { path /index.html digest 99e0f897e1cf8971e3ad95885709a5a0 status_code 200 } } } }

    2)Backup上keepalived.conf配置代码:

    ! Configuration File for keepalived
    global_defs {
       notification_email {
          wgkgood@163.com
       }
       notification_email_from wgkgood@163.com
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface ens33
        lvs_sync_daemon_inteface ens33
        virtual_router_id 51
        priority 80
        advert_int 5 
    nopreempt
    authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.15 } } virtual_server 192.168.1.15 80 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 0 protocol TCP real_server 192.168.1.13 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 1 delay_before_retry 2 connect_port 80 } HTTP_GET { url { path /index.html digest 922fce4cfdadc6a0774b2eb63e5b1e9c status_code 200 } } } real_server 192.168.1.14 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 1 delay_before_retry 2 connect_port 80 } HTTP_GET { url { path /index.html digest 99e0f897e1cf8971e3ad95885709a5a0 status_code 200 } } } }

            Master Keepalived配置state状态为MASTER,Priority设置100,Backup Keepalived配置state状态为BACKUP,Priority设置90,转发方式为DR直连路由模式,算采用wrr模式,在LVS BACKUP服务器写入如下配置,需要注意的是客户端的配置要修改优先级及状态:

            LVS+keepalived负载均衡主备配置完毕,由于LVS采用DR模式,根据DR模式转发原理,需在客户端realserver绑定VIP。

    三、LVS DR客户端配置VIP

    客户通过浏览器访问director的VIP,director接收请求,将通过相应的转发方式及算法将请求转发给相应的realserver。在转发的过程中,会修改请求包的目的mac地址,目的IP地址不变。Realserver接收请求,并直接响应客户端。

    Director与realserver位于同一个物理网络中,当director直接将请求转发给realserver时,如果realserver检测到该请求包目的IP是VIP而并非自己,便会丢弃,而不会响应。

    为了解决这个问题,需在所有Realserver上都配上VIP,保证数据包不丢弃,同时由于后端realserver都配置VIP会导致IP冲突,所以需将VIP配置在lo网卡上,这样限制了VIP不会在物理交换机上产生MAC地址表,从而避免IP冲突。 LVS DR客户端启动Realserver.sh脚本内容如下:

    #!/bin/sh
    #LVS Client Server
    VIP=192.168.33.188
    case  $1  in                                                                                                                                                                                                                                                    
    start)                                                                                                                                                                                                                                            
        ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
        /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"
        exit 0
    ;;                                                                                                                                                                                                                                         
    stop)
        ifconfig lo:0 down
        route del $VIP >/dev/null 2>&1
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
        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 Stoped OK"
        exit 1
    ;;
    *)
        echo "Usage: $0 {start|stop}"
    ;;
    esac

    四、LVS负载均衡企业实战排错经验

    LVS在企业生产环境中如何去排错呢,遇到问题我们该怎么办呢?LVS使用过程中,会遇到很多问题,如下为LVS故障排错思路。

    企业网站LVS+Keepalived+Nginx架构中,突然发现网站www.jfedu.net 部分用户访问巨慢,甚至无法访问,这个问题我们该如何定位呢?

    1)  客户端ping  www.jfedu.net ,通过ping返回域名对应的IP是否正常;

    2)  如果无法返回IP,或者响应比较慢,定位DNS或者网络延迟问题,可以通过tracert www.jfedu.net测试客户端本机到服务器的链路延迟;

    3)登录LVS服务器,ipvsadm  -Ln 查看当前后端web连接信息,显示如下:

    [root@LVS-Master keepalived]# ipvsadm -Ln 
    IP Virtual Server version 1.2.1 (size=4096)  
    Prot LocalAddress:Port Scheduler Flags  
    -> RemoteAddress:Port           Forward Weight ActiveConn InActConn  
    TCP  192.168.1.10:80 wlc 
    -> 192.168.1.6:80                 Route   100     2         13         
    -> 192.168.1.5:80                 Route   100     120       13         
    -> 192.168.1.4:80                 Route   100     1363      45 

    通过LVS ipvsadm信息,看到LVS 选择的轮训方式为加权最少连接,而网站也是部分无法访问,猜测是其中一台WEB服务器无法访问或者访问巨慢导致,如果单台WEB异常,为什么LVS+keepalived不能将异常的WEB服务器IP异常均衡列表呢?

    查看keepalived.conf负载均衡健康检查配置,部分截图如下:

    real_server 192.168.1.4  80  { 
      weight 100         
      TCP_CHECK { 
      connect_timeout 10  
      nb_get_retry 3 
      delay_before_retry 3 
      connect_port 80 
    } 
    }

    通过配置文件发现LVS默认用的是TCP检测方式,只要80端口能通,请求就会被转发到后端服务器。紧接着在LVS服务器使用wget  http://192.168.1.4/ 返回很慢,直至超时,而另外几台Nginx realserver返回正常,查看Nginx 192.168.1.4服务器80端口服务正常启动,所以对于LVS服务器来说是打开的,所以LVS会把请求转发给给它。

    为什么部分用户可以访问,有的用户无法访问呢,发现192.168.1.4服务器ifconfig查看IP,但是没有看到VIP地址绑定在lo:0网卡上,经排错由于该服务器被重启,realserver脚本配置VIP异常,启动realserver脚本,网站恢复正常。

    为了防止以上突发问题,增加LVS对后端Nginx URL的检测,能访问URL则表示服务正常。 对比之前的检测方式,从单纯的80端口到现在的URL检测,后端如果某台出现502超时错误,keepalived列表会自动踢出异常的realserver,等待后端realserver恢复后自动添加到服务器正常列表。Keepalived基于URL检查代码如下:

    real_server 192.168.1.4 80 { 
        weight 100
        HTTP_GET { 
        url { 
        path /monitor/warn.jsp 
        status_code 200 
         } 
        connect_timeout 10 
        nb_get_retry 3 
        delay_before_retry 3 
     } 
    }
  • 相关阅读:
    Delphi中多线程同步过程Synchronize的一些说明
    property中的read,write是什么意思?
    如何用delphi读写csv文件
    将DBGrid中的数据导入Excel表格中
    如何获取combobox显示的值
    WaitForSingleObject 的返回值
    关于GetOverlappedResult函数的一些知识
    串口编程:COMSTAT 结构
    windows 官方镜像下载地址
    ffmpeg 命令行改变视频分辨率
  • 原文地址:https://www.cnblogs.com/deny/p/9994929.html
Copyright © 2011-2022 走看看