前言
尽管doris可部署多个fe节点进行高可用,避免单点故障,但当用户连接的fe节点宕机后,用户需切换连接ip,以继续使用doris集群。
在用户不切换连接ip的场景下,能否保证doris集群的高可用?
在之前已探讨过使用proxysql+keepalived的方案,那使用haproxy+keepalived能否可行?
haproxy
HAProxy 以其高性能、低延迟能力而闻名,广泛应用于高流量负载的 Web 应用程序中。 它能够有效地处理数百万个并发连接,但不支持Query重写、缓存。
部署参考:
1.准备工作
虚拟ip: 192.168.71.50
机器A: 安装keepalived,haproxy
机器B: 安装keepalived,haproxy
2.机器A、B分别部署haproxy
2.1 安装,yum方式安装
yum -y install haproxy
2.2 配置haproxy, 配置位置/etc/haproxy/haproxy.cfg,主要配置如下
(机器AB配置均一样)
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
defaults
mode http
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 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend web_frontend
bind 0.0.0.0:5033
mode tcp
default_backend doris
backend doris
balance roundrobin
mode tcp
server app1 {doris-fe1-ip}:{doris-fe1-queryPort} check inter 2000 fall 3 rise 2
server app2 {doris-fe2-ip}:{doris-fe2-queryPort} check inter 2000 fall 3 rise 2
server app3 {doris-fe3-ip}:{doris-fe3-queryPort} check inter 2000 fall 3 rise 2
2.3 启动haproxy
systemctl start haproxy
3.机器A、B分别部署keepalived
3.1 安装keepalived
yum -y install keepalived
3.2 配置keepalived,配置位置/etc/keepalived/keepalived.conf,参考如下:
主keepalived配置: 抢占模式,state 配置为MASTER ,priority为100
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
script_user root
enable_script_security
}
#检查haproxy是否存活的脚本(配置时需把注释删掉)
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight -20
fall 3
rise 1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass xxxyyy(密码)
}
virtual_ipaddress {
192.168.71.50
}
track_script {
chk_haproxy
}
}
备keepalived配置: 抢占模式,state 配置为BACKUP,priority为90
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
script_user root
enable_script_security
}
#检查haproxy是否存活的脚本(配置时需把注释删掉)
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight -20
fall 3
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass xxxyyy(密码)
}
virtual_ipaddress {
192.168.71.50
}
track_script {
chk_haproxy
}
}
3.3 机器A、B启动keepalived
systemctl start keepalived
4.验证测试
使用haproxy+keepalived后,请求能通过虚拟ip负载到不同的fe节点上,并能避免调度到异常fe上。
当有haproxy实例宕机后,keepalived能使backup的实例变为master,从而使虚拟ip漂移到正常节点上。
并且,过haproxy,查询doris集群的整体时延无明显增加。
总结
1.容器部署haproxy,可能遇到Could not open configuration file Permission denied,是关闭selinux导致权限有问题,但组成大数据集群的机器一般会选择关闭该特性,因此不推荐使用容器部署。
2.避免单点故障,需keepalived支撑。
3.与proxysql相比,部署安装极为简单,易于运维。