一. 简介
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
三.架构图
四.安装配置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;