Haproxy
Posted 成为DBA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Haproxy相关的知识,希望对你有一定的参考价值。
Haproxy简介
HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。
四层负载均衡和七层负载均衡的区别
四层负载平衡:根据IP范围和端口转发用户流量,快速,负载均衡器将用户的请求转发给后端服务器的Web后端组。无论选择哪个后端服务器,都将直接响应用户的请求。通常,Web后端中的所有服务器应该提供相同的内容 - 否则用户可能会收到不一致的内容。
七层负载平衡:识别用户发送的url,可以实现动静分离(可以将服务器分为静态服务器、和动态服务器),可以根据用户的需求分配到不同的服务器,有效的提升了服务器的性能。因此可以用于大型的web站点,使得可以建立多个服务器集群,服务器又可以扮演不同的角色,大大的提高了服务器的性能。
Haproxy的特点
能够实现负载均衡还有lvs、nginx。
LVS
即Linux虚拟服务器,是一个虚拟的服务器集群系统。抗负载能力强、工作稳定但是只能工作在tcp四层。
Nginx:
轻量级别的web服务器,工作在七层之上,可以针对http做一些分流的策略;
Nginx对网络稳定性的依赖非常小,理论上能ping通就能进行负载功能,这个是它的优势之一;
可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。
Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码,超时等等,并且会把返回错误的请求重新提交到另一个节点,不过 其中缺点就是不支持url来检测。
Haproxy
支持虚拟主机
HAproxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导:同时支持通过获取指定的url来检测后端服务器的状态;
HAproxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAproxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;
HAproxy支持TCP协议的负载均衡转发,可以对mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡。
Haproxy原理
负载均衡服务器作为web服务器流量的入口,处理来自客户端用户的请求。Haproxy作为负载均衡服务器具有四层(tcp)负载均衡处理,在四层处理时候,haproxy只具有分发功能,将请求分发到各服务器,因此需要集群中各服务器具有相同的数据。当haproxy作为七层负载均衡处理时候,haproxy可以识别用户发送url,可以实现动静分离的功能,将用户的请求分门别类分发到不同的服务器上,可以大提高服务器的效率。
Haproxy配置文件
# Global settings
#---------------------------------------------------------------------
global
# to have thesemessages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslogto accept network log events. This isdone
# by adding the '-r' option to theSYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2events to go to the /var/log/haproxy.log
# file. A line like the following can be addedto
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unixsocket
stats socket/var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sectionswill
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
optionhttp-server-close
optionforwardfor except 127.0.0.0/8
option redispatch
retries 3
timeouthttp-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeouthttp-keep-alive 10s
timeout check 10s
maxconn 3000
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main *:5000
acl url_static path_beg -i /static /images /javascript/stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backendstatic if url_static
default_backend app
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
balance roundrobin
server static 127.0.0.1:4331 check
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
balance roundrobin
server app1 127.0.0.1:5001 check
server app2 127.0.0.1:5002 check
server app3 127.0.0.1:5003 check
server app4 127.0.0.1:5004 check
haproxy 的配置文件由两部分组成:全局设定和对代理的设定,共分为五段:global,defaults,frontend,backend,listen。
global:参数是进程级的。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改
defaults:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件;
frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的backend。
backend:后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器。
以上是关于Haproxy的主要内容,如果未能解决你的问题,请参考以下文章