HAProxy

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HAProxy相关的知识,希望对你有一定的参考价值。

1 关于HAProxy

1.1 介绍:

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。

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

1.2 衡量负责均衡器性能的因素:

Session rate 会话率:每秒钟产生的会话数

Session concurrency 并发会话数:服务器处理会话的时间越长,并发会话数越多

Data rate 数据速率:高会话数,高数据速率要求更多的内存

1.3 HAProxy工作模式:

mode http:客户端请求被深度分析后再发往服务器

mode tcp: 客户端与服务器之间建立会话,不检查第七层信息

mode health: 仅做健康状态检查,已经不建议使用

1.4 配置文件说明:

global部分:全局设置进程级别参数

default:为后续的其它部分设置缺省参数    缺省参数可以被后续部分重置

frontend:描述接收客户端侦听套字节集

backend:描述转发链接的服务器集

listen:把frontend和backend结合到一起的完整声明

 

vim /etc/haproxy/haproxy.cfg

###########全局配置#########

global

    log            127.0.0.1 local2         #日志输出配置,所有日志都记录在本机,通过local2输出

    chroot      /var/lib/haproxy          #chroot运行路径

    pidfile      /var/run/haproxy.pid    #pid存放的路径

    maxconn     4000                      #最大的连接数

    user             haproxy

    group           haproxy

    daemon                                    #以守护进程运行


###########默认配置#########

defaults

    mode           http                  #默认的模式mode {  tcp|http|health },tcp是4层,http是7层,health只返回OK

    log               global

    option          httplog             #日志类别,采用httplog

    option         dontlognull       #不记录健康检查日志信息

    option         http-server-close            #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式实现

    option   forwardfor   except 127.0.0.0/8

    option         redispatch     

    retries        3                              #3次连接失败就认为服务器不可用

    timeout http-request    10s        #默认http请求超时时间

    timeout queue             1m         #默认队列超时时间

    timeout connect           10s       #连接超时

    timeout client               1m        #客户端超时

    timeout server             1m        #服务器超时

    timeout http-keep-alive 10s      #默认持久连接超时时间

    timeout check             10s        #心跳监测超时

    maxconn                     3000     #最大连接数

 

###########统计页面配置#########

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的版本信息




###########frontend前端配置#########

#原配置文件说明

frontend  main *:5000

    acl url_static       path_beg       -i /static /images /javascript /stylesheets    #acl后面是规则名称,-i为忽略大小写,后面跟的是要访问的域名,如果访问这个域名就触发images等规则

    acl url_static       path_end       -i .jpg .gif .png .css .js


   use_backend static          if url_static  

   default_backend              app


#自定义配置文件

frontend  web 192.168.4.100:80               #定义前端的名称

   acl url_static     path_beg      -i /static    #匹配url的开头

   acl url_html      path_end      -i .html       #匹配url的结尾

   acl url_php       path_end      -i .php       #匹配.php的结尾

 

   use_backend  html-group     if url_html    #定义后端服务组(以html结尾)

   use_backend  php-group      if url_php     #定义后端服务组(以php结尾)

   default_backend         html-group             #默认后端服务组(仅IP)

backend html-group                    #后端服务组的具体的信息

    balance     roundrobin           #轮询调度算

    server  app101 192.168.4.101:80 check  

    server  app102 192.168.4.102:80 check

backend php-group

    balance     roundrobin

    server  app103 192.168.4.103:80 check

    server  app104 192.168.4.104:80 check

###########backend后端配置#########

backend static                     #backend起的名称,static作用域

    balance     roundrobin     #调度算法

    server      static 127.0.0.1:4331 check


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


listen webserver 0.0.0.0:80             #webserver:名称,允许所有通过80端口访问

    cookie SERVERID rewrite           #记录客户端访问网站服务器的cookie信息

    balance roundrobin                      #调度算法

    server  server44 192.168.4.44:80 cookie app44 check inter 2000 rise 2 fall 5

    server  server45 192.168.4.45:80 cookie app45 check inter 2000 rise 2 fall 5

    #后端服务器命名server44     cookie 为cookie命名app44

2 案例1普通LB集群

HAProxy服务器:RHEL7.2   IP:192.168.4.41

web:192.168.4.44 192.168.40.45

2.1 配置

[[email protected] ~]# yum -y install haproxy

[[email protected] ~]# vim /etc/haproxy/haproxy.cfg

#删除default以下的其它配置,添加如下配置

listen webserver 0.0.0.0:80     #webserver:名称  允许所有通过80端口访问

  cookie SERVERID rewrite    #记录客户端访问网站服务器的cookie信息

  balance roundrobin              #调度算法

  server web101 192.168.4.44:80 cookie app101 check inter 2000 rise 2 fall 5

  server web102 192.168.4.45:80 cookie app102 check inter 2000 rise 2 fall 5

  #后端服务器  cookie app101 为cookie命名

 

在defaults 最后一行添加  stats  uri  /admin

http://192.168.4.41/admin  是URL

去掉http://192.168.4.41 剩下的就是uri

也可以单独添加:

listen stats

   bind 0.0.0.0:1080  #监听端口

   stats refresh 30s   #统计页面自动刷新时间

   stats uri  /admin      #统计页面url

   stats realm Haproxy Manager #统计页面密码框上提示文本

   stats auth admin:admin          #统计页面用户名和密码设置

   stats hide-version                   #隐藏统计页面上HAProxy的版本信息

2.2 启动服务

[[email protected] ~]# systemctl start haproxy

[[email protected] ~]# systemctl enable haproxy

2.3 访问

http://192.168.4.100/admin  (根据配置文件)



以上是关于HAProxy的主要内容,如果未能解决你的问题,请参考以下文章

haproxy

HAProxy杂记

Haproxy-负载均衡

HAproxy配置

haproxy

HAProxy介绍