haproxy学习笔记

HAProxy: 实现了一种事件驱动,单一进程模型,支持数万计的并发连接,用于为tcp和http应用程序提供高可用,负载均衡和代理服

务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点


代理(http): 
正向代理:
反向代理:

代理作用:web缓存(加速)、反向代理、内容路由(根据流量及内容类型等将请求转发至特定服务器)、转码器;

在代理服务器上添加Via首部;

缓存的作用:
减少冗余内容传输;
节省带宽、缓解网络瓶颈;
降低了对原始服务器的请求压力;
降低了传输延迟

yum -y install haproxy,安装haproxy  rpm -ql haproxy,查看安装了哪些包,找到主配置文件/etc/haproxy/haproxy.cfg

全局配置段:

除去全局配置段,其他的都是代理配置段

chroot 切换根目录,将haproxy都运行在/var/lib/haproxy 这样做是为了增加haproxy的安全

pidfile 指定主进程文件  maxconn  默认最大连接数   user 以哪个用户运行haproxy   group 以哪个组运行haproxy  daemon 运行

位守护进程 stats socket 图中有解释(这样做是为了基于共享内存访问数据,而不需要通过tcp连接以提高运行性能)

 

第一项log 指所有日志都记录到本机, 通过local2设备输出,因此还得去/etc/rsyslog.conf中添加和修改必要参数vim

/etc/rsyslog.conf (在全局配置段log 最多可以指定两个)

开启日志监听 tcp和udp的端口都开启   

local2.*  定义haproxy的日志记录位置,service rsyslog restart 重启日志服务

跳过defaults配置段去配置一台简单的负载均衡服务器

frontend 指的是代理的前端,  main是名字  *:80  所有地址都监听在80端口,default_backend:为frontend指明使用的默认后

端,使用use_backend:指明使用哪个后端

bind 可以用来指定监听多个端口

backend 指的是代理的后端,  叫做webservers

server 指定后端服务器  web1指定名字后面是该server的ip地址 check  健康检测单位为毫秒默认2秒检测一次,  weight 权重默认

为1, backup指其他服务器都不可用时启用此server

balance: 指明调度算法;
动态:权重可动态调整
静态:调整权重不会实时生效

roundrobin: 轮询,动态算法,每个后端主机最多支持4128个连接

static-rr: 轮询,静态算法,每个后端主机支持的数量无上限

leastconn: 根据后端主机的负载数量进行调度;仅适用长连接的会话;动态

source :将客户端源地址hash,并由后端服务器的权重相除后发送至匹配的服务器,这使得同一个ip地址总会被发送给同一台服务器,

默认为静态

 

uri :将uri hash 此算法常用后端是代理缓存或反病毒代理以提高缓存命中率,默认为静态

url_param: 根据url中的指定的参数的值进行调度;把值做hash计算,并除以总权重,默认为静态

hdr(<name>) :根据请求报文中指定的header(如use_agent, referer, hostname)进行调度;把指定的header的值做hash计

,默认为静态

在hash算法中 map-based是取模法,静态 consistent是一致性哈希法,动态  下面是一个示例:

 

 再说下check,haproxy默认的健康检测时基于第四层的tcp协议,会根据配置对后端服务器的指定端口进行检测

另外一种检测是基于http协议的第七层检测,有三种方法此处只介绍两种,第一种:

此种方法不推荐使用,在有些情况下会检测失误,比如后端是nginx+fpm时,本人亲测

 

第二种:

此种检测方法(通过去后端服务器获取页面资源)可以准确检测服务是否可用,推荐使用

健康检测还可指定失败次数如: fall 3   指定检测时间间隔如: inter  1000

 

如何启用haproxy的状态监控页配置如下

listen 它代表既是前端,又是后端,enable激活监控页面,hide-version隐藏haproxy的版本,auth 用户密码认证 if TRUE admin

用户认证成功了将在监控页面的底部打开调试功能

 

 

haproxy实现另一个功能:基于浏览器cookie实现session sticky

加入了这几条指令: cookie serverid insert(在响应报文中插入serverid) cookie websrv1 当响应报文是web1发送回给

haproxy,haproxy重新构建响应首部时在Cookie首部插入serverid=websrv1,当客户端再次请求时,haproxy就会根据首部中刚插

入的serverid再次将请求调度到同一台服务器上

 

介绍defaults配置段的参数,defaults中的参数如果frotend和backend段都没有定义默认就是用defaults段的参数

mode  定义haproxy工作在哪种模式http | tcp   log  global  表示日志就使用全句段中定义的记录日志方法 

httplog  丰富日志记录格式, dontlognull 不记录健康检测日志

 forwardfor if-none execpt x.x.x.x/mask 允许在发往后端服务器的请求首部中添加X-Forwarded-For首部 except排除哪些网

段, if-none 仅在X-Forwarded-For这个首部不存在时才添加,如果不指定if-none那么回覆盖原来X-Forwarded-For,代理如果有

多级这个if-none参数就必须了,这样做只是为了后端server记录真实的客户端ip地址 

redispatch 是否允许将session重新分配到健康的后端服务器上(在与后端服务器session建立失败时) redispatch表示允许 http-

server-close 一般http-keep-alive启用时它才起作用,允许haproxy端主动断开客户端的连接(客户端建立了server连接但没发起

请求而且持久连接超时的情况下或者客户端请求的资源达到一定个数)

3 表示3次与后端服务器连接失败就认定服务器不可用  queue 设定请求队列的超时时长  http-request  等待客户端http请求超时时长

(如果客户端发送请求发了一半但客户端挂了的情况下) http-keep-alive 指定客户端与haproxy的持久连接超时时长, connect与

后端服务器成功建立tcp连接需要等待的超时时长,server等待后端服务器发送响应报文的超时时长,client  haproxy发送了响应报文

等待client确定的超时时长 maxconn haproxy最多能建立多少个并发连接

 

haproxy 还可以向响应报文首部添加自定义首部

rspadd Via:\ nihao   向对客户端的响应报文中添加Via首部,\是因为后面跟了一个空格,要对空格转义

 

haproxy 通过acl功能根据http请求报文中的请求方法实现对后端不同服务器组的调度

read 定义acl的名字, method匹配请求报文中首部Request Method的值

 if write 如果匹配write这条acl 就使用tag_engine这个服务器组(if后面如果给了多个名字则要同时满足)

 

haproxy通过acl实现动静网页分离

 

这里的应用服务器我使用了cookie做会话绑定,insert 后面加nocache是官方给出的建议

这样就实现了动静分离 很简单吧

转载于:https://www.cnblogs.com/linuxboke/p/5425914.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值