码迷,mamicode.com
首页 > 其他好文 > 详细

HAproxy简介

时间:2017-11-11 22:10:00      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:linux

关于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
    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 unix socket
    stats socket /var/lib/haproxy/stats

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

default段参数解读:

defaults
    mode                    http          #模式为http
    log                     global        #全局日志
    option                  httplog       #启用记录http请求日志,默认不启用
    option                  dontlognull   #日志不记录空连接
    option http-server-close              #长连接     
    option forwardfor       except 127.0.0.0/8      #添加forwardfor日指标记
    option                  redispatch    #某台服务器宕机,强制定向到其他健康服务器 
    retries                 3             #三次连接失败认为不可用
    timeout http-request    10s           #请求超时
    timeout queue           1m            #队列超时 
    timeout connect         10s           #连接超时
    timeout client          1m            #客户端超时
    timeout server          1m            #服务器超时
    timeout http-keep-alive 10s               
    timeout check           10s           #检测超时
    maxconn                 3000          #能接受的最大并发连接数

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

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

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

调度算法:

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

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

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

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

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

    backend webserver #backend代码格式 webserver则为上面frontend定义的
    balance     roundrobin                #调度算法
    server  app1 172.17.200.78:80 check   #    后端服务  check检查(可以不加)
    server  app2 172.17.200.79:80 check   #格式为  server address [: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段。

listen stats #定义一个统计报告服务
mode http    #基于http协议
bind 0.0.0.0:1080     #监听1080端口
stats enable          #开启统计报告服务
stats hide-version    #隐藏统计报告版本信息
stats uri /haproxyadmin?stats   #统计报告访问url
stats realm Haproxy\ Statistics #页面登陆信息
stats auth admin:admin   #验证账号信息
stats admin if TRUE      #验证模式



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

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

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth2
    virtual_router_id 76
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 9000
    }
    virtual_ipaddress {
172.17.200.100
}
}

HAproxy配置如下:

frontend webserver
        bind *:80
        default_backend webserver
#---------------------------------------------------------------------
# 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 webserver
    balance     roundrobin
    server  app1 172.17.200.78:80 check
    server  app2 172.17.200.79:80 check

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

记得访问172.17.200.100













本文出自 “mlon客” 博客,请务必保留此出处http://13154101.blog.51cto.com/13144101/1980903

HAproxy简介

标签:linux

原文地址:http://13154101.blog.51cto.com/13144101/1980903

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!