一、HAproxy简介

HAproxy是高性能的代理服务器,其可以提供Lay4Lay7代理,具有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  健康检测

HAproxy实现反向代理、负载均衡集群以及web动静分离

使用listen段实现反向代理

listen  webserver
bind *:80
server yxm23      172.16.15.23:80 check

定义两组服务(listenfrontendbackend混合使用)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

HAproxy实现反向代理、负载均衡集群以及web动静分离

HAproxy实现反向代理、负载均衡集群以及web动静分离

五、实现负载均衡

1.调度算法

roundrobin:加权轮调

static-rr:轮调,静态调度算法

sourceuri

hash-typemap-based静态

hash-typeconsistent动态

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

HAproxy实现反向代理、负载均衡集群以及web动静分离

动态调度算法实现负载均衡

  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语法解析

ACLfronedlistenbackend)使用范围

语法acl<aclname><criterior>[flags][operator]<value>

aclacl名称标准标志位操作符值

标志位:-i:忽略字符大小写

值类型:ranges:范围、数字1024:65535#端口102465535

operatorsgeeqltlegt

strings字符串

regularexpression正则表达式

IPaddressesandnetworksIP地址或者网络地址

Criterior:标准

dst<IP>dst_portsrcsrc_port

path:访问路径

path_beg:路径以#####开头

egaclstaticpath_end.html.html结尾

path_end:路径以#####结尾

path_reg:匹配正则表达式(与字符串匹配相比速度较慢)

Urlurl_begurl_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 #本地主机作为备用主机