本文主要讲解通过docker-compose创建haproxy并进行代理

一、haproxy简介
  1. HAProxy是一款基于事件驱动、单进程模型设计的四层与七层负载均衡器,它能够在TCP/UDP层面以及HTTP(S)等应用层协议上实现高效的流量分发。HAProxy不仅适用于Web服务器负载均衡,还能应用于数据库、邮件服务器、缓存服务器等多种场景,支持高达数百万级别的并发连接,并具有极低的延迟
  2. 主要特性
    1. 高性能负载均衡
    2. 健康检查与故障恢复
    3. 会话保持与亲和性
    4. 安全性与SSL卸载
    5. 高级路由与策略
    6. 日志记录与监控
  3. 优点
    1. 高性能:HAProxy是一个高性能的负载均衡器,可以处理大量的并发连接
    2. 灵活性:HAProxy支持多种负载均衡算法,如轮询、加权轮询、最少连接等,可以根据实际需求选择合适的算法
    3. 高可用性:HAProxy可以检测服务器的健康状态,如果某个服务器出现故障,它可以自动将流量转移到其他健康
    4. 安全性:HAProxy可以作为反向代理,隐藏后端服务器的真实IP地址,提高系统的安全性。
  4. 缺点
    1. 单点故障:如果HAProxy本身出现故障,可能会导致整个系统的服务不可用
    2. 配置复杂:HAProxy的配置相对复杂,需要一定的学习成本
    3. 性能瓶颈:虽然HAProxy的性能很高,但在处理大量并发连接时,可能会成为系统的性能瓶颈
    4. 功能单一:只支持做负载均衡的调度服务器,不支持正则处理,不能实现动静分离,也不能做web服务器
二、docker-compose安装

下载docker-compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

赋予执行权限

sudo chmod +x /usr/local/bin/docker-compose

验证安装

docker-compose --version
三、编写yml文件
version: '3'
services:
haproxy:
image: haproxy # 可以使用为本地镜像的名称或路径,
container_name: my-haproxy
volumes:
- /project/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
ports:
- "6380:6380" # 需要从容器内映射到宿主机的对象,这个地址是经过haproxy已经转发过的地址,不是初始地址, 这里的端口
restart: always
四、编写配置文件
global
maxconn 65535 # 最大并发连接数
stats socket /var/run/haproxy.stat mode 600 level admin # HAProxy 统计信息的套接字
log 127.0.0.1 local0 # 日志服务器
uid 200 # HAProxy 进程的用户 ID
gid 200 # HAProxy 进程的组 ID
# chroot /var/empty # 取消注释以启用 chroot 以增加安全性
daemon # 以守护进程方式运行 HAProxy defaults
mode http # 默认模式设置为 HTTP
log global # 使用全局日志配置
option httplog # 启用详细的 HTTP 日志记录
option dontlognull # 不记录没有数据的连接
monitor-uri /monitoruri # HAProxy 监控的 URI
maxconn 8000 # 每个后端的最大并发连接数
timeout client 30s # 客户端超时时间
retries 2 # 连接失败时的重试次数
option redispatch # 启用会话重新分配
timeout connect 5s # 建立到后端的连接的超时时间
timeout server 5s # 服务器响应超时时间
stats uri /status # 访问 HAProxy 统计信息的 URI frontend custom_frontend
mode tcp
# 转发请求的地址以及请求从 HAProxy 出去的端口
bind *:6380 # 绑定前端到所有接口的 6380 端口 这里的端口
default_backend custom_servers # 此前端使用的默认后端 backend custom_servers
mode tcp
# 服务器的内部地址(将 10.10.11.11:30028 替换为所需的地址)
server custom1 10.10.11.11:30028 maxconn 1000 最大连接数为 1000
五、 最后

最后我们则直接通过docker-compose启动命令执行docker-compose.yml文件则可以运行容器,在配置的过程中我们需要注意的是在haproxy绑定的端口是我们在docker-compose中暴露的端口,大家不要配置错误

haproxy官方地址:https://www.haproxy.com/

如有哪里讲得不是很明白或是有错误,欢迎指正

如您喜欢的话不妨点个赞收藏一下吧

docker-compose创建haproxy教程的更多相关文章

  1. Docker Compose 创建yml 简单试例

    Docker Compose 创建yml 简单试例 Docker Compose 文件使用格式版本需要与Docker版本对应可在官网内查找 查找地址:https://docs.docker.com/c ...

  2. Docker | Compose创建mysql容器

    本文通过Docker Compose来创建mysql容器 在linux服务器上创建文件,用于管理容器 mkdir docker-mysql cd docker-mysql vim docker-com ...

  3. docker和docker compose常用操作命令

    首先区分一下docker中几个概念 Image:镜像,相当于一个root文件系统,不包含任何动态数据 Container:容器,镜像运行时的实体,实质是进程,容器进程运行于属于自己的独立的命名空间 d ...

  4. Docker编排工具Docker Compose的使用

    一.安装docker compose 官网推荐方式之一: sudo curl -L "https://github.com/docker/compose/releases/download/ ...

  5. Linux系统上安装docker + Compose并创建WordPress

    安装docker可参考我的另一篇文章 安装Compose Docker Compose 是 Docker 官方编排(Orchestration)项目之一, 负责快速在集群中部署分布式应用. 方法一 1 ...

  6. Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  7. Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  8. Spring Boot 2.0(五):Docker Compose + Spring Boot + Nginx + Mysql 实践

    我知道大家这段时间看了我写关于 docker 相关的几篇文章,不疼不痒的,仍然没有感受 docker 的便利,是的,我也是这样认为的,I know your felling . 前期了解概念什么的确实 ...

  9. Docker学习笔记 - Docker Compose 脚本命令

    Docker Compose 配置文件包含 version.services.networks 三大部分,最关键的是 services 和 networks 两个部分, version: '2' se ...

  10. Docker学习笔记 - Docker Compose

    一.概念 Docker Compose 用于定义运行使用多个容器的应用,可以一条命令启动应用(多个容器). 使用Docker Compose 的步骤: 定义容器 Dockerfile 定义应用的各个服 ...

随机推荐

  1. Selenium4自动化测试8--控件获取数据--上传、下载、https和切换分页

    10-上传 上传不能模拟用户在页面上选择本地文件,只能先把要上传的文件先准备好在代码里上传 import time from selenium.webdriver.support.select imp ...

  2. python小功能

    django实现将linux目录和文件名列出来 def index(request): obj=models.USER.objects.all() fileroot = 'd:\machangwei' ...

  3. 超全、超简单Vue微信公众号授权登录指南

    <template> <div id="app"> <h1>微信授权登陆</h1> <div> <div> ...

  4. Android 13 - Media框架(27)- ACodec(五)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 前面几节我们了解了OMXNodeInstance是如何处理setPortMode.allocateBuffer.useBuffer的,这一节我们再回 ...

  5. weinre  远程实时调试手机上的Web页面 JAVASCRIPT远程调试

    版权归作者所有,任何形式转载请联系作者.作者:U_U(来自豆瓣)来源:https://www.douban.com/note/289846168/ 调试前端页面我一直使用着神器Chrome开发人员工具 ...

  6. 莫烦tensorflow学习记录 (6)卷积神经网络 CNN (Convolutional Neural Network)

    卷积 和 神经网络 莫烦大佬的原文章https://mofanpy.com/tutorials/machine-learning/tensorflow/intro-CNN/ 我的理解就是千层饼,鸡蛋烧 ...

  7. zabbix笔记_006 zabbix web监控

    web监控 web监控是对http网站服务进行监控,模拟用户访问网站,对特定的结果进行告警,通知管理员网站状态. web监控是运维必备知识点,通过实验能够熟悉配置和了解zabbix是如何监控web站点 ...

  8. css圆圈慢慢放大

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  9. 如果设备不支持vulkan,就用swiftshader,否则就加载系统的vulkan的正确姿势(让程序能够智能的在vulkan-1.dll和libvk_swiftshader.dll之间切换)

    一些老的显卡设备没有更新驱动,甚至根本就不支持Vulkan的显卡,遇到静态链接的vulkan-1.lib文件,启动exe就会崩溃. 你以为从别的机器拷贝这个vulkan-1.dll就可以了吗? 太傻太 ...

  10. 错误 CS1617 Invalid option '7.3' for /langversion; must be ISO-1, ISO-2, Default or an integer in range 1 to 6.

    严重性 代码 说明 项目 文件 行 禁止显示状态错误 CS1617 Invalid option '7.3' for /langversion; must be ISO-1, ISO-2, Defau ...