高可用负载均衡:LVS + Keepalived

Posted yubenlam

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高可用负载均衡:LVS + Keepalived相关的知识,希望对你有一定的参考价值。

LVS + Keepalived 方案,基于DR模式的。参考文章如下:

youzhibing2904,《主从热备+负载均衡(LVS + keepalived)》
lvshaorong,《Keepalived实现NAT+LVS+后端健康检测》

 

 

结构图如下:
技术图片

 

一、配置网络

Tomcat-1:  192.168.44.18
Tomcat-2:  192.168.44.19
Master:      192.168.44.20
Slave:     192.168.44.21

二、Tomcat 

1、安装JDK、Tomcat、net-tools(realserver脚本需使用 ifconfig / route 命令),开放8080端口,确保单独访问成功。

2、新增 /etc/init.d/realserver 脚本,为 lo 网卡增加 vIP。

SNS_VIP=192.168.44.100
/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
service realserver start

# 检查是否存在lo:0
ifconfig

 

三、Keepalived

1、安装keepalived、ipvsadm(主要用来查看 lvs 信息)。

这里遇到一个大问题,CentOS 7 下 yum 安装 keepalived,启动时 /var/log/message 报错,curl 过去发现只有轮询的转发功能(其中一个tomcat 停掉后,照样会把请求转发到这台服务器),负载均衡 & 健康检查 都失效,应该是个bug。

技术图片

yum 上的 keepalived 版本为 1.3.5

技术图片

避开这个版本手动编译安装,下载地址:http://www.keepalived.org/download.html

# 依赖包
yum install curl gcc openssl-devel libnl3-devel net-snmp-devel

# 解压
tar -zxvf keepalived-xxxx

# 进入目录编译安装
./configure
make && make install

手动新增配置文件 /etc/keepalived/keepalived.conf

global_defs {
    notification_email {
        380249663@qq.com
    }
    notification_email_from sns-[email protected]
    smtp_server 192.168.44.20
    smtp_connection_timeout 30
    router_id LVS_MASTER        # 同一网络上具有唯一性的id
}

# 健康检测
vrrp_instance VI_1 {
    state MASTER                # 角色,MASTER为主,BACKUP为备
    interface ens32             # 网卡名
    virtual_router_id 66        # 虚拟路由编号,主从要一直
    priority 100            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    authentication {
        auth_type PASS
        auth_pass 1111      # 验证码,主从一致
    }
    virtual_ipaddress {
        192.168.44.100      # 定义虚拟ip(VIP),可多设,每行一个
    }
}

# lvs负载均衡
virtual_server 192.168.44.100 8080 {
    delay_loop 6        # 健康检查时间,单位为秒
    lb_algo wrr         # 负载调度的算法为wrr
    lb_kind DR          # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式
    nat_mask 255.255.255.0
    persistence_timeout 0        # 同一IP 0秒内的请求都发到同个real server
    protocol TCP

    # 应用服务器
    real_server 192.168.44.18 8080 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.44.19 8080 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}    

启动 keepalived 后使用 ipvsadm 验证 lvs

ipvsadm -L -n

 

 

 

 

 

 

以上是关于高可用负载均衡:LVS + Keepalived的主要内容,如果未能解决你的问题,请参考以下文章

高可用负载均衡:LVS + Keepalived

RedHat 7配置keepalived+LVS实现高可用的Web负载均衡

LVS基础及LVS+Keepalived实现双主高可用负载均衡

lvs+keepalived实现高可用负载均衡

LVS+Keepalived高可用负载均衡架构原理及配置

LVS/DR + keepalived负载均衡高可用实现