Docker 部署HAProxy v2.2.29 并暴露指标接口的问题解决

目录
  • 1.背景
  • 2.目的
  • 3.HAProxy 简介
  • 4.HAProxy 优点
  • 5. HAProxy配置说明
  • 6. 部署脚本
  • 参考资料

1.背景

在haproxy 2.0 版本之前,prometheus 提供了haproxy_exporter 来对HAProxy进行监控,haproxy 从 2.0 版本开始不再需要使用 haproxy_exporter 进行监控,因为 haproxy 提供了原生的 Prometheus 导出功能。也就是说,从 haproxy 2.0 版本开始,可以直接使用 Prometheus 监控 haproxy,而无需使用额外的 exporter 了。

2.目的

通过Docker 部署HAProxy v2.2.29 并开放指标接口,下面有一键部署脚本,供参考

3.HAProxy 简介

haproxy提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

haproxy特别适用于那些负载特别大的web站点,这些站点通常又需要会话保持或七层处理。haproxy运行在时下的硬件上,完全可以支持数以万计的并发连接,并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

haproxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。

事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作

4.HAProxy 优点

1.免费开源,稳定性也是非常好。单haproxy也跑得不错,稳定性可以与硬件级的F5相媲美。
2.根据官方文档,haproxy可以跑满10Gbps,这个数值作为软件级负载均衡器是相当惊人的。
3.haproxy支持连接拒绝:因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。
4.haproxy支持全透明代理(已具备硬件防火墙的典型特点):可以用客户端IP地址或者任何其他地址来连接后端服务器。这个特性仅在Linux 2.4/2.6内核打了tcp proxy补丁后才可以使用。这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。
5.haproxy现多用于线上的Mysql集群环境,我们常用于它作为MySQL(读)负载均衡。
6.自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警。
7.HAProxy支持虚拟主机。

5. HAProxy配置说明

1.global: (全局配置主要用于设定义全局参数,属于进程级的配置,通常和操作系统配置有关)
2.default : (配置默认参数,这些参数可以被用到frontend,backend,Listen组件) 在此部分中设置的参数值,默认会自动引用到下面的frontend、backend、listen部分中,因引,某些参数属于公用的配置,只需要在defaults部分添加一次即可。而如果frontend、backend、listen部分也配置了与defaults部分一样的参数,Defaults部分参数对应的值自动被覆盖。
3.frontend:( 接收请求的前端虚拟节点,Frontend可以更加规则直接指定具体使用后端的backend) frontend是在haproxy 1.3版本以后才引入的一个组件,同时引入的还有backend组件。通过引入这些组件,在很大程度上简化了haproxy配置文件的复杂性。forntend可以根据ACL规则直接指定要使用的后端backend
4.backend : (后端服务集群的配置,真实服务器,一个Backend对应一个或者多个实体服务器) 在HAProxy1.3版本之前,HAProxy的所有配置选项都在这个部分中设置。为了保持兼容性,haproxy新的版本依然保留了listen组件配置项。两种配置方式任选一中
5.Listen : (Fronted和backend的组合体) 比如haproxy实例状态监控部分配置

6. 部署脚本

#!/bin/bash

CONFIG_PATH=/home/zoms/haproxy/
sudo mkdir $CONFIG_PATH
sudo cat > $CONFIG_PATH/haproxy.cfg << EOF
global
    log 127.0.0.1 local0 info  # 日志存储到127.0.0.1,以local0输入info级别
    maxconn 4096 # 最大连接数,要考虑到ulimit -n的大小限制
    daemon
    nbproc 2 # 进程数

defaults
    log global
    mode tcp # 使用tcp4层代理模式
    option tcplog
    option dontlognull
    retries 3
    # 在使用基于cookie定向时,一旦后端某一server宕机时,会将会话重新定向至某一上游服务器,必须使用的选项
    option redispatch
    maxconn 4096
    timeout connect 5s
    timeout client 60s #客户端空闲超时时间
    timeout server 15s #服务端超时时间

listen stats
    # 绑定Prometheus Exporter模块
    bind 0.0.0.0:9090
    mode http
    option http-keep-alive
    option forwardfor
    http-request use-service prometheus-exporter if { path /metrics }
EOF

sudo docker stop haproxy;sudo docker rm haproxy;sudo docker run -d  -p 9090:9090  -e HAPROXY_PROMETHEUS_EXPORTER=true --name haproxy -v $CONFIG_PATH/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:2.2.29 ;sleep 3;sudo docker ps -a|grep haproxy

curl localhost:9090/metrics

拓展了解可访问参考HAProxy原理和概念以及HAProxy部署

参考资料

haproxy_exporter 监控HAProxy
HAProxy v2.x 官方配置文档
HAProxy官网
HAProxy部署
HAProxy原理和基本概念

到此这篇关于Docker 部署HAProxy v2.2.29 并暴露指标接口的文章就介绍到这了,更多相关Docker 部署HAProxy内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • docker部署xxl-job-admin出现数据库拒绝问题及解决方法

    目录 docker部署xxl-job-admin出现数据库拒绝 问题出现: 1.拉取代码: 2.docker部署mysql 3.部署代码: 4.问题出现logs(摘取部分错误): 5.问题的解决思路: 6.总结: 扩展:docker 安装 xxl-job 1.安装mysql 2.安装xxl-job-admin 3.浏览器登录 docker部署xxl-job-admin出现数据库拒绝 笔者能力有限,小白一枚,在遇到问题之后记录问题的解决方式为主要目的,欢迎各位探讨交流. 问题出现: 1.拉取代码:

  • Keepalived+HAProxy实现MySQL高可用负载均衡的配置

     Keepalived 由于在生产环境使用了mysqlcluster,需要实现高可用负载均衡,这里提供了keepalived+haproxy来实现. keepalived主要功能是实现真实机器的故障隔离及负载均衡器间的失败切换.可在第3,4,5层交换.它通过VRRPv2(Virtual Router Redundancy Protocol) stack实现的. Layer3:Keepalived会定期向服务器群中的服务器.发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的

  • linux服务器之LVS、Nginx和HAProxy负载均衡器对比总结

    LVS特点: 1.抗负载能力强,使用IP负载均衡技术,只做分发,所以LVS本身并没有多少流量产生: 2.稳定性.可靠性好,自身有完美的热备方案:(如:LVS+Keepalived) 3.应用范围比较广,可以对所有应用做负载均衡: 4.不支持正则处理,不能做动静分离. 常用四种算法: 1.rr:轮叫,轮流分配到后端服务器: 2.wrr:权重轮叫,根据后端服务器负载情况来分配: 3.lc:最小连接,分配已建立连接最少的服务器上: 4.wlc:权重最小连接,根据后端服务器处理能力来分配. 可以采用ip

  • Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)

    1.组件及实现的功能 Keepalived:实现对Haproxy服务的高可用,并采用双主模型配置; Haproxy:实现对Nginx的负载均衡和读写分离; Nginx:实现对HTTP请求的高速处理; 2.架构设计图 3.Keepalived部署 在两个节点上都需要执行安装keepalived,命令如下: $ yum -y install keepalived 修改 172.16.25.109 节点上 keepalived.conf 文件配置,命令如下 $ vim /etc/keepalived/

  • haproxy+keepalived实现高可用负载均衡(实例配置)

    作者:split_two 环境四台机器都是RedHat4.8(64位)版本: IP地址             用处192.168.5.55       MASTER192.168.2.73       BACKUP192.168.5.54       负载A192.168.5.57       负载B192.168.2.100      VIP 1.MASTER上安装haproxy 复制代码 代码如下: wget http://haproxy.1wt.eu/download/1.3/src/h

  • docker部署zookeeper集群方式(单主机、多主机)

    目录 1.一台主机上部署zookeeper集群 2.一台主机部署zookeeper集群分析 3.Macvlan网络 4.跨主机环境准备 5.创建macvlan网络 6.docker-compose.yml文件 总结 1.一台主机上部署zookeeper集群 下面这个是官方给出的docker-compose的部署方案(这个是都在一台主机上部署的): version: '3' services: zoo1: image: zookeeper restart: always ports: - 2182

  • CentOS7—HAProxy安装与配置详解

    概述 Haproxy下载地址:http://pkgs.fedoraproject.org/repo/pkgs/haproxy/ 关闭SElinux.配置防火墙 1.vi /etc/selinux/config #SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉 SELINUX=disabled #增加 :wq! #保存退出 setenforce 0 #使配置立即生效 2.vi /etc/sysconfig/iptables  #编辑 -A RH-

  • 使用Docker-compose部署mysql的简单步骤

    目录 前言 一.Docker-compose简介 二.部署步骤 总结 前言 虽然docker部署环境比自己下载安装包要方便不少,但是docker的命令还有挂载目录在每次启动容器的时候都去找命令对使用者是很不友好的,而且有时候要启动多个容器的时候显然一个个的启动是很麻烦的.所以如果可以事先将"启动脚本"写好的话,之后就算虚拟机重启了,再启动容器也就是执行"启动脚本"就好了,docker-compose很好的解决了这个问题. 一.Docker-compose简介 个人理

  • Docker学习笔记之Docker部署Java web系统

    Docker部署Java Web系统 1.在root目录下创建一个路径test/app mkdir test && cd test&& mkdir app &&cd app 2.将apache-tomcat-7.0.29.tar.gz及jdk-7u25-linux-x64.tar.gz拷贝 到app目录下 3.解压两个tar.gz文件 tar -zxvf apache-tomcat-7.0.29.tar.gz tar -zxvf jdk-7u25-linux

  • Docker部署Mysql集群的实现

    单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信红包巨大业务量,数据库承受巨大负载 常见MySQL集群方案 mysql 集群方案介绍,建议使用pxc,因为弱一致性会有问题,比如说a节点数据库显示我购买成功,b 节点数据库显示没有成功,这就麻烦了,pxc 方案是在全部节点都写入成功之后才会告诉你成功,是可读可写双向同步的,但是replication

  • docker部署rabbitmq集群的实现方法

    拉取rabbitmq management镜像 docker pull rabbitmq:3.7-rc-management 若不使用Rabbitmq的management功能,可以拉取镜像:rabbitmq:3.7-rc 参考: https://hub.docker.com/_/rabbitmq/ 创建网络 创建rabbitmq私有网络 # docker network create rabbitmqnet # docker network ls NETWORK ID NAME DRIVER

  • Docker部署Kafka以及Spring Kafka实现

    这篇文章主要介绍了Docker部署Kafka以及Spring Kafka实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从https://hub.docker.com/查找kafka 第三个活跃并stars数量多 进去看看使用 我们使用docker-compose来构建镜像 查看使用文档中的docker-compose.yml 因为kafka要搭配zookeeper一起使用,所以文档中包含了zookeeper 我修改了一下版本号 以及变量参

  • Docker部署Django应用的示例

    之前部署Web应用,没用docker,直接在服务器上部署,使用了fabric+nginx+supervisor+gunicorn部署,可查看我写过的一片博客:部署Web应用.但后来了解了docker,为其"Build,Ship and Run Any App,Anywhere"的思想所折服,觉得这个太牛逼了,所以我也尝试一下自己用docker部署Web应用.本篇文章为了记录我用docker部署web应用的过程和心得. 一.网络架构 我用Visio大概画了一下我的网络架构图: 我构建的容

  • Docker部署Spring-boot项目的示例代码

    一.基础Spring-boot快速启动 1.1 快速启动 pom.xml加入如下依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> </parent> <properties&g

  • 教你使用如何docker部署淘宝rap2服务

    什么是rap2 先来说说起因,在上一个星期的分享会上,谈到前后端联调上,有同事提到了rap2,特意去了解了一下,觉得使用这个东西来进行前后端的接口联调来真是太方便了,对比我们之前公司内部开发的API Cloud来说,我更偏向使用rap2. RAP通过GUI工具帮助WEB工程师更高效的管理接口文档,同时通过分析接口结构自动生成Mock数据.校验真实接口的正确性,使接口文档成为开发流程中的强依赖.有了结构化的API数据,RAP可以做的更多,而我们可以避免更多重复劳动. 上面是摘自https://gi

  • Docker部署Django+Mysql+Redis+Gunicorn+Nginx的实现

    一. 前言 docker技术现在非常火热,通过容器构建项目环境,运行效率和部署效率都很不错.所以最近抽空看了一些教程,然后将博客部署方式改为了docker,感觉网上没有特别好的关于 docker 部署 django 项目的教程,特意写了这篇文章,算是记录自己的心得. 本次教程的测试环境为 Deepin ,主要侧重于 容器的编排 和 Django 相关部署知识,一些细节方面,例如环境依赖安装,不会讲得特别详细.由于是在本地测试,所以在配置 nginx 相关信息时,将配置 http 代理而非 htt

  • CentOS8上用Docker部署开源项目Tcloud的教程

    一.安装Docker 1.我是虚拟机装的Centos7,linux 3.10 内核,docker官方说至少3.8以上,建议3.10以上(ubuntu下要linux内核3.8以上) root账户登录,查看内核版本如下 uname -a 2.把yum包更新到最新 yum update (期间要选择确认,输入 y 即可) 3.安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 yum install -y yum-utils

  • Docker 部署Go的两种基础镜像的实现

    一. golang:latest 基础镜像 mkdir gotest touch main.go touch Dockerfile 1. 实例代码 package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { f

随机推荐