HAproxy简介

2017-11-15 11:20:10来源:http://13154101.blog.51cto.com/13144101/1980903作者:人点击

分享

关于HAproxy这个东西对于互联网企业来说绝对不陌生,一个在负载均衡上可以和专业硬件相比都不逊色的一款软件。HAproxy是一个使用C语言便携的自由及开放源代码软件,其提供高性能,负载均衡,以及基于TCP和HTTP的应用程序代理。相比较Nginx来言,HAproxy更专注反向代理,因此他可以支持更多的选项更精细的控制更多的健康监测机制和负载均衡算法。

HAproxy特别适用哪些负载特别大的web站点,这些站点通常又需要会话保持或七层处理。HAproxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以简单的整合进你当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

至于它的特点那就多了:

1.出色的可靠性和稳定性

2.支持拒绝连接,防止DOS攻击

3.支持长连接,短连接和日志功能

4.路由HTTP请求到后端服务器,基于cookie作为会话绑定;同时支持通过制定的url来检测后端real server的状态

5.支持强大的ACL,灵活的路由配置,能实现动静分离

6.可支持四层和七层负载

7,拥有功能强大的后端服务器状态监测web页面,可以实时了解设备的运行状态,还可实现设备的上下线。

8.支持多种负载均衡调度算法,并且支持session保持

这么强大的软件是不是很想要0.0 他的主要安装方式就是yum源安装和源码安装 #有点区别那就是yum安装不易出错比较简单,而编译安装则对自己的需求来安装,更适合自己。


关于配置文件

他的配置文件所在/etc/haproxy/haproxy.cfg

在他的配置文件内主要有那么两个大部分global settings(全局设置)和proxies(对代理的设定)。

global settings:定义关于进程管理和性能的参数

daemon:让haproxy以守护进程的方式工作于后台,其等同于“-D”选项的功能

gid:已制定的GID运行haproxy #默认haproxy

group:组名,不过gid使用组号

uid:已指定UID运行

user:使用用户名

log:定义全局的syslog服务器 #比如log 127.0.0.1 local2(需要在/etc/rsyslog/日志服务内定义local2)

stats:可开启一个unix socket管理接口

maxconn:最大打开文件数量

global
log127.0.0.1local2

chroot/var/lib/haproxy
pidfile/var/run/haproxy.pid
maxconn4000
userhaproxy
grouphaproxy
daemon

#turnonstatsunixsocket
statssocket/var/lib/haproxy/stats

proxies:proxies又分为四个段default frontend backend listen这四个段

default段参数解读:

defaults
modehttp#模式为http
logglobal#全局日志
optionhttplog#启用记录http请求日志,默认不启用
optiondontlognull#日志不记录空连接
optionhttp-server-close#长连接
optionforwardforexcept127.0.0.0/8#添加forwardfor日指标记
optionredispatch#某台服务器宕机,强制定向到其他健康服务器
retries3#三次连接失败认为不可用
timeouthttp-request10s#请求超时
timeoutqueue1m#队列超时
timeoutconnect10s#连接超时
timeoutclient1m#客户端超时
timeoutserver1m#服务器超时
timeouthttp-keep-alive10s
timeoutcheck10s#检测超时
maxconn3000#能接受的最大并发连接数

关于frontend相关配置:#监听套接字可以接受客户端请求并且建立连接

具体格式如下
frontendwebserver#frontend为代码要求weserver为自己定义的名字
bind*:80#bind绑定端口,后面为IP:端口号(监听端口)
default_backendwebserver#默认的backend,下面的bacend来调用

关于backend的相关配置和举例:backend段用于定义后端real server,代理请求给后端服务器。

调度算法:

roundrobin:基于权重进行轮叫,在服务器的处理时间保持均匀分布时,这是最平衡、最公平的算法。此算法是动态的,这表示其权重可以在运行时进行调整,不过,在设计上,每个后端服务器仅能最多接受4128个连接;

static-rr:基于权重进行轮叫,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效;不过,其在后端服务器连接数上没有限制;

leastconn:新的连接请求被派发至具有最少连接数目的后端服务器;在有着较长时间会话的场景中推荐使用此算法,如LDAP、SQL等,其并不太适用于较短会话的应用层协议

first:根据服务器在列表中的位置,自上而下进行调度;前面服务器的连接数达到上限,新请求才会分配给下一台服务;

source:根据原地址hash可以使客户端一直定向到某个客户端

backendwebserver#backend代码格式webserver则为上面frontend定义的
balanceroundrobin#调度算法
serverapp1172.17.200.78:80check#后端服务check检查(可以不加)
serverapp2172.17.200.79:80check#格式为serveraddress[:port][param]

param的简单参数(可以定义多个,check仅为其中的一个)

backup:为备用的服务器加上此选项之后则其他机器全部宕机之后该服务器启动# !注意,全部宕机

check:后面跟参数检查inter检查健康状态间隔默认毫秒,rise离线到正常的检测次数,fall正常到不可用的检查次数 # inter 3000 rise 2 fall 2

cookie:指定server设定cookie值,用来指定连接 #连到某台server则一直保持连接该服务器

weight:权重 默认为1

Listen可以说是把frontend和backend结合起来但不建议这样使用,现在可以用来建立一个健康监测页面的listen段。

listenstats#定义一个统计报告服务
modehttp#基于http协议
bind0.0.0.0:1080#监听1080端口
statsenable#开启统计报告服务
statshide-version#隐藏统计报告版本信息
statsuri/haproxyadmin?stats#统计报告访问url
statsrealmHaproxy/Statistics#页面登陆信息
statsauthadmin:admin#验证账号信息
statsadminifTRUE#验证模式

接下来借用一个keepalived来配合HAproxy做一个简单的负载均衡:

keepalived配置如下,具体就不说怎么做了!!!就是用来IP地址访问和实现高可用的,地址转移,不细说了。就说一点这里面设置了一个172.17.200.100的IP来让外界访问。而这个地址可以转移!

!ConfigurationFileforkeepalived

global_defs{
notification_email{
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_fromAlexandre.Cassen@firewall.loc
smtp_server192.168.200.1
smtp_connect_timeout30
router_idLVS_DEVEL
}

vrrp_instanceVI_1{
stateBACKUP
interfaceeth2
virtual_router_id76
priority80
advert_int1
authentication{
auth_typePASS
auth_pass9000
}
virtual_ipaddress{
172.17.200.100
}
}

HAproxy配置如下:

frontendwebserver
bind*:80
default_backendwebserver
#---------------------------------------------------------------------
#staticbackendforservingupimages,stylesheetsandsuch
#---------------------------------------------------------------------
backendstatic
balanceroundrobin
serverstatic127.0.0.1:4331check

#---------------------------------------------------------------------
#roundrobinbalancingbetweenthevariousbackends
#---------------------------------------------------------------------
backendwebserver
balanceroundrobin
serverapp1172.17.200.78:80check
serverapp2172.17.200.79:80check

定义frontend端口和名称,下面backend来调用即可,这里调用三个两个real server。这就差不多了 0.0可以访问一下尝试了。

记得访问172.17.200.100


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台