2018-10-15 HAProxy

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-10-15 HAProxy相关的知识,希望对你有一定的参考价值。

参考技术A HAProxy是TCP / HTTP反向代理服务器,尤其适合于高可用性环境
可以针对HTTP请求添加cookie,进行路由后端服务器
可平衡负载至后端服务器,并支持持久连接
支持基于cookie进行调度
支持所有主服务器故障切换至备用服务器
支持专用端口实现监控服务
支持不影响现有连接情况下停止接受新连接请求
可以在双向添加,修改或删除HTTP报文首部
支持基于pattern实现连接请求的访问控制
通过特定的URI为授权用户提供详细的状态信息

软件包:yum install haproxy
主程序:/usr/sbin/haproxy
配置文件:/etc/haproxy/haproxy.cfg
Unit file:/usr/lib/systemd/system/haproxy.service
配置段:
global:全局配置段
进程及安全配置相关的参数
性能调整相关参数
Debug参数
proxies:代理配置段
defaults:为frontend, backend, listen提供默认配置
fronted:前端,相当于nginx, server
backend:后端,相当于nginx, upstream
listen:同时拥有前端和后端,适用于一对一环境,也就是前段和后端是一一对应的关系,只有一个端和一个后端

备注:以下的所有实验都是根据此拓扑图完成的

代理配置段:

check:对当前server做健康状态检测,只用于四层检测
注意:httpchk,“smtpchk”, “mysql-check”, “pgsql-check” and “ssl-hello-chk” 用于定义应用层检测方法
addr:检测时使用的IP地址,可以实现后端的服务器检测时使用一个ip地址,提供服务使用另外一个ip地址,使流量分流,提高效率
port :针对此端口进行检测
inter <delay>:连续两次检测之间的时间间隔,默认为2000ms
rise <count>:连续多少次检测结果为“成功”才标记服务器为可用;默认为2
fall <count>:连续多少次检测结果为“失败”才标记服务器为不可用;默认为3
cookie <value>:为当前server指定cookie值,实现基于cookie的会话黏性
disabled:标记为不可用
redir<prefix>:将发往此server的所有GET和HEAD类的请求重定向至指定的URL

cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ] [ postonly ] [ preserve ] [ httponly ] [ secure ] [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]
<name>:cookie名称,用于实现持久连接
rewrite:重写
insert:插入
prefix:前缀

在火狐浏览器上访问时,按F12进入调试页面也可以看到,第一次访问时响应报文里会有一个cookie值,这样浏览器下次访问时就会带着这个cookie值,从而被调度到固定的主机

stats enable
启用统计页;基于默认的参数启用stats page
-stats uri: /haproxy?statsuri默认值
-stats realm : HAProxy\Statistics
-stats auth: no authentication
stats uri <prefix>
自定义stats page uri
stats auth <user>:<passwd>
认证时的账号和密码,可使用多次
stats realm <realm>
认证时的realm
stats hide-version
隐藏版本
stats refresh <delay>
设定自动刷新时间间隔
stats admin if | unless <cond>
启用stats page中的管理功能
示例

maxconn <conns>:为指定的frontend定义其最大并发连接数;默认为2000
mode tcp|http|health
定义haproxy的工作模式
tcp:基于layer4实现代理;可代理mysql, pgsql, ssh, ssl等协议,https时使用此模式,默认模式
http:仅当代理协议为http时使用,centos实际默认模式
health:工作为健康状态检查的响应模式,当连接请求到达时回应“OK”后即断开连接,较少使用
TCP模式的健康状态检测示例

对后端服务器做http协议的健康状态检测:
option httpchk默认为:/ OPTIONS HTTP/1.0
option httpchk <uri>
option httpchk <method> <uri>
option httpchk <method> <uri> <version>
定义基于http协议的7层健康状态检测机制http-check expect [!] <match> <pattern>
http协议健康状态检测响应内容或指定响应码

option forwardfor[ except <network> ] [ header <name> ] [ if-none ]
在由haproxy发往后端主机的请求报文中添加“X-Forwarded-For”首部,其值为前端客户端的地址;用于向后端主发送真实的客户端IP
[ except <network> ]:请求报文来自此处指定的网络时不予添加此首部,如haproxy自身所在网络
[ header <name> ]:使用自定义的首部名称,而非“X-Forwarded-For”
[ if-none ]如果没有首部才添加首部,如果有使用默认值
示例

errorfile <code> <file> 自定义错误页
<code>:HTTP status code,支持200, 400, 403, 408, 500, 502, 503, 504,<file>:错误页文件路径
errorlo c<code> <url>
相当于errorloc 302 <code> <url>,利用302重定向至指URL
示例1

reqadd <string> [if | unless <cond>]
在请求报文尾部添加指定首部
rspadd <string> [if | unless <cond>]
在响应报文尾部添加指定首部
示例:rspadd X-Via:\ HAPorxy
reqdel <search> [if | unless <cond>]
reqidel <search> [if | unless <cond>] (ignore case) 不分大小写
从请求报文中删除匹配正则表达式的首部
rspdel <search> [if | unless <cond>]
rspidel <search> [if | unless <cond>] (ignore case) 不分大小写
从响应报文中删除匹配正则表达式的首部
示例1

示例1

示例2

示例3基于acl实现动静分离

示例4实现不同的域调度到不同服务器

示例5

1 、支持ssl会话;
bind *:443 ssl crt /PATH/TO/SOME_PEM_FILE
crt后证书文件为PEM格式,且同时包含证书和所有私钥
cat demo.crt demo.key> demo.pem
2、 把80端口的请求重向定443
bind *:80
redirect scheme https if ! ssl_fc
3、 向后端传递用户请求的协议和端口(frontend或backend)
http-request set-header X-Forwarded-Port %[dst_port] ---添加端口
http-request add-header X-Forwared-Proto https if ssl_fc ---添加https协议
支持https指的是客户端访问haproxy时使用https协议,因为这一段一般是外网,而haproxy访问后端的web服务器时不用https,因为这一段一般都是内网
示例

HAProxy ing

HAProxy简介

HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。 

HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。


HAProxy安装

RHEL系,在CentOS6.4+以后,HAProxy就被收录进base源中

[[email protected] ~]# yum info haproxy
已加载插件:fastestmirror
Determining fastest mirrors
可安装的软件包
名称    :haproxy
架构    :x86_64
版本    :1.5.14
发布    :3.el7
大小    :833 k
源    :base
简介    : TCP/HTTP proxy and load balancer for high availability environments
网址    :http://www.haproxy.org/
协议    : GPLv2+
描述    : HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high
         : availability environments. Indeed, it can:
         :  - route HTTP requests depending on statically assigned cookies
         :  - spread load among several servers while assuring server persistence
         :    through the use of HTTP cookies
         :  - switch to backup servers in the event a main server fails
         :  - accept connections to special ports dedicated to service monitoring
         :  - stop accepting connections without breaking existing ones
         :  - add, modify, and delete HTTP headers in both directions
         :  - block requests matching particular patterns
         :  - report detailed status to authenticated users from a URI
         :    intercepted by the application

因此,直接安装即可

[[email protected] ~]# yum install haproxy -y





本文出自 “心境脱俗,宁静致远” 博客,请务必保留此出处http://zhaoyongtao.blog.51cto.com/10955972/1782953

以上是关于2018-10-15 HAProxy的主要内容,如果未能解决你的问题,请参考以下文章

第五周动手动脑(2018.10.15-10.21)

2018-10-15 21:07:38 c language

haproxy

c_cpp 5.最长的回文子串 - Med - 2018.10.15

2018.10.15队测

2018.10.15python学习第十九天part1