1. 下载haproxy与安装
例如,我这里下载的是haproxy-1.3.15.10.tar.gz
解压后编译安装
tar xvf haproxy-1.3.15.10.tar.gz
cd haproxy-1.3.15.10
make TARGET=linux32 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
2. 编辑haproxy的配置文件,例如/usr/local/haproxy/etc/haproxy.cfg
###########全局配置######### global log 127.0.0.1 local0 debug daemon nbproc 1 pidfile /var/run/haproxy.pid ########默认配置############ defaults mode tcp #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置 option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器 option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接 maxconn 4096 #默认的最大连接数 timeout connect 5000ms #连接超时 timeout client 30000ms #客户端超时 timeout server 10000ms #服务器超时 timeout check 2000ms #=心跳检测超时 log global ########test1配置################# listen test1 log global balance roundrobin bind 0.0.0.0:90 mode tcp option tcplog maxconn 4086 server s1 192.168.1.101:8081
3. haproxy的日志打印配置
(1)需要安装rsyslog
jme@jme:~$ sudo apt-get install rsyslog
(2)/etc/default/rsyslog里的配置调整为:
RSYSLOGD_OPTIONS="-c5 -r -x"
(3)/etc/rsyslog.conf中如小的配置项去掉注释生效
$ModLoad imudp
$UDPServerRun 514
/etc/rsyslog.conf的最后添加haproxy的日志配置(其中local0与haproxy的日志输出对应):
local0.* /var/log/haproxy.log
4. 启动haproxy
sudo /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg
5. haproxy配置的超时配置的影响:
创建一个server:
import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws Exception { ServerSocket server = new ServerSocket(8081); while (true) { Socket socket = server.accept(); InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); int read = 0; while ((read = in.read()) != -1) { System.out.println("server: " + read); out.write(read); out.flush(); } } } }
创建一个client:
import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class Client { public static void main(String[] args) throws Exception { Socket socket = new Socket("127.0.0.1", 90); InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); while (true) { out.write('a'); out.flush(); int read = in.read(); System.out.println("client: " + read); Thread.sleep(15000); } } }
情况1:haproxy在服务器超时后的表现,client端在haproxy的server端超时后继续发送数据:
server端的日志打印:
server: 97
server: 97
server: 97
server: 97
client的日志打印:
client: 97
client: -1
client: -1
client: -1
看haproxy的日志:
Jun 29 11:28:29 127.0.0.1 haproxy[18636]: 127.0.0.1:37775 [29/Jun/2014:11:26:50.563] test1 test1/s1 0/0/98858 1 sD 0/0/0/0/0 0/0
sD的含义:
The server did not send nor acknowledge any data for as long as the
"timeout server" setting during the data phase. This is often caused
by too short timeouts on L4 equipements before the server (firewalls,
load-balancers, ...), as well as keep-alive sessions maintained
between the client and the server expiring first on haproxy.
可以看到haproxy检测到server端超时后,client->haproxy->server的链接并没有全部断掉(可以理解为半关闭),只是server过期了,client端能发送数据到server,但是不能从server端接收数据。
情况2:haproxy在客户端超时后的表现,为方便测试,可以先调整haproxy的超时配置:
timeout client 10000ms #客户端超时
timeout server 0ms #服务器超时
server端日志:
server: 97
client端日志:
client: 97
之后就停住了,主要是haproxy已经关闭client这端,因此client数据发不出去了
对应的抓包数据:
sudo tcpdump -ntX 'port 90 or port 8081' -i lo
从client->haproxy的第一个‘a’字符
IP 127.0.0.1.38733 > 127.0.0.1.90: Flags [P.], seq 1:2, ack 1, win 342, options [nop,nop,TS val 3608278 ecr 3608278], length 1
0x0000: 4500 0035 32ab 4000 4006 0a16 7f00 0001 E..52.@.@.......
0x0010: 7f00 0001 974d 005a d797 3c80 b25a 50cc .....M.Z..<..ZP.
0x0020: 8018 0156 fe29 0000 0101 080a 0037 0ed6 ...V.).......7..
0x0030: 0037 0ed6 61 .7..a
从haproxy->server的第一个‘a’字符
IP 192.168.1.101.52738 > 192.168.1.101.8081: Flags [P.], seq 1:2, ack 1, win 342, options [nop,nop,TS val 3608278 ecr 3608278], length 1
0x0000: 4500 0035 85b0 4000 4006 30f8 c0a8 0165 E..5..@.@.0....e
0x0010: c0a8 0165 ce02 1f91 4bb4 8b79 ca7c 27a5 ...e....K..y.|'.
0x0020: 8018 0156 8442 0000 0101 080a 0037 0ed6 ...V.B.......7..
0x0030: 0037 0ed6 61 .7..a
server->haproxy的回写的‘a’字符:
IP 192.168.1.101.8081 > 192.168.1.101.52738: Flags [P.], seq 1:2, ack 2, win 342, options [nop,nop,TS val 3608278 ecr 3608278], length 1
0x0000: 4500 0035 2974 4000 4006 8d34 c0a8 0165 E..5)t@.@..4...e
0x0010: c0a8 0165 1f91 ce02 ca7c 27a5 4bb4 8b7a ...e.....|'.K..z
0x0020: 8018 0156 8442 0000 0101 080a 0037 0ed6 ...V.B.......7..
0x0030: 0037 0ed6 61 .7..a
haproxy->client的回写的‘a’字符:
IP 127.0.0.1.90 > 127.0.0.1.38733: Flags [P.], seq 1:2, ack 2, win 342, options [nop,nop,TS val 3608278 ecr 3608278], length 1
0x0000: 4500 0035 5e1b 4000 4006 dea5 7f00 0001 E..5^.@.@.......
0x0010: 7f00 0001 005a 974d b25a 50cc d797 3c81 .....Z.M.ZP...<.
0x0020: 8018 0156 fe29 0000 0101 080a 0037 0ed6 ...V.).......7..
0x0030: 0037 0ed6 61 .7..a
之后hapropxy检测到client超时,关闭后,client继续发送数据:
client->haproxy是成功的:
IP 127.0.0.1.38733 > 127.0.0.1.90: Flags [P.], seq 2:3, ack 2, win 342, options [nop,nop,TS val 3612028 ecr 3608278], length 1
0x0000: 4500 0035 32ad 4000 4006 0a14 7f00 0001 E..52.@.@.......
0x0010: 7f00 0001 974d 005a d797 3c81 b25a 50cd .....M.Z..<..ZP.
0x0020: 8018 0156 fe29 0000 0101 080a 0037 1d7c ...V.).......7.|
0x0030: 0037 0ed6 61 .7..a
但是由于haproxy不再向server发送数据。因此这种情况就丢包了。
haproxy的日志:
Jun 29 11:51:14 127.0.0.1 haproxy[20154]: 192.168.1.101:53597 [29/Jun/2014:11:49:03.266] test1 test1/s1 0/0/131359 1 cD 0/0/0/0/0 0/0
cD的含义:
The client did not send nor acknowledge any data for as long as the
"timeout client" delay. This is often caused by network failures on
the client side, or the client simply leaving the net uncleanly.
小结: 可见,用haproxy做tcp代理,client和server端的超时设置一定要正确,否则就可能出现读取数据错误,或者丢包的情况。
相关推荐
为了解决这个问题,项目提出采用QUIC协议,这是一种旨在提高网络传输效率和可靠性的协议,尤其适用于存在高延迟和网络丢包的环境。 **HTTP协议演进** HTTP协议从早期的0.9版本发展到现在的HTTP/3,经历了多次重大...
HTTP/2引入了二进制分帧和多路复用,而HTTP/3则进一步采用了QUIC协议,利用UDP来解决TCP的丢包问题,并提供了更快速的连接建立和更高效的拥塞控制。 在概要设计与开发环节,提出了两种实现方案:一是通过升级...
- 对于网络波动导致的问题,可以通过改善网络环境,如升级网络设备硬件,提高带宽等方式减少网络延迟和丢包率。 2. **调整操作系统参数**: - 根据提供的部分内容来看,可以通过调整注册表中的`MaxUserPort`和`...
基于万能逼近原理的自适应模糊控制算法在多自由度AUV运动控制中的应用与抗干扰补偿Simulink仿真研究,自适应模糊控制算法的万能逼近原理与多自由度AUV运动控制的抗干扰补偿技术——基于Simulink的仿真研究,万能逼近原理自适应模糊控制算法的多自由度AUV运动控制抗干扰补偿simulink仿真 ,核心关键词:万能逼近原理; 自适应模糊控制算法; 多自由度AUV运动控制; 抗干扰补偿; Simulink仿真。,基于万能逼近的模糊控制算法多自由度AUV抗干扰补偿Simulink仿真
deepseek最新资讯、配置方法、使用技巧,持续更新中
deepseek最新资讯、配置方法、使用技巧,持续更新中
结合扩展卡尔曼滤波与滑模观测器的策略:优化电角度估计,反电势波形逼近完美正弦波,结合扩展卡尔曼滤波与滑模观测器的反电势波形优化:正弦波形展现近乎完美精度,电角度估算与实际应用差异微小,扩展卡尔曼滤波与滑模观测器的结合,反电势波形近乎完美的正弦波形,观测器估算转子电角度与实际电角度相差0.3弧度左右,转速跟随效果较好。 ,核心关键词:扩展卡尔曼滤波; 滑模观测器; 反电势波形; 转子电角度估算; 转速跟随效果。,卡尔曼滑模观测器:优化正弦波转子角度与转速估算
毕业设计_基于springboot+vue的**学生公寓管理系统**【源码+sql+可运行】【**50217**】.zip 全部代码均可运行,亲测可用,尽我所能,为你服务; 1.代码压缩包内容 代码:springboo后端代码+vue前端页面代码; 脚本:数据库SQL脚本 效果图:运行结果请看资源详情效果图 2.环境准备: - JDK1.8+ - maven3.6+ - nodejs14+ - mysql5.6+ - redis 3.技术栈 - 后台:springboot+mybatisPlus+Shiro - 前台:vue+iview+Vuex+Axios - 开发工具: idea、navicate 4.功能列表 - 系统设置:用户管理、角色管理、资源管理、系统日志 - **业务管理:业务管理:公寓信息、房间信息、入住记录、学生信息** 3.运行步骤: 步骤一:修改数据库连接信息(ip、port修改) 步骤二:找到启动类xxxApplication启动 4.若不会,可私信博主!!!
1、文件内容:xorg-x11-server-source-1.20.4-29.el7_9.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/xorg-x11-server-source-1.20.4-29.el7_9.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
1、文件内容:yum-plugin-ps-1.1.31-54.el7_8.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/yum-plugin-ps-1.1.31-54.el7_8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
基于模型预测控制(MPC)的无人船与无人车编队一致性协同控制研究(附原文献),基于模型预测控制(MPC)的无人船与无人车编队一致性协同控制研究(附原文献),无人船编队 无人车编队 MPC 模型预测控制 多智能体协同控制 一致性 MATLAB 无人车 USV 带原文献 ,无人船编队; 无人车编队; MPC 模型预测控制; 多智能体协同控制; 一致性; MATLAB; USV; 原文献,无人系统协同控制:MPC模型预测控制下的多智能体编队与一致性研究(原文献支撑)
4套中级通信工程师综合真题及答案(2019,2020,2021,2023),适用于需要考中级通信工程师的人群
deepseek最新资讯,配置方法,使用技巧,持续更新中
基于matlab的锁相环PLL相位噪声拟合仿真代码集合:多个版本建模与仿真,高质量的锁相环PLL仿真代码集合:Matlab与Simulink建模研究,[1]锁相环 PLL 几个版本的matlab相位噪声拟合仿真代码,质量杠杠的,都是好东西 [2]锁相环matlab建模稳定性仿真,好几个版本 [3]锁相环2.4G小数分频 simulink建模仿真 ,PLL; Matlab相位噪声拟合仿真; Matlab建模稳定性仿真; 锁相环2.4G小数分频Simulink建模仿真,MATLAB仿真系列:锁相环PLL及分频器建模仿真
exceptionLogs.zip
基于光伏微网的经济性与并网负荷波动率双目标优化调度策略:蓄电池与V2G协同管理策略仿真研究,MATLAB下光储充微网结合电动汽车V2G的多目标协同调度策略研究:经济性与并网负荷波动性的对比分析,MATLAB代码:考虑V2G的光储充一体化微网多目标优化调度策略 关键词:光储充微网 电电汽车V2G 多目标优化 蓄电池优化 调度 参考文档:《光伏微网下考虑V2G补偿蓄电池容量的双目标优化调度策略》,已经投稿EI会议,中文说明文档可联系我咨询 仿真平台:MATLAB 平台 优势:代码注释详实,适合参考学习,相关成果已经采用,程序非常精品,请仔细辨识 主要内容:过建立光伏微网中以经济性和并网负荷波动率为双目标的蓄电池和V2G的协同调度模型。 采用粒子群算法,对电网、微网调度中心和电动汽车用户三方在无、无序、转移和调度V2G电动汽车负荷四种运行模式下的经济和安全影响进行对比。 最后,根据算例分析,求解四种模式下两级负荷曲线及经济收益表。 对比分析得出,引入V2G可以替代部分容量的蓄电池,使光伏微网在负荷峰谷平抑、三方经济和安全等方面进一步优化。 求解采用的是PSO算法(粒子群算法),求解效果极
javascript 动态网页设计期末大作业(自己手写的,高分期末作业),含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就可以使用。该项目可以直接作为毕设、期末大作业使用,代码都在里面,系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值,项目都经过严格调试,确保可以运行! javascript 动态网页设计期末大作业(自己手写的,高分期末作业)javascript 动态网页设计期末大作业(自己手写的,高分期末作业)javascript 动态网页设计期末大作业(自己手写的,高分期末作业)javascript 动态网页设计期末大作业(自己手写的,高分期末作业)javascript 动态网页设计期末大作业(自己手写的,高分期末作业)javascript 动态网页设计期末大作业(自己手写的,高分期末作业)javascript 动态网页设计期末大作业(自己手写的,高分期末作业)javascript 动态网页设计期末大作业(自己手写的,高分期末作业)javascript 动态网页设计期
混合智能体系统编队控制:分布式优化与15异构混合阶的挑战,异构混合阶智能体系统编队控制的分布式优化策略研究,15异构混合阶多智能体系统编队控制的分布式优化(无参考文献) ,核心关键词:15异构混合阶; 多智能体系统; 编队控制; 分布式优化; 无参考文献。,15混合阶多智能体系统编队分布式优化控制
javascript 动态网页设计期末大作业(自己手写的,很适合期末作业),含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就可以使用。该项目可以直接作为毕设、期末大作业使用,代码都在里面,系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值,项目都经过严格调试,确保可以运行! javascript 动态网页设计期末大作业(自己手写的,很适合期末作业)javascript 动态网页设计期末大作业(自己手写的,很适合期末作业)javascript 动态网页设计期末大作业(自己手写的,很适合期末作业)javascript 动态网页设计期末大作业(自己手写的,很适合期末作业)javascript 动态网页设计期末大作业(自己手写的,很适合期末作业)javascript 动态网页设计期末大作业(自己手写的,很适合期末作业)javascript 动态网页设计期末大作业(自己手写的,很适合期末作业)javascript 动态网页设计期末大作业(自己手写的,很适合期末作业)javascrip
X光安检OPIXray数据集已经转换为VOC格式,可直接转换为为YOLO