一、HAproxy简介
HAproxy是高性能的代理服务器,其可以提供Lay4、Lay7代理,具有Healthcheck,负载均衡,访问控制特性,完全可以支持数以万计的并发连接,性能卓越。而且HAproxy的运行模式使得它可以很简单安全的整合进当前的架构中,同时可以保护后台的web服务器不被暴露到网络上。
二、实验环境及配置
1.环境
系统环境:centos6.4-i386
haproxy:1.4.22-3-i686
安装:yum-yinstallhaproxy
2.配置文件
global #全局段 log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon defaults #默认配置(全局有效) mode http # 基于那种模式工作(http 、tcp、health) log global #定义日志 option httplog #详细记录http日志 option dontlognull #不记录健康检查的日志信息 option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch #ServerID对应的服务器宕机后,强制定向到其他运行正常的服务器 retries 3 #三次连接服务失败认为服务不可用 timeout http-request 10s #回复报文超时时间 timeout queue 1m #排超队超时时间 timeout connect 10s #连接超时时间 timeout client 1m #客户端超时时间 timeout server 1m #服务器端超时时间 timeout http-keep-alive 10s #长连接超时时间 timeout check 10s #健康检测超时时间 maxconn 3000 #最大连接数 frontend webserver #前端配置 backend appservers #后端服务器 listen stats #listen段(可以单独使用,相当于frontend+backend)
三、反向代理
全局配置和默认配置同上
frontend webserver #定义前端服务 bind *:80 default_backend appserver backend appserver#定义后端服务 server yxm23 172.16.15.23:80 check #服务名 IP:PORT 健康检测
使用listen段实现反向代理
listen webserver bind *:80 server yxm23 172.16.15.23:80 check
定义两组服务(listen和frontend、backend混合使用)bind端口不能相同
访问:172.16.15.18:8080安装haproxy服务器的IP
frontend webserver bind *:80 default_backend appserver backend appserver server yxm23 172.16.15.23:80 check listen staticserver bind *:8080 server yxm14 172.16.15.14:80 check
四、提供状态页面
listen stats bind *:8088(定义任意端口) stats enable #启动状态页面 默认路径http://172.16.15.18:8080/haproxy?stats stats hide-version #隐藏版本号(B(backend) D(defaults) L(listen)) stats realm Haproxy\ yxm #提供认证(要访问需要提供用户密码)B D L stats auth yxm:yxm #认证用户名密码 B D L stats admin if TRUE #提供管理功能(前提是需要先通过认证)L B stats url /hyxm 修改默认路径 D L B
五、实现负载均衡
1.调度算法
roundrobin:加权轮调
static-rr:轮调,静态调度算法
sourceuri
hash-type:map-based静态
hash-type:consistent动态
2.动态调度算法支持的特性
<1>权重在服务运行时调整
<2>支持慢速启动
静态调度算法实现负载均衡
frontend webserver bind *:80 default_backend appservers backend appservers server yxm23 172.16.15.23:80 check #后端两台服务 server yxm14 172.16.15.14:80 check
动态调度算法实现负载均衡
backend appservers balance source #调度算法 (source、 uri:适用于缓存服务器) hash-type consistent #哈希类型,一致性哈希算法 server yxm23 172.16.15.23:80 check weight 2 #默认服务,服务宕掉后,后续服务启动,服务修复后重新夺回服务 server yxm14 172.16.15.14:80 check weight 3 #
六、使用ACL实web动静分离
1.ACL语法解析
ACL(fronedlistenbackend)使用范围
语法acl<aclname><criterior>[flags][operator]<value>
aclacl名称标准标志位操作符值
标志位:-i:忽略字符大小写
值类型:ranges:范围、数字1024:65535#端口1024到65535
operators:ge、eq、lt、le、gt
strings字符串
regularexpression正则表达式
IPaddressesandnetworksIP地址或者网络地址
Criterior:标准
dst<IP>、dst_port、src、src_port
path:访问路径
path_beg:路径以#####开头
eg:aclstaticpath_end.html以.html结尾
path_end:路径以#####结尾
path_reg:匹配正则表达式(与字符串匹配相比速度较慢)
Url、url_beg、url_end
hdr_beg(host):主机名以#####开头
2.web动静分离
frontend webserver bind *:80 acl static path_beg -i /static /p_w_picpaths /javascript /stylesheets acl static path_end -i .jpg .png .jpeg .gif .swf .css .js use_backend staticserve if static default_backend appservers backend static banlance roundrobin server yxm14 172.16.15.14:80 check weight 1 maxconn 2000#后端服务器 server yxm18 127.0.0.1 check weight 1 backup #本地主机作为备用主机 backend appservers banlance roundrobin server yxm23 172.16.15.23:80 check weight 1 maxconn 1000#后端服务器 server yxm18 127.0.0.1 check weight 1 backup #本地主机作为备用主机