你的位置:首页 > 操作系统

[操作系统]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是一致性哈希法,动态

 

如何启用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 允许haproxy端主动断开客户端的连接(客户端建立了server连接但没发起请求的情况下)

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

未完待续