【大数据HA】HAProxy实现thrift协议HMS服务的高可用-附Chatgpt协助截图

背景

之前安装了HMS(Hive metastore service),独立于hive运行,安装部署过程见我下面列出的另一篇文章,需要为它建立HA高可用功能。防止在访问时出现单点故障问题。

【大数据】Docker部署HMS(Hive Metastore Service)并使用Trino访问Minio-CSDN博客

本来想到的是Nginx,但是在进一步分析,HMS发布的是thrift协议,一种tcp协议,而nginx支持的是http和https协议,所以无法匹配。另外找解决方案,在chatgpt的帮助下,发现可以使用HAProxy来做thrift协议的HA,所以选择了HAProxy。

一:环境介绍

之前发布了HMS服务,现在需要支持HA,那么需要启动两个HMS(使用docker启动的),并且两个HMS指向同一个mysql数据库,这样在两个HMS之间可以实现HA,所以重新做了一个HMS的服务,在两台虚机上

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

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

使用trino访问了两个HMS实例,均能访问HMS及后端的minio数据

trino的catalog配置

trino访问数据

二:实现目标

环境已经准备好了,现在就是要使用HAProxy来代理到后端的两个HMS服务,并且在一台HMS下线后,仍然能使用另一台HMS对外服务。

三:安装HAProxy

yum install haproxy -y

四:配置HAProxy

找到配置文件/etc/haproxy/haproxy.cfg,修改frontend,backend,listen语段,frontend代表前端服务,客户端访问入口,backend代理后端服务,listen配置监控界面。因为HMS使用的是thrift协议,因此在设置时,需要设置mode为tcp,否则默认为http

frontend设置

frontend mainbind *:5000    #对外暴露的访问地址及端口mode tcp       #设置协议为tcp,thrift归属于tcp协议acl url_static       path_beg       -i /static /images /javascript /stylesheetsacl url_static       path_end       -i .jpg .gif .png .css .jsuse_backend static          if url_staticdefault_backend             hms    #后端服务的名称

backend设置

backend hmsbalance     roundrobin    #负载均衡策略mode tcp                  #协议模式,thrift归属tcpserver  app1 10.40.8.44:9083 check    #HMS服务1server  app2 10.40.8.45:9083 check    #HMS服务2

listen设置

listen statsbind :9000    # 页面访问端口stats enable    # 启用统计报告stats uri /haproxy_stats    # 设置统计页面的 URL 路径stats realm Haproxy\ Statistics    # 设置认证窗口标题stats auth admin:haproxy    # 设置访问统计页面的用户名和密码stats admin if TRUE    # 开启管理模式,允许通过界面进行某些操作

以上配置完成,下面贴出我这个文件haproxy.cfg的完整配置

#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   https://www.haproxy.org/download/1.8/doc/configuration.txt
#
#---------------------------------------------------------------------#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global# to have these messages end up in /var/log/haproxy.log you will# need to:## 1) configure syslog to accept network log events.  This is done#    by adding the '-r' option to the SYSLOGD_OPTIONS in#    /etc/sysconfig/syslog## 2) configure local2 events to go to the /var/log/haproxy.log#   file. A line like the following can be added to#   /etc/sysconfig/syslog##    local2.*                       /var/log/haproxy.log#log         127.0.0.1 local2chroot      /var/lib/haproxypidfile     /var/run/haproxy.pidmaxconn     4000user        haproxygroup       haproxydaemon# turn on stats unix socketstats socket /var/lib/haproxy/stats# utilize system-wide crypto-policiesssl-default-bind-ciphers PROFILE=SYSTEMssl-default-server-ciphers PROFILE=SYSTEM#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaultsmode                    httplog                     globaloption                  httplogoption                  dontlognulloption http-server-closeoption forwardfor       except 127.0.0.0/8option                  redispatchretries                 3timeout http-request    10stimeout queue           1mtimeout connect         10stimeout client          1mtimeout server          1mtimeout http-keep-alive 10stimeout check           10smaxconn                 3000listen statsbind :9000stats enablestats uri /haproxy_statsstats realm Haproxy\ Statisticsstats auth admin:haproxystats admin if TRUE#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend mainbind *:5000mode tcpacl url_static       path_beg       -i /static /images /javascript /stylesheetsacl url_static       path_end       -i .jpg .gif .png .css .jsuse_backend static          if url_staticdefault_backend             hms#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend staticbalance     roundrobinserver      static 127.0.0.1:4331 check#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend hmsbalance     roundrobinmode tcpserver  app1 10.40.8.44:9083 checkserver  app2 10.40.8.45:9083 check

重启HAProxy服务

systemctl reload haproxy

五:测试HAProxy功能


首先修改trino的metastore地址为thrift://10.40.8.44:5000

docker停止两个HMS服务

查看HAProxy页面服务http://10.40.8.44:9000/haproxy_stats,两个服务是下线的

trino访问,metastore地址10.40.8.44:5000,无法访问


启动一个服务

查看页面,一个HMS已经启动

trino访问


再启动另一个HMS,仍然能访问


反复多情况测试均成功,本次测试结束!

六:附注:列一下chatgpt给与的帮助截图

只能说chatgpt提升工作效率100%以上,某度,某元还是扎根好好做吧。注:我用的是chatgpt4

问:HMS的HA怎么做

问:Nginx可以做HMS服务的HA吗

我指出了问题点,gpt马上就纠正了错误,肯定了我的观点

问:目前有哪些支持Thrift 协议的负载均衡器

问:使用HAProxy如何支持thrift协议的服务的HA

问:Haproxy配置监控界面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/295590.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS Code实现“Ctr+save”保存代码自动格式化

一、下载Prettier - Code formatter插件 点击安装即可 二、配置 【1】打开文件——首选项——设置 或者左下角齿轮打开设置 【2】搜索设置框输入editor default formatter(意思是默认格式化设置),接着下拉选中刚下好的插件名称Prettier - C…

C++初级学习六——数组

一维数组 定义: 1、数组是把具有相同类型的若干变量按有序的形式组织起来的集合。 2、数组是一组用来存放多个相同类型的数据集合,该集合中的每一个成员称为数组元素。 3、通过数组名和一个下标唯一确定的称…

ChatGPT的GPTs是什么?

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 ​ 在 OpenAI 的DevDay(11 月 6日),该公司宣布推出 ChatGPT GPT:任何人都可以制作并与他人共享的 ChatGPT 自定义版…

线程池构造方法的认识

线程池中构造方法的认识 文章目录 线程池中构造方法的认识corePoolSize (核心线程数)maximumPoolSize(最大线程数)keepAliveTime(非核心线程的空闲超时时间)TimeUnitworkQueuethreadFactoryRejectedExecutionHandler拒绝策略 标准库中提供了一个ThreadPo…

智能优化算法应用:基于北方苍鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于北方苍鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于北方苍鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.北方苍鹰算法4.实验参数设定5.算法结果6.…

matlab实践(十一):导弹追踪

1.题目 a9.94,x062.06 2.方程 我们有: ( d x d t ) 2 ( d y d t ) 2 w 2 (\frac{\mathrm d\mathrm x}{\mathrm d\mathrm t})^2(\frac{\mathrm d\mathrm y}{\mathrm d\mathrm t})^2\mathrm w^2 (dtdx​)2(dtdy​)2w2 还有导弹始终指向船 ( d x d t d y d t ) …

mingw下编译opencv4.5.2

初衷: 加载之前的模型没问题,但最近加载另一个模型时出现报错: OpenCV: terminate handler is called! The last OpenCV error is: OpenCV(4.1.0) Error: Assertion failed (nodesMapIt ! nodesMap.end()) in sortByExecutionOrder, file G…

Vue和jQuery:横向对比

聚沙成塔每天进步一点点 ⭐ 专栏简介 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏!创建这个专栏的初衷是为了帮助大家更好地应对 Vue.js 技能树的学习。每篇文章都致力于提供清晰、深入的参考资料,让你能够更轻松、更自信地理解和掌握 Vue.js 的核心概念和技…

java并发编程三 共享内存的问题和synchronized解决方案

文章目录 共享带来的问题synchronized 解决方案方法上的 synchronized 共享带来的问题 小故事 老王(操作系统)有一个功能强大的算盘(CPU),现在想把它租出去,赚一点外快 小南、小女(线程&…

数字人解决方案——ER-NeRF实时对话数字人模型推理部署带UI交互界面

简介 这个是一个使用ER-NeRF来实现实时对话数字人、口播数字人的整体架构,其中包括了大语言回答模型、语音合成、成生视频流、背景替换等功能,项目对显存的要求很高,想要达到实时推理的效果,建议显存在24G以上。 实时对话数字人 …

CycleGAN-两个领域非匹配图像的相互转换

1. CycleGAN的简介 pix2pix可以很好地处理匹配数据集图像转换,但是在很多情况下匹配数据集是没有的或者是很难收集到的,但是我们可以很容易的得到两个领域大量的非匹配数据。2017年有两篇非常相似的论文CycleGAN和DiscoGAN,提出了一种解决非匹…

初识Docker-什么是docker

Docker是一个快速交付应用、运行应用的技术 目录 一、Docker 二、运用场景 一、什么是Docker?它的作用是什么? Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题? Docker允许开发中将应用、依赖、函数库、配置一起打包&…