大数据环境下hive使用HAproxy+keepalived+vip搭建高可用负载均衡集群

一. 简介

haproxy是一个开源的,高性能的,负载均衡软件,借助haproxy可以快速,可靠的构建一个负载均衡群集。

优点如下:

1.可靠性和稳定性非常好,可以和硬件级的负载均衡设备F5相媲美。

2.最高可同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个。

3.支持8种负载均衡算法,支持回话保持。

4.支持虚拟主机功能。

5.支持连接拒绝,全透明代理并且有一个功能强大的服务器状态监控界面。

6.拥有功能强大的ACL支持。

haproxy真的很强大。这里不对他的功能一一列举了,读者可自行去网上了解其他功能。

haproxy构建群集的时候,比如后方代理两个http,如果haproxy宕机,后方的http正常运行网站也是瘫痪状态,这就造成了单点故障。

这时keepalived就登场了,keepalived基于vrrp协议,两台主机之间生成一个虚拟的ip,我们称漂移ip,漂移ip由主服务器承担,一但主服务器宕机,备份服务器就会抢占漂移ip,继续工作,有效的解决了群集中的单点故障。两者相结合,挺好的。

二.环境要求

环境 centos7.4

漂移ip                192.168.1.100

主keepalived    

备keepalived    

主haproxy         192.168.1.12

备haproxy         192.168.1.13

hive1                 192.168.1.14

hive2                 192.168.1.15

三.架构图

大数据环境下hive使用HAproxy+keepalived+vip搭建高可用负载均衡集群

四.安装配置haproxy+keepalived

1 .构建haproxy服务器

haproxy和备haproxy配置一样 两台都要配置

yum install -y haproxy

vi /etc/haproxy/haproxy.cfg

#---------------------------------------------------------------------

# Global settings

#---------------------------------------------------------------------

global

    log         127.0.0.1 local2 info

    tune.bufsize 16384

    tune.chksize 16384

    chroot      /var/lib/haproxy

    pidfile     /var/run/haproxy.pid

    maxconn     4000

    user        haproxy

    group       haproxy

    daemon

    ssl-server-verify required

    max-spread-checks 2s

    # turn on stats unix socket

    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------

# common defaults that all the 'listen' and 'backend' sections will

# use if not designated in their block

#---------------------------------------------------------------------

defaults

    mode                    tcp

    log                     global

    option                  httplog

    option                  dontlognull

    option http-server-close

    option forwardfor       except 127.0.0.0/8

    option                  redispatch

    retries                 3

    timeout http-request    10s

    timeout queue           1m

    timeout connect         60m

    timeout client          60m

    timeout server          60m

    timeout http-keep-alive 10s

    timeout check           10s

    maxconn                 3000

listen  hive #定义后端主机组

     bind *:8082

    balance source

    maxconn 1024

    server hive1 192.168.1.14:8081 check inter 1500 rise 1 fall 1

    server hive2 192.168.1.15:8081 check inter 1500 rise 1 fall 1

listen  hivet #定义后端主机组

     bind *:10002

    balance source

    maxconn 1024

    server hivet1 192.168.1.14:10001 check inter 1500 rise 1 fall 1

    server hivet2 192.168.1.15:10001 check inter 1500 rise 1 fall 1

listen admin_stats  #为haproxy访问状态监控页面配置,取名为stats

    bind *:1080  #监听端口

    stats enable  #启用监听端口

    log global # 继承global中log的定义

    mode http  #http的7层模式

    option httplog

    maxconn 5000

    stats refresh 30s #页面自动刷新时间30s

    stats uri /stats #监控页面的url访问路径,即http://ip/stats访问监控页面

    stats realm Haproxy\ Statistics #监控页面的密码框提示信息

    stats auth admin:admin #监控页面的用户和密码admin,可以设置多个用户名

    stats admin if TRUE #当通过认证才可管理

systemctl start haproxy

systemctl enable haproxy

systemctl status haproxy

2.构建keepalived

yum install -y keepalived nc psmisc 

主keepalived配置

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

vrrp_script check_hive_alive {

    script "/usr/bin/check_hive_alive.sh"

    interval 3 # 每3s检查一次

    weight -10  # 检测失败(脚本返回非0)则优先级减少10个值

    fall 3     # 如果连续失败次数达到此值,则认为服务器已down

    rise 2     # 如果连续成功次数达到此值,则认为服务器已up,但不修改优先级

}

global_defs {

router_id LVS_HIVE #运行keepalived机器的一个标识

}

 

vrrp_instance VI_1 {

interface eth0 #设置实例绑定的网卡

state master  #指定哪个为master,哪个为backup

virtual_router_id 92 #VPID标记,主备必须一样

priority 180 #优先级,高优先级竞选为master

        nopreempt  #不抢占VIP

       vrrp_unicast_bind 192.168.1.12

       vrrp_unicast_peer 192.168.1.13

authentication {

auth_type PASS  #认证方式

auth_pass 123456 #认证密码

}

virtual_ipaddress {

        ## 设置VIP,必须是同一网段虚拟IP

        192.168.1.100

}

    track_script {

        check_hive_alive #hive存活检查

    }

}

备keepalived配置

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

vrrp_script check_hive_alive {

    script "/usr/bin/check_hive_alive.sh"

    interval 3 # 每3s检查一次

    weight -10 # 检测失败(脚本返回非0)则优先级减少10个值

    fall 3     # 如果连续失败次数达到此值,则认为服务器已down

    rise 2     # 如果连续成功次数达到此值,则认为服务器已up,但不修改优先级

}

global_defs {

router_id LVS_HIVE #运行keepalived机器的一个标识

}

 

vrrp_instance VI_1 {

interface eth0 #设置实例绑定的网卡

state backup  #指定哪个为master,哪个为backup

virtual_router_id 92 #VPID标记,主备必须一样

priority 170 #优先级,高优先级竞选为master

        nopreempt  #不抢占VIP

       vrrp_unicast_bind 192.168.1.13

       vrrp_unicast_peer 192.168.1.12

authentication {

auth_type PASS  #认证方式

auth_pass 123456 #认证密码

}

virtual_ipaddress {

        ## 设置VIP,必须是同一网段虚拟IP

        192.168.1.100

}

    track_script {

        check_hive_alive #hive存活检查

    }

}

检测脚本两节点都要配置:

vim /usr/bin/check_hive_alive.sh

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin

A=`ps -C haproxy --no-header | wc -l`

if [ $A -eq 0 ];then

    systemctl start haproxy

sleep 8

port_test2=`nc -z 192.168.1.12/13 1080`  #检查haproxy的admin_stats端口

if [ $? -eq 1 ];

   then

     echo 'hive server is died'

   systemctl stop keepalived

   exit 1

else

   exit 0

fi

fi

chmod +x /usr/bin/check_presto_alive.sh

systemctl start keepalived

systemctl enable keepalived

systemctl status keepalived

查看主节点keepalived 的eth0上是否有漂移IP

五.测试(停掉1台hive和haproxy测试能正常使用就OK了)

hive-3.1.2/bin/beeline -nroot -p123456 -ujdbc:hive2://192.168.1.100:10001;

大数据环境下hive使用HAproxy+keepalived+vip搭建高可用负载均衡集群