haproxy 简介

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上.

HAProxy特点和优点

1.支持原声SSL,同时支持客户端和服务器的SSL.
2.支持IPv6和UNIX套字节(sockets)
3.支持HTTP Keep-Alive
4.支持HTTP/1.1压缩,节省宽带
5.支持优化健康检测机制(SSL、scripted TCP、check agent...)
6.支持7层负载均衡。
7.可靠性和稳定性非常好。
8.并发连接40000-50000个,单位时间处理最大请求20000个,最大数据处理10Gbps.
9.支持8种负载均衡算法,同时支持session保持。
10.支持虚拟主机。
11.支持连接拒绝、全透明代理。
12.拥有服务器状态监控页面。
13.支持ACL

HAProxy的balance8种负载均衡算法

1.roundrobin : 基于权重轮循。
2.static-rr : 基于权重轮循。静态算法,运行时改变无法生效
3.source : 基于请求源IP的算法。对请求的源IP进行hash运算,然后将结果与后端服务器的权重总数想除后转发至某台匹配服务器。使同一IP客户端请求始终被转发到某特定的后端服务器。
4.leastconn : 最小连接。(适合数据库负载均衡,不适合会话短的环境) 
5.uri : 对部分或整体URI进行hash运算,再与服务器的总权重想除,最后转发到匹配后端。
6.uri_param : 根据URL路径中参数进行转发,保证在后端服务器数量不变的情况下,同一用户请求分发到同一机器。
7.hdr() : 根据http头转发,如果不存在http头。则使用简单轮循。

HAProxy主要工作模式

1.mode  tcp模式:该模式下,在客户端和服务器之间将建立一个全双工的连接,且不会对7层的报文做任何处理的简单模式。此模式默认,通常用于SSL、SSH、SMTP应用。
2.mode http模式(一般使用):该模式下,客户端请求在转发给后端服务器之前会被深度分析,所有不与RFC格式兼容的请求都会被拒绝。
3.mode health模式 :     仅做健康检查 
注意:当实现内容交换时,前端和后端必须工作于同一种模式(一般都是HTTP模式),否则将无法启动实例。 
工作模式可通过mode参数在default,frontend,listen,backend中实现定义。 
两种模块分别是:通过mod_tcp来限定反代模式和mod_http来实现负载均衡 

haproxy 的组成

haproxy 配置中分成五部分内容,分别如下:
1 global:参数是进程级的,通常是和操作系统相关。这些参数一般只设置一次,如果配置无误,就不需要再次进行修改
2 defaults:配置默认参数,这些参数可以被用到frontend,backend,Listen组件
3 frontend:接收请求的前端虚拟节点,Frontend可以更加规则直接指定具体使用后端的backend
4 backend:后端服务集群的配置,是真实服务器,一个Backend对应一个或者多个实体服务器
5 Listen  :    Fronted和backend的组合体

其中
global:全局配置段
进程及安全配置相关的参数
性能调整相关参数
Debug参数

proxies:代理配置段
defaults:为frontend, backend, listen提供默认配置
fronted:前端,相当于nginx, server {}
backend:后端,相当于nginx, upstream {}
listen:同时拥有前端和后端,适用于一对一环境

HAProxy架构图

haproxy_第1张图片

配置准备和运行环境:

Linux版本:CentOs 6.5 
iptables防火墙:关闭 
客户端:192.168.22.131
调度器(VIP):192.168.22.130
服务器web1(RIP):192.168.22.134
服务器web2(RIP):192.168.22.136

HAproxy安装

yum install -y haproxy

主程序:/usr/sbin/haproxy
配置文件:/etc/haproxy/haproxy.cfg

简单前端调度实现

利用四台虚拟机实现简单的前端轮询调度。
一台客户端,一台haproxy调度器,两台RS

1,首先在后端部署两台http服务
2,编辑haproxy配置文件/etc/haproxy/haproxy.cfg
默认设置不做修改
vim /etc/haproxy/haproxy.cfg 
frontend  main *:80     #设置监听ip:端口
default_backend         websrvs     #调用后端RS组名
backend websrvs
balance     roundrobin      #轮询算法
server      web1 192.168.22.134:80 check
server      web2 192.168.22.136:80 check

######定义Haproxy监控##########
listen haproxy_stats      #定义Haproxy监控
        bind 192.168.22.130:8080  #设置Frontend和Backend的组合体,监控组的名称,>按需要自定义名称
        mode http        #http的7层模式
        log global
        stats enable
        stats refresh 5s        #页面刷新间隔为5s
        stats realm Haproxy\ Statistic #设置Frontend和Backend的组合体,监控组的名称,按需要自定义名称
        stats uri /haproxy_stats #监控页面的URL,我的是http://192.168.22.130:8080/haproxy_stats
        stats hide-version  #隐藏统计页面上HAProxy的版本信息
        stats auth haproxy:haproxy      #指定监控页面登陆的用户名和密码,可以设置多个用户名
        #stats auth abc:abc      #指定监控页面登陆的用户名和密码