HAProxy Data Plane API 实现对 haproxy 的配置管理

news2024/12/31 6:30:32

文章目录

  • 前言
  • 一、安装
    • 1. 下载HAProxy Data Plane API
    • 2. 创建 Data Plane API 配置文件 /etc/haproxy/dataplaneapi.hcl
    • 3. 修改haproxy的配置文件
  • 二、简单使用
    • 1. 查询请求
    • 2. 提交修改请求
  • 总结


前言

我们平时对 haproxy 配置的修改,往往是 SSH 连接进去节点,然后手动编辑配置文件,最后重启 haproxy 的服务,不止麻烦,还会影响生产环境。
而 HAProxy Data Plane API ,他通过 API 的方式,给我们提供了管理 haproxy 配置文件的功能,通过这些 API 我们可以实现增删改 frontend、backend、acl、listen 等等,并且自动实现热加载,不需要重启。


一、安装

1. 下载HAProxy Data Plane API

https://github.com/haproxytech/dataplaneapi/releases/download/v2.4.4/dataplaneapi_2.4.4_Linux_x86_64.tar.gz

将压缩包里面的程序包 build/dataplaneapi 放在 /usr/local/bin/

2. 创建 Data Plane API 配置文件 /etc/haproxy/dataplaneapi.hcl

dataplaneapi {
  host = "0.0.0.0"
  port = 5555

  user "admin" {
    insecure = true
    password = "adminpwd"
  }

  transaction {
    transaction_dir = "/tmp/haproxy"
  }
}

haproxy {
  config_file = "/etc/haproxy/haproxy.cfg"
  haproxy_bin = "/usr/local/haproxy/sbin/haproxy"

  reload {
    reload_cmd  = "service haproxy reload"
    restart_cmd = "service haproxy restart"
    reload_delay = "5"
  }
}

3. 修改haproxy的配置文件

使之开启并指向 Data Plane API 的配置文件

haproxy 要使用使用 Data Plane API 必须使用 master-worker 模式启动

global
    master-worker
    stats socket /var/run/haproxy.sock mode 660 level admin


program api
    command dataplaneapi -f /etc/haproxy/dataplaneapi.hcl
    no option start-on-reload

这样启动haproxy后,他就会自动启动Data Plane API,提供功能

在这里插入图片描述

二、简单使用

1. 查询请求

如下地址,访问可以看到能用的API

地址替换你实际的ip和端口,这里 5555 端口是在上面 dataplaneapi.hcl 指定的

http://192.168.203.8:5555/v2/docs

访问需要登录验证,如果是浏览器,直接弹窗输入用户名密码

如果是用 postman 发请求,默认的密码adminpwd,那他对应的token就是:

Authorization

Basic YWRtaW46YWRtaW5wd2Q=

该接口返回如下页面,可以看到他提供的所有 API:
在这里插入图片描述

查询请求都只需要传入token,或者通过httpClient调用使用.basicAuth(“admin”, “adminpwd”);
而提交修改请求需要先开启一个事务或者传入一个版本号,才能执行

2. 提交修改请求

我们如果想要新增一个简单的 backend 到配置里面,我们需要:

获取当前版本号 —— 开启事务 —— 新增 backend —— 提交事务

  • 获取当前版本号

GET

http://192.168.203.8:5555/v2/services/haproxy/configuration/version
  • 开启事务

POST

http://192.168.203.8:5555/v2/services/haproxy/transactions?version=2

注意这个接口后面必须带上当前版本号

然后返回的id要记下来,有用的

在这里插入图片描述

  • 请求创建backend的接口

POST

http://192.168.203.8:5555/v2/services/haproxy/configuration/backends??transaction_id=xxx

把上面返回的id作为这里的参数,backend的信息写进去body
在这里插入图片描述

  • 提交事务

PUT

http://192.168.203.8:5555/v2/services/haproxy/transactions/XXX

在这里插入图片描述

这时候对haproxy配置文件的操作就都提交上去了


总结

欢迎指出我的错误!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

竞赛 基于深度学的图像修复 图像补全

1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学的图像修复 图像补全 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-se…

孙哥Spring源码第25集

第25集、处理代理中获取代理进行方法调用 0、问题所在 1、实现ApplicationContextAware接口实现代理 它的处理是在ApplicationContextAware中处理的 2、ExposeProxy分析 整体 分析 如何设置成了false就会有下面的问题 3、使用EnableAspectJAutoProxy解决代理问题 4、到底如何…

让自己敲代码的速度起飞

前言 打字速度可以说是成为一名程序员的基本功,程序员的打字速度在工作中越来越重要,下面就为大家分享一下我在联系打字速度的时候一些小经验,希望对大家有帮助。 刚开始学习编程的时候,我每天都会抽出1个小时进行打字练习&…

微信小程序实现拍照并拿到图片对象功能

微信小程序提供了函数chooseImage 我们可以在wxml中定义一个按钮 <view><button bindtap"photograph">拍照</button> </view>这里绑定了一个点击事件 叫 photograph 然后 我们在js中编写代码如下 //import { getAll } from "../../ap…

在B站上如何把已经上传的视频做成合集?

参考视频: 【在B站上如何把已经上传的视频做成合集&#xff1f;】 https://www.bilibili.com/video/BV1Uf4y1G7eR/?share_sourcecopy_web&vd_source8af85e60c2df9af1f0fd23935753a933 【B站投稿视频合集的几种方式最全攻略】 https://www.bilibili.com/video/BV1jZ4y1h7…

LLM-TAP随笔——大语言模型基础【深度学习】【PyTorch】【LLM】

文章目录 2.大语言模型基础2.1、编码器和解码器架构2.2、注意力机制2.2.1、注意力机制&#xff08;Attention&#xff09;2.2.2、自注意力机制&#xff08;Self-attention&#xff09;2.2.3、多头自注意力&#xff08;Multi-headed Self-attention&#xff09; 2.3、transforme…

Unity之Hololens如何实现3D物体交互

一.前言 什么是Hololens? Hololens是由微软开发的一款混合现实头戴式设备,它将虚拟内容与现实世界相结合,为用户提供了沉浸式的AR体验。Hololens通过内置的传感器和摄像头,能够感知用户的环境,并在用户的视野中显示虚拟对象。这使得用户可以与虚拟内容进行互动,将数字信…

【算法】算法设计与分析 课程笔记 第二章 递归与分治策略

2.1 递归 直接或间接地调用自身的算法称为递归算法。 用函数自身给出定义的函数称为递归函数。 2.1.1 阶乘 首先得想到一个求阶乘的函数&#xff1a; 这个函数的下面那个式子就用到了调用自身&#xff0c;所以可以用递归来实现&#xff0c;将主问题拆分成若干层的子问题&am…

分享从零开始学习网络设备配置--任务3.7 使用动态路由RIPv2实现网络连通

任务描述 某公司随着规模的不断扩大&#xff0c;路由器的数量开始有所增加。网络管理员发现原有的静态路由已经不适合现在的公司&#xff0c;实施动态路由RIPv2协议配置&#xff0c;实现网络中所有主机之间互相通信。 在路由器较多的网络环境中&#xff0c;手工配置静态路由…

Level FHE 的高效实现 兼容 Level FHE 的高级算法

参考文献&#xff1a; [CS05] Choi Y, Swartzlander E E. Parallel prefix adder design with matrix representation[C]//17th IEEE Symposium on Computer Arithmetic (ARITH’05). IEEE, 2005: 90-98.[SV11] Smart N P, Vercauteren F. Fully homomorphic SIMD operations[…

基于微信小程序的校园商铺系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言学生端微信端&#xff0c;主要功能有&#xff1a;商家的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 …

商家收款2000手续费多少

目前不管是微信商户或者支付宝商户最低费率可以达到0.2%费率&#xff1b;市面上普通个体商户或者企业商家的收款费率一般在0.6左右&#xff0c;一些使用第三方聚合支付平台的也有使用0.38的&#xff0c;总体也就是10000块钱的费率是38-60块钱&#xff0c;对于一些流水比较大的商…

微调大模型工具-LoRA

介绍 微调 在机器学习领域&#xff0c;大型模型已成为解决各种问题的首选解决方案。从自然语言处理到计算机视觉&#xff0c;这些计算能力的庞然大物都表现出了无与伦比的性能。然而&#xff0c;这种性能实际上是有代价的。微调这些大型模型以适应特定任务或领域是一个资源密…

GE IS220PVIBH1A 336A4940CSP16 电源模块

GE IS220PVIBH1A 336A4940CSP16 电源模块是通用电气&#xff08;GE&#xff09;的一种电源模块&#xff0c;用于工业控制和电力系统中&#xff0c;提供电源供应和保护功能。以下是这种类型电源模块的一般特点和功能&#xff1a; 电源供应&#xff1a;GE IS220PVIBH1A 336A4940C…

编写基于冒泡排序算法的qsort函数

目录 1.简单认识冒泡排序 2.进入正文分析如何实现函数 3.1比较两个相邻元素的大小 3.2比较两个相邻元素大小后要换函数 4.my_qsort函数&#xff1a; 5.总结&#xff1a; 1.简单认识冒泡排序 冒泡排序的步骤如下&#xff1a; 比较相邻的两个元素&#xff0c;如果第一个元素比…

TS编译选项——不允许使用隐式any类型、不明确类型的this、严格检查空值、编译后文件自动设置严格模式

一、不允许使用隐式any类型 在tsconfig.js文件中配置noImplicitAny属性 {"compilerOptions": {// 不允许使用隐式any类型"noImplicitAny": true} } 开启后即可禁止使用隐式的any类型 注意&#xff1a;显式的any类型并不会被禁止 二、不允许使用不明确类…

亚马逊儿童自行车,滑板车等电动移动设备合规标准UL报告如何办理?UL 2272、UL 2849

加拿大 儿童自行车 儿童自行车适用于 14 岁以下儿童。儿童自行车的车轮由两个轮子组成&#xff0c;一个在另一个后面&#xff0c;通过踩踏推动&#xff0c;用连接在前轮上的车把操纵。其中一些可能配备有训练轮&#xff0c;这是一对平行于后轮的额外的车轮&#xff0c;可防止自…

ShapeableImageView 不只是圆形ImageView

偶然间看到了这位老哥的 https://juejin.cn/post/6869376452040196109#comment 文章&#xff0c;发现了ShapeableImageView–一个多形状的ImageView &#xff0c;虽然似乎发布了很久了&#xff0c;现在学习不晚。 效果图 布局文件 <com.google.android.material.imageview.S…

yyyy/MM/dd与yyyy-MM-dd使用new Date().getTime()时间转换不相等?!!

起源 该问题发现于日期组件增加国家法定假节假日的禁用&#xff0c;通过pickerOptions属性定义disabledDate方法实现 export default {data () {return {holidayList: [2023-01-01,2023-01-02,2023-01-21,2023-01-22,2023-01-23,2023-01-24,2023-01-25,2023-01-26,2023-01-27…