标签:Haproxy
千万级高并发负载均衡软件有硬件负载均衡(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
标签:Haproxy
原文地址:http://blog.51cto.com/gdutcxh/2109241