[转帖]haproxy
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动**, **单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。
3|0负载均衡
3|1二层负载均衡(mac)
用于虚拟mac地址方式,外部对虚拟mac地址请求,负载均衡接收后分配给后端实际的mac地址响应。
3|2三层负载均衡(ip)
一般用于虚拟ip地址的方式,外部对虚拟ip地址请求,负载均衡接收后分配给后端实际的ip地址响应。
3|3四层负载均衡(tcp)
在三层负载均衡的基础上,用ip+port接收请求,在转发到对应的机器上。
产品大概有:F5,lvs,nginx,haproxy......
3|4七层负载均衡(http)
根据虚拟的url或者ip,主机名接收请求,在转发到相应的处理服务器上。
产品大概有:haproxy,nginx,apache,mysql proxy......
4|0haproxy安装
4|1Yum安装
4|2源码安装
haproxy官方帮助文档:https://cbonte.github.io/haproxy-dconv/
下载安装包
haproxy源码包下载网站地址:https://src.fedoraproject.org/repo/pkgs/haproxy/
使用xftp传到本机

解压并安装
5|0配置各个负载的内核
6|0提供配置文件
6|1总体介绍
haproxy 的配置文件由两部分组成:全局设定和对代理的设定,共分为五段:global,defaults,frontend,backend,listen
- global: 全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关。
- default: 配置默认参数,这些参数可以被用到frontend,backend,Listen组件。
- frontend:接收请求的前端虚拟节点,frontend可以指定具体使用后端的backend。
- backend : 后端服务集群的配置,真实服务器,一个backend对应一个或者多个实体服务器。
- listen: fronted和backend的组合体,比如haproxy实例状态监控部分配置。Haproxy1.3之前的唯一配置方式。
6|2时间格式
一些包含了值的参数表示时间,如超时时长。这些值一般以毫秒为单位,但也可以使用其它的时间单位后缀
us: 微秒(microseconds),即1/1000000秒;ms: 毫秒(milliseconds),即1/1000秒;s: 秒(seconds);m: 分钟(minutes);h:小时(hours);d: 天(days);
6|3global配置
通常主要定义全局配置主要用于设定义全局参数,属于进程级的配置,通常和操作系统配置有关。
- log:全局的日志配置,local0是日志输出设置,info表示日志级别(err,waning,info,debug);
- maxconn:设定每个HAProxy进程可接受的最大并发连接数,此选项等同于linux命令选项”ulimit -n”;
- chroot:修改haproxy的工作目录至指定的目录并在放弃权限之前执行chroot()操作,可以提升haproxy的安全级别,不过需要注意的是要确保指定的目录为空目录且任何用户均不能有写权限;
- daemon:让haproxy以守护进程的方式工作于后台,其等同于“-D”选项的功能,当然,也可以在命令行中以“-db”选项将其禁用;
- nbproc:指定启动的haproxy进程个数,只能用于守护进程模式的haproxy;默认只启动一个进程,鉴于调试困难等多方面的原因,一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式;
- pidfile:将haproxy的进程写入pid文件;
- ulimit-n:设定每进程所能够打开的最大文件描述符数目,默认情况下其会自动进行计算,因此不推荐修改此选项;
6|4defaults配置
用于设置配置默认参数,这些参数可以被用到frontend,backend,listen组件。
在此部分中设置的参数值,默认会自动引用到下面的frontend、backend、listen部分中。如果某些参数属于公用的配置,只需要在defaults部分添加一次即可。而如果frontend、backend、listen部分也配置了与defaults部分一样的参数,defaults部分参数对应的值自动被覆盖。
mode http:设置haproxy的运行模式,有三种{http|tcp|health}。注意:如果haproxy中还要使用4层的应用(mode tcp)的话,不建议在此定义haproxy的运行模式。
- tcp模式:在此模式下,客户端和服务器端之前将建立一个全双工的连接,不会对七层报文做任何检查,默认为tcp模式,经常用于SSL、SSH、SMTP等应用。
- http模式:在此模式下,客户端请求在转发至后端服务器之前将会被深度分板,所有不与RFC格式兼容的请求都会被拒绝。
- health:已基本不用了。
log global:设置日志继承全局配置段的设置。
option httplog:表示开始打开记录http请求的日志功能。
option dontlognull:如果产生了一个空连接,那这个空连接的日志将不会记录。
option http-server-close:打开http协议中服务器端关闭功能,使得支持长连接,使得会话可以被重用,使得每一个日志记录都会被记录。
retries 3:向上游服务器尝试连接的最大次数,超过此值就认为后端服务器不可用。
option abortonclose:当haproxy负载很高时,自动结束掉当前队列处理比较久的链接。
timout http-request 10s:客户端发送http请求的超时时间。
timeout queue 1m:当上游服务器在高负载响应haproxy时,会把haproxy发送来的请求放进一个队列中。timeout queue定义放入这个队列的超时时间。
timeout connect 5s:haproxy与后端服务器连接超时时间,如果在同一个局域网可设置较小的时间。
timeout client 1m:定义客户端与haproxy连接后,数据传输完毕,不再有数据传输,即非活动连接的超时时间。
timeout server 1m:定义haproxy与上游服务器非活动连接的超时时间。
timeout http-keep-alive 10s:设置新的http请求连接建立的最大超时时间,时间较短时可以尽快释放出资源,节约资源。
timeout check 10s:健康检测的时间的最大超时时间。
maxconn 3000:最大并发连接数。
contimeout 5000:设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,新版本的haproxy使用timeout connect替代,该参数向后兼容。
clitimeout 3000:设置连接客户端发送数据时的成功连接最长等待时间,默认单位是毫秒,新版本haproxy使用timeout client替代。该参数向后兼容。
srvtimeout 3000:设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒,新版本haproxy使用timeout server替代。该参数向后兼容。
6|5frontend配置
frontend是在haproxy 1.3版本以后才引入的一个组件,同时引入的还有backend组件。通过引入这些组件,在很大程度上简化了haproxy配置文件的复杂性。forntend可以根据ACL规则直接指定要使用的后端backend。
- frontend http_80_in:定义一个名为http_80_in的frontend。
- bind 0.0.0.0:80:定义haproxy前端部分监听的端口。
- mode http:定义为http模式。
- log global:继承global中log的定义。
- option forwardfor:使后端server获取到客户端的真实IP。
6|6backend配置
用来定义后端服务集群的配置,真实服务器,一个Backend对应一个或者多个实体服务器。
6|7listen配置
常常用于状态页面监控,以及后端server检查,是Fronted和backend的组合体。
7|0启动haproxy
8|0启动日志
- HAproxy在默认情况不会记录日志
- 不仅要在haproxy.conf中配置日志输出
- 还需要修改系统日志的配置文件
修改haproxy.conf
在haproxy.conf文件中增加如下日志配置,
defaults下面增加日志相关的配置:
log global
option httplog
log 127.0.0.1 local7
日志的级别为local0~local7,
另外16~23保留为本地使用:
| 级别 | 代码 | 描述 |
|---|---|---|
| energ | 0 | 系统不可用 |
| alert | 1 | 必须马上采取行动的事件 |
| crit | 2 | 关键的事件 |
| err | 3 | 错误事件 |
| warning | 4 | 警告事件 |
| notice | 5 | 普通但重要的事件 |
| info | 6 | 有用的信息 |
| debug | 7 | 调试信息 |
修改系统日志配置
vim /etc/rsyslog.conf
指定日志文件haproxy.log保存的位置,
haproxy.log会自动生成:
$UDPServerRun 514
local7.* /root/haproxy/log/haproxy.log
由于haproxy的日志是用udp传输的,所以要启用rsyslog的udp监听。
配置rsyslog的主配置文件,开启远程日志
SYSLOGD_OPTIONS="-r -m 0 -c 2"
参数说明:
#-m 0 标记时间戳。单位是分钟,为0时,表示禁用该功能
#-c 2 使用兼容模式,默认是 -c 5
重启rsyslog服务
重启haproxy服务
kill -9 PID
haproxy -f /usr/local/haproxy/conf/haproxy.cfg
[转帖]haproxy的更多相关文章
- [转帖]HAProxy 7层 负载均衡
HAProxy 7层 负载均衡 https://www.cnblogs.com/jicki/p/5546902.html HAProxy 系统 CentOS 5.8 x64 wget http://h ...
- haproxy有关session的问题
在实验的时候遇到一个问题就是当我登录网站的时候,然后我再刷新一下,用户的状态就退出了 我现在的框架是这样的,前面有一台haproxy作为反向代理,后面有两台服务器跑的是java应用.后面两台服务器做的 ...
- [笔记]HAproxy reload config file with uninterrupt session
HAProxy is a high performance load balancer. It is very light-weight, and free, making it a great op ...
- [原]HAproxy 代理技术原理探究
HAproxy 技术分享 简介 HAProxy是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件 Features 1.免费 2.能够做到4层以上代理 3.高性能 ...
- 利用HAProxy代理SQL Server的AlwaysOn辅助副本
利用HAProxy代理SQL Server的AlwaysOn辅助副本 公司最近数据库升级到SQL Server2014 ,并部署了alwayson高可用集群 机房内有三套程序需要读取数据库 第一套:主 ...
- Mysql的Haproxy反向代理和负载均衡
HaProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.应用到Haproxy主要是因为他免费,并且基于TCP和HTTP的应用代理. ...
- HAProxy介绍
简单说明 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需 ...
- 对比Haproxy和Nginx负载均衡效果
为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...
- haproxy windows环境使用
haproxy下载:http://pan.baidu.com/s/1miEvQUc 测试环境说明: ip地址 作用 开放端口 备注 nbproc 1 daemon defaults mode tcp ...
- haproxy利用ACL规则封禁自定义IP地址拒绝访问
现在有一个需求就是在发版的时候希望除公司IP外的外网访问服务的时候都是拒绝访问的 现在利用haproxy 的acl规则作出限制 errorfile 403 /etc/haproxy/err ...
随机推荐
- springMVC的基本介绍与入门
1:MVC是什么? MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范. Model(模型):数据模型,提高要展示的数据 现在一般是分为Value ...
- 扩展中国剩余定理(Excrt)笔记
扩展中国剩余定理(excrt) 本来应该先学中国剩余定理的.但是有了扩展中国剩余定理,朴素的 CRT 就没用了. 扩展中国剩余定理用来求解如下形式的同余方程组: \[\begin{cases} x \ ...
- 对象存储只能按文件名搜索,你out了吧
摘要:不少大公司的一个桶里都是几亿几十亿的对象,那他们都是怎么检索的呢? 本文分享自华为云社区<对象存储只能按文件名搜索? 用 DWR + ElasticSearch 实现文件名.文件内容.图片 ...
- 火山引擎DataLeap背后的支持者 - 工作流编排调度系统FlowX
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 背景介绍 业务场景 在日常工作中,我们时不时需要对某些逻辑进行重复调度,这时我们就需要一个调度系统.根据不同的调度 ...
- Linux 堡垒机命令行中如何上传下载文件(SecureCRT - SFTP)
通过堡垒机进入的 Linux 操作系统,无法直接使用 WinSCP 等工具进行文件的上传下载. 可使用 SecureCRT 先进入命令行模式 配置 配置 Linux 堡垒机的连接方式 连接 选择要进入 ...
- 使用 🤗 Transformers 优化文本转语音模型 Bark
Transformers 提供了许多最新最先进 (state-of-the-art, SoTA) 的模型,这些模型横跨多个领域及任务.为了使这些模型能以最佳性能运行,我们需要优化其推理速度及内存使用. ...
- [SDR] GNU Radio 系列教程(十五)—— GNU Radio GFSK 模块
目录 1 GFSK 背景知识 2 GNU Radio GFSK 模块参数详解 3 GNU Radio GFSK 模块简示例 4 本文视频教程 参考链接 教程列表 基础教程: 综合教程: 视频和博客 1 ...
- 题解 [HDU6746] Civilization(贪心+模拟)
来源:2020 年百度之星·程序设计大赛 - 初赛一 一道贪心 + 细节模拟题 题意很简单,这里不详细写了 观察题目,\(n\) 只有 500 ,可以 \(n \times n\) 枚举每个位置作为起 ...
- 4.0 《数据库系统概论》数据库安全性详解---(存取控制、DAC&MAC、视图机制、审计Audit....)
前言 本篇文章学习书籍:<数据库系统概论>第5版 王珊 萨师煊编著 视频资源来自:数据库系统概论完整版(基础篇+高级篇+新技术篇) 由于 BitHachi 学长已经系统的整理过本书了,我在 ...
- 一篇文章教你从入门到精通 Google 指纹验证功能
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/EHomjBy4Tvm8u962J6ZgsA作者:Sun Daxiang Google 从 An ...