【大数据HA】keepalived结合haproxy实现高可用的HMS

背景

上一篇实现了haproxy代理后端HMS服务实现高可用。但是对于haproxy还是单点故障,所以需要对haproxy进一步做HA,实现真正的后端服务的HA。

要实现haproxy的HA,需要使用到keepalived,使用keepalived是VIP虚拟IP服务,实现故障转移。

一:环境介绍

虚机一:wuxdihadl03b,IP 10.40.8.44,部署了HMS服务

虚机二:wuxdihadl04b,IP 10.40.8.45,部署了HMS服务

二:大体流程:

1.两台机器分别部署HMS服务

2.两台机器分别部署HAProxy,并配置指向两个HMS服务

3.两台机器分别部署Keepalived,设置统一虚拟IP

4.trino配置虚拟IP的HAProxy地址,指向后端的HMS服务

5.测试HA功能

HMS和HAProxy的安装配置不再介绍,参考上一篇。

三:安装keepalived

两台机器分别安装

yum install keepalived -y

四:配置keepalived

找到/etc/keepalived/keepalived.conf,主节点如下配置

! Configuration File for keepalived

global_defs {
   notification_email {
     # 发送通知邮件的地址,可选
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc  # 发送通知邮件的发件人地址,可选
   smtp_server 127.0.0.1 # 发送邮件所使用的SMTP服务器,可选
   smtp_connect_timeout 30 # 发送邮件的连接超时时间,可选
   router_id 10.40.8.44     #每个keepalived主机唯一标识,建议使用当前主机名或IP
   vrrp_skip_check_adv_addr 
   vrrp_strict 
   vrrp_garp_interval 0 
   vrrp_gna_interval 0
}

#检测haproxy服务是否正常,如果不正常或未运行,则keepalived会进行漂移,放弃当前节点为主节点,降为备用节点
vrrp_script haproxy-check {
    script "killall -0 haproxy"  #这个命令是用来检查是否有名为 "haproxy" 的进程在运行
    interval 2 #两秒检查一次
    weight 20 #如果检查失败每次扣除优先级20分
}

vrrp_instance VI_1 {
    state MASTER #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP
    interface ens192 #绑定为当前虚拟路由器使用的物理接口,网卡名称
    virtual_router_id 51 #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一
    priority 100 #当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高
    advert_int 1
    authentication { ##认证机制
        auth_type PASS
        auth_pass 1111
    }

    #重点!!!虚拟IP,可以指定多个,建议指定当前网段未被使用的IP
    virtual_ipaddress {
        10.40.8.200
    }

    #配置监控脚本,一旦出现故障,根据脚本结果决定是否实行故障转移
    track_script {
        haproxy-check weight 20
    }
}

备用节点配置,只需要改三处

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc 
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30 
   router_id 10.40.8.45 #修改标志     
   vrrp_skip_check_adv_addr 
   vrrp_strict 
   vrrp_garp_interval 0 
   vrrp_gna_interval 0
}


vrrp_script haproxy-check {
    script "killall -0 haproxy"  
    interval 2 
    weight 20 
}

vrrp_instance VI_1 {
    state BACKUP #改为BACKUP
    interface ens192 
    virtual_router_id 51 
    priority 99 #优先级降低
    advert_int 1
    authentication { 
        auth_type PASS
        auth_pass 1111
    }

    virtual_ipaddress {
        10.40.8.200
    }

    track_script {
        haproxy-check weight 20
    }
}

五.启动keepalived

使用systemctl status keepalived 命令可以查看keepalived状态,在备用节点可以发现如下标识,主节点没有该信息。

六.测试

修改trino的catalog的HMS地址为 10.40.8.200:5000, 重启trino,访问数据,测试场景

1.停掉两个HMS服务,trino无法访问数据

2.启动任意一个HMS服务,trino成功访问数据

3.启动另一个HMS服务,trino成功访问数据

4.停掉两个HAProxy服务,trino无法访问数据

5.启动任意一个HAProxy服务,trino成功访问数据

6.启动另一个HAProxy服务,trino成功访问数据

七:keepalived实现故障转移的理解

keepalived实现故障转移的原理:

1.在wuxdihadl03b和wuxdihadl04b上分别启动了haproxy1和haproxy2,并且启动了keepalived1和keepalived2,并且keepalived1为主节点。此时访问虚拟IP 10.40.8.200:5000 ,实际上访问的是wuxdihadl03b的keepalived1,keepalived1访问的是本机的haproxy1,haproxy1再分发到后台的HMS。

2.当haproxy1宕机时,keepalived1会立即检测到,同属一个路由的keepalived1和keepalived2会迅速切换,keepalived2变成主节点,keepalived1变成备用节点,此时访问虚拟IP 10.40.8.200:5000 ,实际上访问的是wuxdihadl04b的keepalived2,keepalived2访问的是本机的haproxy2,haproxy2再分发到后台的HMS。

因此与我原来的理解不同,keepalived是通过自身的主备节点切换,再根据主节点去访问本机的代理服务,而不是由同一个keepalived去访问到多个haproxy服务,从keepalived配置中没有关于hadproxy的配置佐证了这点,此点刷新了我的认知。

相关推荐

  1. K8S、keepalived、haproxy 可用集群实战

    2024-01-04 10:38:09       32 阅读
  2. KeepAlived搭建可用HAproxy负载均衡集群系统

    2024-01-04 10:38:09       27 阅读
  3. web集群(haproxy负载均衡+keepalived可用)

    2024-01-04 10:38:09       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-04 10:38:09       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-04 10:38:09       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-04 10:38:09       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-04 10:38:09       18 阅读

热门阅读

  1. 网站的数据是如何收集和分析的?

    2024-01-04 10:38:09       43 阅读
  2. 用python写个爬虫蜘蛛

    2024-01-04 10:38:09       50 阅读
  3. php composer安装

    2024-01-04 10:38:09       44 阅读
  4. 通用异构参数服务器技术

    2024-01-04 10:38:09       35 阅读
  5. Word2Vector介绍

    2024-01-04 10:38:09       42 阅读
  6. 客户投诉处理常用的ChatGPT通用提示词模板

    2024-01-04 10:38:09       48 阅读
  7. python 27例子(持续更新)

    2024-01-04 10:38:09       38 阅读
  8. 计算机网络期末复习题(一)

    2024-01-04 10:38:09       31 阅读
  9. Vue 3 中的 watch 函数:实战指南

    2024-01-04 10:38:09       29 阅读
  10. 阿里云服务器Alibaba Cloud Linux 3镜像版本大全说明

    2024-01-04 10:38:09       37 阅读