设为首页 收藏本站
查看: 973|回复: 0

[经验分享] HAproxy简介

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2019-1-1 10:45:02 | 显示全部楼层 |阅读模式
关于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





























运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-658186-1-1.html 上篇帖子: HAproxy(一)安装和配置 下篇帖子: HAProxy构建虚拟域名负载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表