Haproxy
长连接 ,短连接问题
socket连接和http连接的区别 :
HTTP协议:简单对象访问协议,对应于应用层,HTTP协议是基于TCP连接的
tcp协议:对应于传输层
ip协议:对应于网络层 TCP/IP是传输层协议,主要解决数据如何在网络中传输;
而HTTP是应用层协议,主要解决如何包装数据。
Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,才能使用TCP/IP协议。
http连接:http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉;
socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。
Haproxy mode 配置
tcp:实例运行于纯TCP模式,在客户端和服务器端之间将建立一个全双工的连接,且不会对7层报文做任何类型的检查;通常用于SSL、SSH、SMTP等应用;
http:实例运行于HTTP模式,客户端请求在转发至后端服务器之前将被深度分析,所有不与RFC格式兼容的请求都会被拒绝;此为默认模式;
health:实例工作于health模式,其对入站请求仅响应“OK”信息并关闭连接,且不会记录任何日志信息;此模式将用于响应外部组件的健康状态检查请求;目前来讲,此模式已经废弃,因为tcp或http模式中的monitor关键字可完成类似功能;
Haproxy 开启日志配置
haproxy默认不会输出log,需要配置。
1. 修改"/etc/haproxy/haproxy.cfg"
log 127.0.0.1 local2
2. vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-r -m 0 -c 2"
3. /etc/rsyslog.conf
$ModLoad imudp #去掉#
$UDPServerRun 514 #去掉#
local2.* /var/log/haproxy.log
4. service rsyslog restart
/bin/systemctl restart rsyslog.service
5. service haproxy restart
Haproxy 4层负载均衡与7层负载均衡的理解
所谓的4层负载均衡,就是 IP+Port 的负载均衡 (OSI -7层结构)
例如,建立TCP 连接 负载均衡设备在接收到来自客户的 第一个 syn 请求时, 就通过负载均衡策略去选择一个服务器,
并且对报文中目标IP地址进行修改(修改为后端服务器的IP),然后直接转发给后端服务器,TCP的连接建立,即三次握手是客户端和后端服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发操作,有些情况,需要 后端服务器返回报文给负载均衡设备,这需要转发报文时对报文原来的源地址进行修改。
7层负载均衡
也称为”内容交换“,以报文中真正有意义的内容,加上 负载均衡器的负载均衡策略,决定选择的后端服务器。
这个情况下,类似一个代理服务器,负载均衡设备需要接收应用层报文数据,那么需要和客户端建立TCP连接,并且与后端服务器建立 TCP连接,从这个理论上分析,7层负载均衡设备明显对负载均衡设备要求高,并且处理7层的能力会低于4层模式的能力。
特别鸣谢
如果你还想去查看 客户端调用了那太后端服务器,可以开启haproxy日志
并且在haproxy.conf中增加如下:
# log 配置
capture request header Host len 64
capture request header User-Agent len 128
capture request header X-Forwarded-For len 100
capture request header Referer len 200
capture response header Server len 40
capture response header Server-ID len 40
#capture捕获信息
log-format %ci:%cp\ %si:%sp\ %B\ %U\ %ST\ %r\ %b\ %f\ %bi\ %hrl\ %hsl\