2018-10-15 HAProxy

2018-10-15 HAProxy,第1张

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是一款反向代理服务器工具,通过它,可以实现负载均衡。它支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。新的1.3引入了frontend,backend,frontend根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend.

利用HAPorxy实现负载均衡

1. 利用HAProxy实现负载均衡

192.168.169.137 (haproxy)———负载均衡———-(192.168.169.117192.168.169.118)

安装配置HAproxy

cd /usr/local/

wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.14.2.tar.gz

tar zxvf haproxy-1.3.14.2.tar.gz

mv haproxy-1.3.14.2 haproxy

cd haproxy

make TARGET=linux26

2. 创建配置文件

# vi haproxy.cfg

global

maxconn 5120

chroot /usr/local/haproxy

uid 99

gid 99

daemon

quiet

nbproc 2 #通过nbproc多设置几个haproxy并发进程,这样每个进程的task_queue相对就会短很多,性能自然就能提高不少

#pidfile /var/run/haproxy-private.pid

defaults

log global

mode http

option httplog

option dontlognull

log 127.0.0.1 local3

retries 3

option redispatch

maxconn 2000

contimeout 5000

clitimeout 50000

srvtimeout 50000

listen webfarm 0.0.0.0:80

mode http

stats uri /haproxy-stats #监控haproxy状态

stats realm Haproxy\ statistics

stats auth netseek:52netseek #设置状态监控的用户名为netseek密码为52netseek

balance roundrobin #负载均衡算法

cookie SERVERID insert indirect

option httpclose #

option forwardfor #apache日志转发功能

option httpchk HEAD /check.txt HTTP/1.0 #健康检测

server app_bbs1 192.168.169.117:80 cookie app1inst1 check inter 2000 rise 2 fall 5

server app_bbs2 192.168.169.118:80 cookie app1inst2 check inter 2000 rise 2 fall 5

syslog.conf里加一行

local3.* /var/log/haproxy.log

# touch /var/log/haproxy.log

# chown haproxy:haproxy /var/log/haproxy.log

# chmod u+x /var/log/haproxy.log

# tail –f /var/log/harpoxy.log 监控日志

# ./haproxy -f haproxy.cfg 启动服务.

监控状态图示http://192.168.169.137/haproxy-stats ,输入用户名密码查看状态。

后端apache日志处理

配置httpd.conf

LogFormat “%{X-Forwarded-For}i %l %u %t \”%r\” %>s %b ” combined

CustomLog /var/log/httpd/access_log combined

虚拟主机不记录检测日志:

SetEnvIf Request_URI “^/check\.txt$” dontlog

LogLevel warn

ErrorLog /var/log/httpd/vhost_error.log

CustomLog /var/log/httpd/vhost_access.log combined env=!dontlog

相关介绍

#./haproxy –help //haproxy相关命令参数介绍.

haproxy -f <配置文件>[-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p <pid文件>] [-s] [-l] [-dk]

[-ds] [-de] [-dp] [-db] [-m <内存限制M>] [{-sf|-st} pidlist...]

-d 前台,debug模式

-D daemon模式启动

-q 安静模式,不输出信息

-V 详细模式

-c 对配置文件进行语法检查

-s 显示统计数据

-l 显示详细统计数据

-dk 不使用kqueue

-ds 不使用speculative epoll

-de 不使用epoll

-dp 不使用poll

-db 禁用后台模式,程序跑在前台

-sf <pidlist>

程序启动后向pidlist里的进程发送FINISH信号,这个参数放在命令行的最后

-st <pidlist>

程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11187846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存