一. 简介

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 server 负载均衡 zookeeper hive 负载均衡参数_高可用负载均衡


四.安装配置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 {





}
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

       vrrp_unicast_bind 192.168.1.12
       vrrp_unicast_peer 192.168.1.13
authentication {
auth_type PASS  #认证方式
auth_pass 123456 #认证密码
}
virtual_ipaddress {

        192.168.1.100
}



}

备keepalived配置
vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

vrrp_script check_hive_alive {





}
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

       vrrp_unicast_bind 192.168.1.13
       vrrp_unicast_peer 192.168.1.12
authentication {
auth_type PASS  #认证方式
auth_pass 123456 #认证密码
}
virtual_ipaddress {

        192.168.1.100
}



}

检测脚本两节点都要配置:
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 server 负载均衡 zookeeper hive 负载均衡参数_HAproxy_02