【网络代理】(三)Docker+Haproxy 搭建四层代理

news2024/12/28 14:05:09

目录

1.1  创建 web 服务器镜像

1.2  启动 web 服务器容器

2.1  编写 haproxy 配置文件

2.2  拉取 haproxy 镜像

2.3  启动 haproxy 容器

3.1  访问 8000 端口

3.2  查看 web 服务器容器日志

附录:haproxy 仪表板


 

1.1  创建 web 服务器镜像

编写一个 Dockerfile,安装 python3 以及可能需要使用到的工具,作为 web 服务器镜像。Dockerfile 内容如下:

FROM ubuntu:22.04

RUN apt-get update
RUN apt-get install -y iperf3 iproute2 iptables vim python3

创建名为 ready 的镜像:

docker build -f ./Dockerfile -t ready .

1.2  启动 web 服务器容器

使用以下命令启动三个 web 服务器容器,分别为 web01、web02、web03:

docker run -d --name=web01 ready python3 -m http.server 8000
docker run -d --name=web02 ready python3 -m http.server 8000
docker run -d --name=web02 ready python3 -m http.server 8000

使用以下命令查看 web 服务器容器的 ip 地址,为了之后填写配置文件:

docker inspect web01
docker inspect web02
docker inspect web03

如下图所示: 

从而分别得到 ip 地址为:172.17.0.2、172.17.0.3、172.17.0.4 。

2.1  编写 haproxy 配置文件

由于 haproxy 容器里面并没有自动编写配置文件,因此我们需要自己创建一个配置文件,启动容器时再将我们的配置文件挂载到 haproxy 容器上。

首先创建目录和配置文件:

mkdir /home/envoutante/haproxy
vim haproxy.cfg

配置文件内容如下:

#----------------
# Global settings
#----------------
global
log 127.0.0.1 local2
maxconn 4000
daemon
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 500
#-------------
#Stats monitor
#-------------
frontend stats_monitor
bind *:8404
stats enable
stats uri /stats
stats refresh 5s
#--------------------
#Application frontend
#--------------------
frontend myfrontend
bind :8000
default_backend webservers
#--------------------
backend webservers
#负载均衡算法#
balance roundrobin
mode http
server web01 172.17.0.2:8080 check weight 1
server web02 172.17.0.3:8080 check weight 2
server web03 172.17.0.4:8080 check weight 3
#map_end#

说明:

  • 第一个前端 stats_monitor 监听端口 8404,并启用 HAProxy Stats 仪表板。该仪表板显示负载均衡器的实时统计信息。
  • 第二个前端 myfrontend 监听端口 8000,并将请求分派到 web 服务器后端中列出的三个 web 应用程序之一。
  • 后端 webservers 采用负载均衡算法,需要根据刚才创建的三个 web 服务器容器的信息来填写服务器名称和服务器的 ip 地址。

2.2  拉取 haproxy 镜像

使用命令:

docker image pull haproxy

2.3  启动 haproxy 容器

sudo docker run -d --name haproxy \
   -v /home/envoutante/haproxy:/usr/local/etc/haproxy \
   -p 8000:8000 -p 8404:8404 haproxy

说明:使用 -v 参数将包含配置文件的目录挂载到容器的 /usr/local/etc/haproxy 目录下;使用 -p 参数将容器端口 8000 映射到主机上的相同端口,同时也为 HAProxy Stats 页面映射到了端口 8404 。

3.1  访问 8000 端口

在浏览器中输入以下网址:

http://localhost:8000

如下图所示:

3.2  查看 web 服务器容器日志

使用以下命令查看 web 服务器容器日志:

docker logs -f web01
docker logs -f web02
docker logs -f web03

结果如下图所示:

可见 web01 到 web03 所承担的访问量呈递增趋势,符合我们设置的权重 1、2、3,实验结果与预期相符。

附录:haproxy 仪表板


参考博客:如何优雅的在 Docker 中运行高性能负载均衡器 HAProxy - 知乎

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

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

相关文章

Java Object字节流及序列化和反序列化

Java中的对象字节流是通过ObjectInputStream和ObjectOutputStream类来实现的。这两个类提供了将对象转换为字节流和将字节流转换为对象的方法。 要将一个对象转换成字节流,你需要先创建一个ObjectOutputStream对象,然后使用它的writeObject()方法将对象…

AIGC,你看我还有机会吗?| 融云前沿

点击报名 8 月 3 日(周四)融云直播课~ 2022 年底,以 ChatGPT 为代表的“生成式 AI”正式开启了 AI 行业爆点不断的热闹时刻。关注【融云全球互联网通信云】了解更多 傅盛和朱啸虎关于大模型是否还有机会的隔空激辩余热未散,Meta …

VS2017制作安装包关于生成x86或x64报错解决办法

报错如下: ERROR: File System.Data.SQLite.dll targeting AMD64 is not compatible with the projects target platform x86 解决办法: 选中安装包项目按下F4弹出属性弹窗修改目标平台 改为 x64即可

国内攻克OLED屏幕修复术,成本暴降2/3不用拆机换屏

连着许多年各家手机发布会,屏幕基本是会花大精力宣传的三大件之一 也对,无论是外观还是实际的视觉、操作体验,屏幕都是非常重要的一环。 屏幕素质越来越高,用着也的确更爽了,但也越来越不敢摔了。 普普通通的一块 60…

【LeetCode每日一题】——剑指 Offer 30.包含min函数的栈

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 栈 二【题目难度】 简单 三【题目编号】 剑指 Offer 30.包含min函数的栈 四【题目描述】 定…

7.6Jmeter5.1:接口测试实践

需求:需要往平台新增5000条接口数据,这里用到随机数(其实随机数也会重复,如果真实压测可以用文件方式真实导入去测) 1、随机数函数,使用函数助手生成 使用:${__Random(200,5200,)} 2、登录请求 2.1、登录的请求头 C…

深入学习java虚拟机||JVM内存结构五大模型

目录 程序计数器 栈 虚拟机栈 垃圾回收是否涉及栈内存? 栈内存分配越大越好吗? 方法内的局部变量是否线程安全? 栈内存溢出 本地方法栈 堆 方法区 先看内存图总览 程序计数器 定义:全称P r o g r a m C o u n t e r R e …

【算法与数据结构】226、LeetCode翻转二叉树

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:这道题的思路很简单,本质上就是遍历每一个节点,然后交换左右节点。我们可以用前…

吃透《西瓜书》第一章绪论、第二章模型评估

目录 第一章 绪论 1.1 引言 1.2 基本术语 1.3 假设空间 第二章 模型评估 2.1 为什么需要模型评估? 2.2 模型评估的定义 2.2.1 评估方法之留出法: 2.2.2 交叉验证法和自助法 2.3 深入理解模型评估 第一章 绪论 1.1 引言 机器学习是什么? 机器…

Java网络编程(二)流

网络程序所做的很大一部分工作都是简单的输入和输出:将数据字节从一个系统移动到另一个系统。字节就是字节。在很大程度上讲,读取服务器发送给你的数据与读取文件并没什么不同。向客户端发送文本与写文件也没有什么不同。但是,Java中输入和输出(I/O)的组…

【node.js】04-模块化

目录 一、什么是模块化 二、node.js中的模块化 1. node.js中模块的分类 2. 加载模块 3. node.js 中的模块作用域 4. 向外共享模块作用域中的成员 4.1 module对象 4.2 module.exports 对象 4.3 exports对象 5. node.js 中的模块化规范 一、什么是模块化 模块化是指解…

Grafana - TDEngine搭建数据监测报警系统

TDengine 与开源数据可视化系统 Grafana 快速集成搭建数据监测报警系统 一、介绍二、前置条件三、Grafana 安装及配置3.1 下载3.2 安装3.2.1 windows安装 - 图形界面3.2.2 linux安装 - 安装脚本 四、Grafana的TDEngine配置及使用4.1 登录4.2 安装 Grafana Plugin 并配置数据源4…

安卓版本的发展4-13

Android 4.4 KitKat 1、通过主机卡模拟实现新的 NFC 功能。 2、低功耗传感器,传感器批处理,步测器和计步器。 3、全屏沉浸模式,隐藏所有系统 UI,例如状态栏和导航栏。它适用于鲜艳的视觉内容,例如照片、视频、地图、…

结构型设计模式之装饰器模式【设计模式系列】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦!!! 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everythi…

上海科技大学智能生活组齐聚合合信息,“沉浸式”体验人工智能产品

近期,上海科技大学组织本科生产业实践-校企联合人才培养活动,30余名学生组成的“智能生活组”实地参访人工智能及大数据科技企业上海合合信息科技股份有限公司(简称“合合信息”)。本次活动旨在通过项目体验、主题交流&#xff0c…

2023-7-24-第二十二式备忘录模式

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

VS Code 设置大小写转换快捷键

VS Code 设置大小写转换快捷键 前言:VS Code 没有默认的大小写转换快捷键,需要我们自己添加。 一 、打开快捷键设置面板 二、添加快捷键 在搜索框输入 “转换为大写”,如果您的VS Code没有汉化,此处输入“Transform to Uppercase…

vmware平台上虚拟机无法查看到WWID

需要在虚拟机中部署rac测试环境,创建虚拟机后无法查看到wwid [rootdb1 ~]# for i in cat /proc/partitions |awk {print $4} |grep sd; do echo "Device: $i WWID: /usr/lib/udev/scsi_id --page0x83 --whitelisted --device/dev/$i "; done |sort -k4 De…

Bootstrap每天必学之面板

Bootstrap每天必学之面板 1、面板 面板(Panels)是Bootstrap框http://架新增的一个组件,其主要作用就是用来处理一些其他组件无法完成的功能。同样在不同的版本中具有不同的源码: ☑ Less版本:对应的源码文件是 panel…