HAProxy的特点是:
1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
10、不能做Web服务器即Cache。

源码方式安装Haproxy

#tar xzvf haproxy-1.4..tar.gz
#cd haproxy-1.4.
#make TARGET=linux26
#make install

测试配置文件如下

 global
log 127.0.0.1 local0
# log 127.0.0.1 local1
maxconn
ulimit-n
uid
gid
# chroot /tmp
# nbproc
# daemon
# debug
# quiet listen proxy1 192.168.207.128:
mode http
# source 127.0.0.2:
# log 127.0.0.1 local0
# log 127.0.0.1 local1
log global
#mode tcp
cookie SERVERID insert indirect
balance roundrobin
#dispatch 127.0.0.1:
#dispatch 127.0.0.1:
#dispatch 127.0.0.1:
#dispatch 127.0.0.1:
option httpchk
# server test 127.0.0.1: cookie cookie1 check inter
# server web02 192.168.0.104: cookie cookie2 check inter
server web01 127.0.0.1: cookie cookie1 check inter fall weight #定义的多个后端
server web02 192.168.0.104: cookie cookie2 check inter fall weight #定义的多个后端 # server nc 127.0.0.1: cookie cookie1 check inter
# server tuxlocal0 10.101.23.9: cookie cookie1 check
# server tuxlocal1 127.0.0.1: cookie cookie1 check
# server tuxlocal2 127.0.0.1: cookie cookie2 check
# server tuxlocal3 127.0.0.1: cookie cookie3 check
# server tuxlocal4 127.0.0.1: cookie cookie4 check
# server vax 10.101.14.1: cookie cookie1 check
#server tuxceleron 10.101.0.1: cookie cookie2 check
#server telnet 127.0.0.1:
#server ssh 127.0.0.1:
#server local 127.0.0.1: cookie cookie3 check
#server ko 127.0.0.1: cookie cookie3 check
#server local 127.0.0.1: cookie cookie3 check
#server local 127.0.0.1:
#server celeron 10.101.0.1: cookie srv1
#server celeron 10.101.0.1:
#server local 10.101.23.9:
contimeout
clitimeout
srvtimeout
maxconn
option redispatch
retries
grace
#rsprep ^Server.* Server:\ IIS
#rspdel ^Server.*
#rspadd Set-Cookie:\ mycookie=;\ path=/
#rsprep ^(Date:\ )([^,]*)(,\ )(.*) LaDate\ est:\ \\ (\)
# force connection:close
#reqidel ^Connection:
#rspidel ^Connection:
#reqadd Connection:\ close
#rspadd Connection:\ close
# processing options
#option keepalive
option forwardfor
option httplog
option dontlognull
# reqirep ^(Test:\ ) \0_toto_\1_toto
# reqidel ^X-Forwarded-for:
# reqirep ^(GET|POST)\ .* \
# reqirep ^(Host:|Connection:|User-agent:|Cookie:)\ .* \
# reqideny ^ listen proxy2 0.0.0.0:
mode http
#mode tcp
dispatch 127.0.0.1:
#dispatch 127.0.0.1:
#dispatch 127.0.0.1:
#dispatch 127.0.0.1:
#server tuxlocal 127.0.0.1: cookie cookie1 check
#server tuxceleron 10.101.0.1: cookie cookie2 check
#server telnet 127.0.0.1:
#server ssh 127.0.0.1:
#server local 127.0.0.1: cookie cookie3 check
#server local 127.0.0.1:
#server celeron 10.101.0.1: cookie srv1
#server celeron 10.101.0.1:
#server local 10.101.23.9:
contimeout
clitimeout
srvtimeout
maxconn
option redispatch
retries
grace
#rsprep ^Server.* Server:\ IIS
#rspdel ^Server.*
rspadd Set-Cookie:\ SERVERID=;\ path=/
#rsprep ^(Date:\ )([^,]*)(,\ )(.*) LaDate\ est:\ \\ (\) listen proxy3 0.0.0.0:
disabled
mode http
cookie SERVERID insert indirect
#dispatch 127.0.0.1:
server srv1 127.0.0.1:
#server srv2 192.168.12.3:
contimeout
clitimeout
srvtimeout
maxconn
option redispatch
retries
grace
rspdel ^Via:.*
monitor-net 192.168.12.252/ listen proxy4 0.0.0.0:
disabled
mode http
transparent
# dispatch 127.0.0.1:
contimeout
clitimeout
srvtimeout
maxconn
retries
grace # log 10.101.11.1 local1
# log 10.101.11.1 local2 # cliexp ^(.*ASPSESSIONID.*=)(.*) \1FENICGGCBECLFFEEOAEAIFGF
# cliexp ^(GET.*)(.free.fr)(.*) \.online.fr\
# cliexp ^(POST.*)(.free.fr)(.*) \.online.fr\
# cliexp ^Proxy-Connection:.* Proxy-Connection:\ close
# srvexp ^(Location:\ )([^:]*://[^/]*)(.*) \1\3 listen health 0.0.0.0:
mode health
clitimeout
srvtimeout
maxconn
grace listen health2 0.0.0.0:
mode health
option httpchk
clitimeout
srvtimeout
maxconn
grace

Haproxy配置

运行一下命令启动Haproxy

[wilson@localhost sbin]$ ./haproxy -f /usr/local/haproxy/examples.cfg

启动效果如下

server web01 127.0.0.180 check inter 2000 fall 3 weight 30 #定义的多个后端
server web02 192.168.0.104:80 check inter 2000 fall 3 weight 30 #定义的多个后端

配置的第一个80端口为centos本机的Apache 服务器,第二个为其他windowsPC上的 iis7,用IE和火狐打开可以看到请求被转发到不同的web服务器,效果如下

Haproxy session保持

、session知识
Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。
服务器也通过URL重写的方式来传递SessionID的值,因此不是完全依赖Cookie。如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。
在后端应用服务器上php.ini 里几个session相关值的,可以进行简单设置
session.use_cookies = #表示 服务端和客户端交互session是通过cookie的方式 默认值
session.name = LXSYM #默认值是PHPSESSID 可以自行定义。比如LXSYM
session.cache_limiter = nocache #此设置确保对每个请求,在可能提供缓存的版本前,先请求发送到最初的服务器。
针对session数据推荐使用共享存储,实现方法很多。比如存于多个memcached中,具体会写博文说明,敬请关注~
、实现haproxy与客户端session一致的方法有:
2.1 用户IP 识别
haroxy 将用户IP经过hash计算后 指定到固定的真实服务器上。
配置指令 balance source (如: balance uri len )
2.2 cookie 识别
haproxy 将WEB服务端发送给客户端的cookie中插入(或添加前缀)haproxy定义的后端的服务器COOKIE ID。
配置指令例举 cookie SESSION_COOKIE insert indirect nocache
可以使用firebug可以观察到用户的请求头的cookie信息
2.3 session 识别
haproxy 将后端服务器产生的session和后端服务器标识存在haproxy中的一张表里。客户端请求时先查询这张表。
配置指令例举 appsession LXSYM len timeout 5h request-learn
注意LXSYM这个值替换成 你的php.ini 里session.name的值。

参考:

http://blog.csdn.net/tantexian/article/details/50056199

http://www.cnblogs.com/kgdxpr/p/3272861.html

centos之Haproxy 负载均衡学习笔记的更多相关文章

  1. Web负载均衡学习笔记之实现负载均衡的几种实现方式

    0x00 概要 负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应用是Web负载均衡.根 ...

  2. Web负载均衡学习笔记之四层和七层负载均衡的区别

    0x00 简介 简单理解四层和七层负载均衡: ① 所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡:同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. ...

  3. nginx官方文档 之 http负载均衡 学习笔记

    一.负载均衡 算法 大致可以分两类: (1)不能保证用户的每一次请求都通过负载均衡到达同一服务器. (2)可保证用户的每一次请求都通过负载均衡到达同一服务器. 第二类的应用场景: 1.如果服务器有缓存 ...

  4. 【官方文档】Nginx负载均衡学习笔记(三) TCP和UDP负载平衡官方参考文档

    本章介绍如何使用NGINX Plus和NGINX开放源代理和负载平衡TCP和UDP流量. 目录 介绍 先决条件 配置反向代理 配置TCP或UDP负载平衡被动健康监控 选择负载平衡方法 配置会话持久性 ...

  5. 【官方文档】Nginx负载均衡学习笔记(二)负载均衡基本概念介绍

    简介 负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台 ECS 的流量分发控制服务.负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应 ...

  6. 【精选】Nginx负载均衡学习笔记(一)实现HTTP负载均衡和TCP负载均衡(官方和OpenResty两种负载配置)

    说明:很简单一个在HTTP模块中,而另外一个和HTTP 是并列的Stream模块(Nginx 1.9.0 支持) 一.两个模块的最简单配置如下 1.HTTP负载均衡: http { include m ...

  7. Web负载均衡学习笔记之K8S内Ngnix微服务服务超时问题

    0x00 概述 本文是从K8S内微服务的角度讨论Nginx超时的问题 0x01 问题 在K8S内部署微服务后,发现部分微服务链接超时,Connection Time Out. 最近碰到了一个 Ngin ...

  8. 烂泥:高负载均衡学习haproxy之安装与配置

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 有关高负载均衡的软件,目前使用比较多的是haproxy.nginx和lvs.下面我们就开始学习haprxoy这款软件. 一.haproxy介绍 以下开始介 ...

  9. Nginx/LVS/HAProxy负载均衡软件的优缺点

    一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术.具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了:如果机器不少,可以用D ...

随机推荐

  1. 微信公众平台如何获取用户的OpenID(一)

    如何获取用户的OpenID,对于微信开发模式下的开发来说,那就是一个非常简单的小功能了.简单介绍一下我是怎样去获取OpenID的. 微信服务器与公众账号服务器交互的信息可以分为3类:请求消息.事件和响 ...

  2. sourceTree 更新svn提示can't locate SVN/Core.pm

    装了sourceTree一直没有怎么用,今天试着用用,居然报错 can't locate SVN/Core.pm 详细报错如下: Can't locate SVN/Core.pm in @INC (y ...

  3. select document library from certain list 分类: Sharepoint 2015-07-05 07:52 6人阅读 评论(0) 收藏

    S using System; using Microsoft.SharePoint; namespace Test { class ConsoleApp { static void Main(str ...

  4. 谈谈UIView的几个layout方法

    谈谈UIView的几个layout方法-layoutSubviews.layoutIfNeeded.setNeedsLayout...   最近在学习swift做动画,用到constraint的动画, ...

  5. Linux 进程退出后自动启动

    /********************************************************************** * Linux 进程退出后自动启动 * 说明: * 在系 ...

  6. 使用Timer类的两个实例 动态时钟

    package chapter16; import javax.swing.*; import chapter15.StillClock; import java.awt.event.*; publi ...

  7. linux下安装memcache(php版本5.3)

    1.安装之前需要的准备:所需软件 libevent-1.4.6这个版本网上没找到,所以安装最新的版本libevent-2.0.22 libevent-1.4.6-stable.tar.gz (http ...

  8. Python Scarpy安装包

    由于网络的原因,Scraoy无法安装 Cannot fetch index base URL https://pypi.python.org/simple/ 1.  scrapy 安装所需要的包可以从 ...

  9. JAVA中精确计算金额BigDecimal

    package com.chauvet.utils; import java.math.BigDecimal; import java.text.DecimalFormat; import java. ...

  10. 关于js判断鼠标移入元素的方向--解释

    一开始我是这么想的,将待移入的元素分割四块,用mousemove获取第一次鼠标落入的区域来判断鼠标是从哪个方向进去的. 所以只要写个算法来判断鼠标的值落入该元素的区域就可以得出鼠标移入的方向,如下图: ...