HAProxy适配openGauss使用指导书

2024-03-13 11:04

本文主要是介绍HAProxy适配openGauss使用指导书,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、HAProxy 简介

  • HAProxy 是一个开源的项目,其代码托管在 Github 上,代码链接如下:HAProxy 代码链接。
  • HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
  • HAProxy 实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。

二、HAProxy 实现 openGauss 集群的读写分离和负载均衡

  • HAProxy 实现 openGauss 集群的读写分离和负载均衡,前提条件需由 Patroni 管理 openGauss 数据库集群,关键点在于配置文件的配置。

  • HAProxy 配置中分成五部分内容,分别如下:

    - global:设置全局配置参数,属于进程的配置,通常是和操作系统相关。- defaults:配置默认参数,这些参数可以被用到frontend,backend,listen组件;- frontend:接收请求的前端虚拟节点,frontend可以更加规则直接指定具体使用后端的backend;- backend:后端服务集群的配置,是真实服务器,一个backend对应一个或者多个实体服务器;- listen :frontend和backend的组合体。
    
  • 在 HAProxy 配置文件中,HAProxy 完整配置文件链接,我们定义了两个 listen 模块,名称分别为 opengauss 和 opengauss_balance,对应集群主机的写操作和备机的读操作及负载均衡。在 listen 模块中,使用 server 关键字设置后端服务器,即设置 Patroni 管理的 openGauss 集群中各个数据库节点的 ip 和端口号,即可将数据库节点的信息加入到 HAProxy 的管理中。

2.1 主机的写操作配置

listen opengauss  # 用于主机bind *:5000   #开放的端口之一,用于连接主机option httpchk# 开启对后端服务器的健康检测,接受健康监测[check]http-check expect status 200default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions# 监测的间隔时间[inter 3s], 监测失败多少次后被认为后端服务器是不可用的[fall 3],监测正常多少次后被认为后端服务器是可用的[rise 2],当标记为down时,关闭HAProxy到后台服务器的连接[on-marked-down shutdown-sessions]server opengauss_ip1_port1 ip1:port1 maxconn 100 check port 8008server opengauss_ip2_port2 ip2:port2 maxconn 100 check port 8008server opengauss_ip3_port3 ip3:port3 maxconn 100 check port 8008server opengauss_ip4_port4 ip4:port4 maxconn 100 check port 8008# 使用server关键字设置后端服务器,为后端服务器所设置的内部名称[opengauss_ip1_port1], 该名称将会呈现在日志或警报中,后端服务器的IP地址,支持端口映射[ip1:port1]

原理分析:

HAProxy 配置中调用了健康监测 REST API 端点,通过 Patroni 获取集群中的主机备机信息。

Patroni 有一个丰富的 REST API(Representational State Transfer,表现层状态转化),所谓 REST API,其是前后端分离的最佳实践,是开发的一套标准或者是一套规范,其特点总结如下:

(1) 每一个URI代表一种资源;(2) 客户端和服务器之间,传递这种资源的表现层;(3) 客户端通过四个HTTP动词,对服务器端资源进行操作,实现“表现层状态转化”。

在 HTTP 协议中,四个表示操作方式的动词为:GET、POST、PUT、DELETE,它们分别对应四种基本的操作:GET 用来获取资源,POST 用来新建资源(也可以用于更新资源),PUT 用来更新资源,DELETE 用来删除资源。

Patroni 中的 REST API,有以下几种使用场景:参考链接:Patroni REST API

(1) 由Patroni自身使用用以leader竞选;(2) 由patronictl工具使用用以执行 failovers、switchovers、reinitialize、restarts、reloads操作;(3) 由HAProxy或者其他负载均衡器进行HTTP健康监测,或者监控。

本文中 HAProxy 即利用 Patroni 中的 REST API 进行健康监测,进而识别集群中的主机,备机,以及各个节点的健康状态。

对于健康监测中的 GET 请求,Patroni 返回一个包含节点状态、HTTP 状态码的 JSON 文档。如果不需要复杂的 JSON 文档,只保留一些关键信息,可以用 OPTIONS 代替 GET。

对于下列的请求:当 Patroni 节点拥有 leader 锁,且作为 primary 节点 running 时,Patroni REST API 将返回 HTTP 状态码 200:

(1) GET /(2) GET /master(3) GET /primary(4) GET /read-write

上述配置中,option httpchk相当于调用了GET /请求,http-check expect status 200相当于过滤出健康监测返回的状态码应为 200,对于所配置的数据库,当为主机时,其状态码为 200,于是上面的配置即选出了数据库集群中的主机,用 HAProxy 的 ip 和 5000 端口号即可代理集群中的主机。在 openGauss 集群中,通过 gsql 命令即可连接到集群的主机

gsql -d postgres -h HAProxy_ip -p 5000 -U user -W password

2.2 备机的读操作及负载均衡配置

listen opengauss_balance  #用于备机bind *:5001           #开放的端口之一,用于连接备机mode tcpoption tcplogbalance roundrobin  #balance定义负载均衡算法,roundrobin表示基于权重进行轮询,在服务器的处理时间保持均匀分布时,这是最平衡、最公平的算法。此算法是动态的,这表示某权重可以在运行时进行调整option httpchk OPTIONS /replicahttp-check expect status 200default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessionsserver opengauss_ip1_port1 ip1:port1 maxconn 100 check port 8008 inter 5000 rise 2 fall 2server opengauss_ip2_port2 ip2:port2 maxconn 100 check port 8008 inter 5000 rise 2 fall 2server opengauss_ip3_port3 ip3:port3 maxconn 100 check port 8008 inter 5000 rise 2 fall 2server opengauss_ip4_port4 ip4:port4 maxconn 100 check port 8008 inter 5000 rise 2 fall 2

原理分析:

对于GET /replica请求,当 Patroni 节点为 running 状态,角色为 replica,未设置 noloadbalance 标签时,http 返回状态码为 200。

上述配置中,option httpchk OPTIONS /replica即调用了OPTIONS /replica请求,并以 OPTIONS 代替 GET 简化返回的信息,http-check expect status 200相当于过滤出健康监测返回的状态码应为 200,因此当所配置的数据库为集群中的备机时,其状态码为 200,于是上面的配置即选出了数据库集群中的备机,同时配置balance roundrobin,即定义负载均衡算法,对于读请求,将轮询发送于各个运行中的备机,因此,上述的配置可以用 HAProxy 的 ip 和 5001 端口号代理集群中的备机,且实现负载均衡。

在 openGauss 集群中,通过 gsql 命令即可连接到集群的备机

gsql -d postgres -h HAProxy_ip -p 5001 -U user -W password

2.3 监控界面描述

除此之外,我们还配置了一个 HAProxy 的监控界面,通过访问该界面可以查看集群中各个节点的状态。

listen stats  #定义一个名为stats的部分mode http# 定义为HTTP模式bind *:7000  #开放的端口之一,用于监控# 定义监听的套接字stats enable# stats是HAProxy的一个统计页面的套接字stats uri /# 设置统计页面的uri为/

上述配置中,访问 http://ip:7000/即可查看监控界面,其中 ip 为部署 HAProxy 机器的 ip

上图中,对应一主三备集群,第一个模块 openGauss 对应写操作,绿色的一栏表示集群中的主机,第二个模块 opengauss_balance 对应读操作,绿色的栏表示集群中的备机。

至此,可通过 HAProxy 实现 Patroni 管理的 openGauss 集群的读写分离和负载均衡。

这篇关于HAProxy适配openGauss使用指导书的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

关于pandas的read_csv方法使用解读

《关于pandas的read_csv方法使用解读》:本文主要介绍关于pandas的read_csv方法使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录pandas的read_csv方法解读read_csv中的参数基本参数通用解析参数空值处理相关参数时间处理相关

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳