haproxy tcp模式和http模式的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了haproxy tcp模式和http模式的区别相关的知识,希望对你有一定的参考价值。

参考技术A socket连接和http连接的区别  HTTP协议:简单对象访问协议,对应于应用层,HTTP协议是基于TCP连接的  tcp协议:对应于传输层  ip协议:对应于网络层  TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。  Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,才能使用TCP/IP协议。  http连接:http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉;  socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。本回答被提问者采纳

haproxy之tcp

最近在弄关于tcp的代理,发现haproxy口碑挺好的,一查发现淘宝网都在使用,想来性能会让我非常满意(马上开始打脸)。

haproxy主要用于tcp和http两种模式的代理(health模式正在被放弃)

http这块我不打算在本文描述,有nginx使用经验的会想为什么不使用nginx呢,这点我不想做什么结论,开心就好。

一、haproxy的安装(乌班图下)

apt-get install haproxy

(如果没有发现安装包请更新源  apt-get  update 后再安装)

其配置文件默认为

/etc/haproxy/haproxy.cfg

二、全局配置

在此配置开始前,先配置系统日志输出,不然没法看haproxy的日志

vi /etc/rsyslog.conf

在文件最底部加入以下代码

local0.* /var/log/haproxy.log

寻找文件中此部分代码,去掉 module 与 input 前的#

# provides UDP syslog receptionmodule(load="imudp")input(type="imudp" port="514")# provides TCP syslog receptionmodule(load="imtcp")input(type="imtcp" port="514")

重启rsyslog

/etc/init.d/rsyslog restart

=======================

完成后开始进入haproxy的配置环节

打开haproxy的配置文件

vi /etc/haproxy/haproxy.cfg

以下是一个正常的haproxy代理tcp的配置文件

lobal log 127.0.0.1 local0 info log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy #chroot运行路径 stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 1000 #超时 默认超时设置为10秒 该值必须传入毫秒或以{us,ms,s,m,h,d}之间的时间单位为后缀 stats maxconn 100 #连接数 默认情况下,统计套接字限制为10个并发连接 user haproxy group haproxy daemon #以后台形式运行harpoxy nbproc 1 #设置进程数量 debug #haproxy调试级别,建议只在开启单进程的时候调试defaults mode tcp #默认负载均衡模式为tcp log global #日志定义 timeout connect 3000 #定义haproxy将客户端请求转发至后端服务器所等待的超时时长 timeout client 3000 #客户端非活动状态的超时时长 timeout server 3000 #客户端与服务器端建立连接后,等待服务器端的超时时长 timeout check 1000 #健康状态监测时的超时时间,过短会误判,过长资源消耗 retries 3 # 定义连接后端服务器的失败重连次数 option redispatch #当与上游服务器的会话失败(服务器故障或其他原因)时,把会话重新分发到其他健康的服务器上,当原来故障的服务器恢复时,会话又被定向到已恢复的服务器上。还可以用”retries”关键字来设定在判定会话失败时的尝试连接的次数 option dontlognull #设置日志中不记录空连接 option tcplog #启用日志记录tcp请求 option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接 maxconn 2000 #每个server最大的连接数listen stats mode http bind *:8080 option httplog #启用日志记录HTTP请求,默认haproxy日志记录是不记录HTTP请求 stats enable # 启用状态统计报告 stats refresh 30s # 统计页面自动刷新时间 stats hide-version # 隐藏统计页面上HAProxy的版本信息 stats show-node stats auth admin:liucheng92813? # 设置统计页面用户名和密码设置 stats uri /haproxy?stats #定义统计页面的URL,默认为/haproxy?stats stats admin if TRUE #如果认证通过就做管理功能,可以管理后端的服务器 stats realm “LOGIN” #登陆页面提示信息#浏览器访问 http://localhost:8080/haproxy?stats 即可看到控制面板listen ss-in12029 #将输入与输出配置在一起 bind *:12029 balance roundrobin #基于权重进行的轮叫算法,在服务器的性能分布经较均匀时这是一种最公平的,最合量的算法 server server1 127.0.0.1:14029 check inter 1000 rise 2 fall 3 weight 4 server server2 127.0.0.1:15029 check inter 1000 rise 2 fall 3 weight 6 #check 表示启用对此后端服务器执行健康检查 #inter 设置健康状态检查的时间间隔,单位为毫秒 #rise 设置人故障状态转换至正常状态需要成功检查的次数,如 rise 2:表示2次检查正确就认为此服务器可用。 #fall 设置后端服务器从正常状态转换为不可用状态需要检查的次数,如 fall 3表示3 次检查失败就认为此服务器不可用 #weight 设置后端真实服务器的权重,默认为1,最大值为256,设置为0表示不参与负载均衡。frontend ss-in12030 #配置输入 bind *:12030 option tcplog default_backend ss-out12030backend ss-out12030 #配置输出 balance roundrobin server 1 127.0.0.1:14030 check inter 1000 rise 2 fall 3 weight 4 server 2 127.0.0.1:15030 check inter 1000 rise 2 fall 3 weight 4

附上一个重启脚本

#!/usr/bin/env bashWORK="/etc/haproxy"CONFIG_NAME="haproxy.cfg"# 重置配置文件kill -s 9 `ps -aux | grep haproxy | awk '{ if($11=="haproxy") { print $2}}'`haproxy -f ${WORK}/${CONFIG_NAME}echo "haproxy 启动完成"# ps -ef | grep haproxy

三、潜在问题

1、haproxy 会自动计算 ulimit-n 值,尽管设置了liunx内核的tcp参数,在 haproxy.cfg 中显示配置 ulimit-n 值后貌似没有生效,引起了一些数据传输的问题,加重了延迟,可能还需要配置一些其他的东西做调整,如何调整尚不明确。

2、haproxy 在tcp模式下,官方文档不推荐使用多实例运行


以上是关于haproxy tcp模式和http模式的区别的主要内容,如果未能解决你的问题,请参考以下文章

haproxy+keepalived实现高可用负载均衡

haproxy 安装部署文档

haproxy+keepalived实现高可用负载均衡

负载均衡之haproxy详解

haproxy笔记之二:HAProxy简介

haproxy