千万级高并发负载均衡软件有硬件负载均衡(F5,A10,BIG-IP)、软件负载均衡(Nginx、LVS、HAProxy)在软件负载均衡产品中,又分为两种实现方式(基于操作系统和基于第三方应用的软负载实现)LVS是基于Linux系统实现的一种软负载均衡,HAProxy是基于第三方应用实现的软负载均衡。开源的、高性能的、基于TCP(四层)/HTTP(七层)应用的负载均衡软件

*可靠性和稳定性非常好,可以和硬件级的F5负载均衡设备相媲美。 *最高可同时维护40000~50000个并发连接,单位时间最大请求数为20000,最大数据处理能力可达10Gps。作为软件负载均衡来说,性能可见一斑。 *支持多于8种负载均衡算法,同时也支持session保持。(会话保持) *支持虚拟主机功能,这样实现web负载均衡更加灵活。 *支持连接拒绝、全透明代理等功能。 *拥有一个功能强大的服务器状态监控界面,实时了解系统的运行状况。

HAProxy借助于操作系统的技术特性来实现性能最大化的,因此,在使用HAProxy时,对操作系统进行性能调优非常重要。在业务方面,非常适合高并发且需要持久连接或四层和七层处理机制的web系统,例如门户网站或电商网站等。另外。HAProxy也可以用于MySQL数据库(读操作)的负载均衡。

四层负载均衡器(F5、LVS) 分析IP层及TCP/UDP层的流量实现的基于“IP+端口”的负载均衡。 通过四层负载均衡器,修改请求的目的地址,修改源地址(根据需求)。

七层负载均衡器(Nginx、HAProxy) 根据报文内容,再配合负载均衡算法来选择后端服务器。(URL、访问域名、浏览器类别、语言。。) 以TCP为例,负载均衡器要获取报文的内容,因此只能先代替后端服务器和客户端建立连接,接着才能收到客户端的报文内容,然后根据报文和负载均衡算法决定服务的内部服务器。对比四层负载均衡,七层负载均衡需要和客户端内部服务器都建立一次TCP连接,而四层只建立一次TCP连接。七层负载均衡设备对设备的要求高,而七层负载均衡的处理能力也必然低于四层模式的负载均衡。

Haproxy的负载均衡算法:

roundrobin:基于权重轮询
static-rr:静态基于权重轮询
source:基于源IP,(IP_HASH)
leastconn:(将新的连接请求到最少连接数的服务器)
uri:(uri hash)
uri_param:(url路径)
hdr:(http头进行转发)

一、Haproxy安装

A、源码包安装
1、解压源码包:
		tar -zxvf ~
2、编译安装:
	make TARGET=linux26 PREFIX=/usr/local/haproxy
    make install PREFIX=/usr/local/haproxy
3、配置文件
		mkdir /usr/local/haproxy/conf
		cp examples/haproxy.cfg  /usr/local/haproxy/conf
		mkdir -p  /usr/local/haproxy/conf  #创建配置文件目录
		mkdir -p /etc/haproxy  #创建配置文件目录
		touch  /usr/local/haproxy/conf/haproxy.cfg  #创建配置文件
		ln -s  /usr/local/haproxy/conf/haproxy.cfg   /etc/haproxy/haproxy.cfg  #添加配置文件软连接
		cp -r  /usr/local/src/haproxy-1.6.9/examples/errorfiles  /usr/local/haproxy/errorfiles  #拷贝错误页面
		ln -s  /usr/local/haproxy/errorfiles  /etc/haproxy/errorfiles  #添加软连接
		mkdir -p  /usr/local/haproxy/log  #创建日志文件目录
		touch  /usr/local/haproxy/log/haproxy.log  #创建日志文件
		ln -s  /usr/local/haproxy/log/haproxy.log  /var/log/haproxy.log  #添加软连接
		cp /usr/local/src/haproxy-1.6.9/examples/haproxy.init  /etc/rc.d/init.d/haproxy  #拷贝开机启动文件
		chmod +x  /etc/rc.d/init.d/haproxy  #添加脚本执行权限
		chkconfig haproxy on  #设置开机启动
		ln -s  /usr/local/haproxy/sbin/haproxy  /usr/sbin  #添加软连接

B、yum 安装
		yum install haproxy -y
		service haproxy start
		chkconfig haproxy on

二、修改配置文件/etc/haproxy/haproxy.cfg

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log    127.0.0.1 local2          ###[err warning info debug] 
    chroot  /usr/local/haproxy
    pidfile  /var/run/haproxy.pid   ###haproxy的pid存放路径,启动进程的用户必须有权限访问此文件 
    maxconn  4000                   ###最大连接数,默认4000
    user   haproxy
    group   haproxy
    daemon                          ###创建1个进程进入deamon模式运行。此参数要求将运行模式设置为"daemon"
 
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will 
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode   http             ###默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
    log    global           ###采用全局定义的日志
    option  dontlognull     ###不记录健康检查的日志信息
    option  httpclose       ###每次请求完毕后主动关闭http通道 
    option  httplog         ###日志类别http日志格式 
    option  forwardfor      ###如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip  
    option  redispatch      ###serverId对应的服务器挂掉后,强制定向到其他健康的服务器
    timeout connect 10000   #default 10 second timeout if a backend is not found
    timeout client 300000   ###客户端连接超时
    timeout server 300000   ###服务器连接超时
    maxconn     60000       ###最大连接数
    retries     3           ###3次连接失败就认为服务不可用,也可以通过后面设置 
####################################################################
listen stats
        bind 0.0.0.0:1080           #监听端口  
        stats refresh 30s           #统计页面自动刷新时间  
        stats uri /stats            #统计页面url  
        stats realm Haproxy Manager #统计页面密码框上提示文本  
        stats auth admin:admin      #统计页面用户名和密码设置  
        #stats hide-version         #隐藏统计页面上HAProxy的版本信息
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main
    bind 0.0.0.0:80
    acl url_static path_beg    -i /static /images /javascript /stylesheets
    acl url_static path_end    -i .jpg .gif .png .css .js
 
    use_backend static if url_static     ###满足策略要求,则响应策略定义的backend页面
    default_backend   dynamic            ###不满足则响应backend的默认页面
 
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
 
backend static
    balance     roundrobin                 ###负载均衡模式轮询
    server      static 127.0.0.1:80 check ###后端服务器定义
     
backend dynamic
    balance    roundrobin
    server         websrv1 10.252.97.106:80 check maxconn 2000
    server         websrv2 10.117.8.20:80 check maxconn 2000
 
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
errorfile 403 /etc/haproxy/errorfiles/403.http
errorfile 500 /etc/haproxy/errorfiles/500.http
errorfile 502 /etc/haproxy/errorfiles/502.http
errorfile 503 /etc/haproxy/errorfiles/503.http
errorfile 504 /etc/haproxy/errorfiles/504.http

配置文件详解 (1)global部分(用来设置全局配置参数,属于进程级的配置,通常和操作系统配置有关) (2)default部分 (3)frontend部分(设置请求前端的虚拟节点) (4)backend部分(用于设置集群后端服务集群的配置) (5)listen部分

日志配置策略: 由于为了节省读写I/O所消耗的性能,没有自动配置日志输出功能,但是为了维护和调试方便,日志输出还是很有必要的。 rsyslog管理系统日志,可以实现UDP日志接收、将日志写入文件、将日志写入数据库等功能。

rpm -qa rsyslog
vim /etc/rsyslog.d/haproxy.conf
	$ModLoad imudp
	$UDPServerRun 514
	local3.* /usr/local/haproxy/logs/haproxy.log
	local0.* /usr/local/haproxy/logs/haproxy.log

vim /etc/rsysconfig/rsyslog
	SYSLOGD_OPTIONS="-c 2 -r -m 0"

server rsyslog restart