2015-07-22-24Haproxy学习
一、HAProxy简介:
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理。
HAProxy适用于负载特大的web站点,这些站点通常又需要会话保持或七层处理。
HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
(我的理解:作为一个代理,根据一定的规则,将请求分发到不同的服务器上)
二、特点:
(1)它可以代理任何基于TCP的东西--而不仅仅是HTTP。
(2)拥有多种负载均衡算法,包括“最少连接数(least connections)”策略,将后端服务器和最少连接数关联起来;
(3)提供专用的状态页来告诉你后端服务器的状态、运行时间以及很多齐全的指标。
(4)请求可以通过各种各样的东西发送:cookies、URL字符串、客户端IP,等等。
三、安装:
(1)官网下载:haproxy-1.4.8.tar.gz
(2)解压:tar zxvf haproxy-1.4.8.tar.gz
cd haproxy-1.4.8
uname -a //查看linux内核版本
Linux web1 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
(3)安装:make TARGET=linux26 PREFIX=/usr/local/haproxy
安装到:/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
四、配置:
1)了解配置参数
global:(全局参数)进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改;
default:(默认参数)配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件;
frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的backend(可动态选择);
backend:后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器;
listen:Frontend和Backend的组合体。
OPTION 选项:
option httplog #http日志格式
option httpclose #HAProxy会针对客户端的第一条请求的返回添加cookie并返回给客户端,客户端发送后续请求时会发送此cookie到HAProxy,HAProxy会针对此cookie分发到上次处理此请求的服务器上,如果服务器不能忽略此cookie值会影响处理结果。如果避免这种情况配置此选项,防止产生多余的cookie信息。
option dontlognull #保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包。
option originalto #如果服务器上的应用程序想记录发起请求的原目的IP地址,需要在HAProxy上配置此选项,这样HAProxy 会添加"X-Original-To"字段。
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
option httpclose #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现
option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
负载均衡选项:
1、简单的轮询,balance roundrobin;
2、根据请求的源IP,balance source;
3、根据请求的uri,balance uri;
4、根据请求RUL中的参数,balance url_param。
COOKIE 选项:
cookie JSESSIONID prefix :如果客户端只支持一个cookie,并且服务器上的应用程序已经对返回设置了cookie,HAProxy设置此选项可以改写应用程序设置的cookie信息,把服务器的信息添加到原cookie中去。
cookie SERVERID indirect :HAProxy会删除添加的cookie信息,避免此cookie信息发送到服务器。
cookie SERVERID rewrite :
cookie SERVERID insert :
cookie SERVERID insert nocache :
cookie SERVERID insert postonly :
(2)编写配置文件
vim haproxy.cfg
写入如下内容:(说明:haproxy服务器ip:192.168.0.162,后端服务器:163、167、68)
global
log 127.0.0.1 local0 info #日志位置
maxconn 4096 #最大连接数
uid 99 #代表用户id为99的nobody用户执行
gid 99 #代表群组id为99的nobody群组
daemon #设置成后台运行
nbproc 1 #进程数量
defaults
log global
#mode tcp
mode http
retries 3 #三次失败后认为服务器不可用
maxconn 2000 #最大连接数
contimeout 5000 #连接超时时间单位(毫秒)
clitimeout 50000 #客服端超时时间单位(毫秒)
srvtimeout 50000 #服务器超时时间单位(毫秒)
listen localhost 192.168.0.162:80
# cookie DYNSRV insert indirect nocache
#轮询的同时,根据插入的cookie DYNSRV 的值来做会话保持。
cookie JSESSIONID prefix
mode http
stats uri /haproxy #监控haproxy状态
stats refresh 30s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm Haproxy Manager #统计页面密码框上提示文本
stats auth admin:admin #统计页面用户名和密码设置
stats hide-version #隐藏版本信息
option httpchk HEAD /check.txt HTTP/1.0 #健康检测
option httpclose #隐藏统计页面上HAProxy的版本信息
balance roundrobin #负载均衡算法(roundrobin轮询)
server app1_1 192.168.0.68:80 cookie app1inst1 check inter 2000 rise 2 fall 5
server app1_2 192.168.0.163:80 cookie app1inst2 check inter 2000 rise 2 fall 5
server app1_3 192.168.0.167:80 cookie app1inst3 check inter 2000 rise 2 fall 5
启动服务:(haproxy 默认监听的80端口关闭80端口的程序)
/usr/local/ haproxy/sbin/haproxy –f haproxy.cfg的绝对路径
后端机配置:
service iptables stop #防火墙关闭
service httpd/nginx start #开启后端机web服务开启
配置每个服务器页面不同
五、测试
在浏览器输入192.168.0.162 反复刷新出现按一定的顺序出现三个不同的页面
六、扩展:
1.Keepalived
作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
Layer3,4&7工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:
Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。
Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
Layer7:Layer7就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。
2.Varnish一款高性能的开源HTTP加速器
3.Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid主要设计用于在Unix一类系统运行。
4.Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。
5.Engine Yard是全球领先的Ruby on Rails和PHP云计算平台,可为用户托管、运行自己的应用程序。
6.Mongrel是一种快速的针对Ruby的Http 服务器,专门为部署发布rails应用而产生的。
7.NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样