LVS+keepalived+nginx+tomcat

  • LVS+keepalived+nginx+tomcat已关闭评论
  • 163 次浏览
  • A+
所属分类:linux技术
摘要

本次配置基于DR负载均衡模式,设置一个VIP(Virtual IP)为19.50.67.173,用户只需要访问这个IP地址即可获得后端服务


一、 环境准备

本次配置基于DR负载均衡模式,设置一个VIP(Virtual IP)为19.50.67.173,用户只需要访问这个IP地址即可获得后端服务

其中,负载均衡主机为19.50.67.165(LVS1),备机为 19.50.67.169(LVS2)。Web服务器A为19.50.67.171(WEB1),Web服务器B为19.50.67.172(WEB2)。四台CentOS的防火墙都需要关闭。

由于LVS基于4层转发,所以LVS到NGINX的过程中,其实并没有什么性能损失,实现了两组NGINX同时在线,提供了更好的性能。

目前此架构已经在公司商用运行,未出现过故障,转发非常稳定。

由于网上此类教程较多,故不进行太详细描述过程。

 LVS+keepalived+nginx+tomcat

二、 WEB服务器配置

服务器配置不多做介绍,用APACHE或者NGINX即可;如果用NGINX,后端则还可以做反向代理,提供更好的自定义转发。

yum install httpd

systemctl start httpd

systemctl enable httpd

 

然后修改配置文件即可。

2.2 配置realserver脚本

  1. 进入指定文件夹:cd /etc/init.d/
  2. 编辑脚本文件:vim realserver

 

 

#!/bin/bash

SNS_VIP=19.50.67.173     #虚拟IP地址

.  /etc/rc.d/init.d/functions    #.后边有空格,或者source  /etc/rc.d/init.d/functions

case "$1" in

start)

       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

       /sbin/route add -host $SNS_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"

       ;;

stop)

       ifconfig lo:0 down

       route del $SNS_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"

       ;;

*)

       echo "Usage: $0 {start|stop}"

       exit 1

esac

exit 0

 

保存脚本文件后更改该文件权限:chmod 755 realserver,开启realserver服务:service realserver start(systemctl start realserver)。

下图所示表示配置正确

 LVS+keepalived+nginx+tomcat

每一台WEB服务器都要配置此脚本文件 #keepalived服务器不需要配置。

三、keepalived服务器配置

3.1 master配置

这里只展示了80端口的配置,如果需要其他端口,可以继续配置。

 

 

global_defs {

   notification_email {

     acassen@firewall.loc

     failover@firewall.loc

     sysadmin@firewall.loc

   }

   #notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server 192.168.200.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

   vrrp_skip_check_adv_addr

   #vrrp_strict

   vrrp_garp_interval 0

   vrrp_gna_interval 0

}

 

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        19.50.67.173

    }

}

virtual_server 19.50.67.173 80 {

    delay_loop 5

    lb_algo wrr

    lb_kind DR

    persistence_timeout 30

    protocol TCP

 

    real_server 19.50.67.171 80 {

        weight 2

       TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3    #新版本已经改为retry

        delay_before_retry 3

        #connect_port 80 加了此项会报错

        }

        # HTTP_GET {

            # url {

              # path /

              # status_code 200

            # }

            # connect_timeout 3

            # nb_get_retry 3

            # delay_before_retry 3

        # }

    }

        real_server 19.50.67.172 80 {

        weight 2

       TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        #connect_port 80 加了此项会报错

        }

        # HTTP_GET {

            # url {

              # path /

              # status_code 200

            # }

            # connect_timeout 3

            # nb_get_retry 3

            # delay_before_retry 3

        # }

    }

}

 

3.2 backup配置

将state由MASTER改为BACKUP将priority由100改为99,其他的保持和master不变。

 

 

vrrp_instance VI_1 { 

    state BACKUP # 这里改为BACKUP

    interface eth1 

    virtual_router_id 51 

    priority 99 # 这里改为99,master优先级是100

    advert_int 1 

    authentication { 

        auth_type PASS 

        auth_pass 1111 

    } 

    virtual_ipaddress { 

        192.168.80.200 

    } 

}

 

 

三、 验证

因为两台真实服务器的取值一致,所以会依次交替将请求转发给两台服务器,以此实现负载均衡。

Master和backup的priority不一样,所以同一时间只会有一台keepalived工作,以此实现主从热备。

ipvsadm -ln可以查看keepalived转发明细(三个端口均转发到了后端NGINX)

ipvsadm -L -n -c查看链接状态

 LVS+keepalived+nginx+tomcat