HAProxy介绍及相关实验

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

本节索引:

一、HAProxy介绍

二、HAProxy服务配置

三、实验:实现HAProxy反向代理

四、实验:实现根据url(uri算法)和客户端来源(hdr算法)进行调度

五、实验:实现基于cookie的会话绑定

六、实验:启用HAproxy统计接口

七、实验:Errorfile实现自定义错误页,状态码

 

一、HAPrxoy介绍

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

http的应用程序代理。

mode http:七层反向代理,受端口数量限制

mode tcp:四层反向代理,不受套接字文件数量限制

 

官方网站:

http://www.haproxy.org

http://www.haproxy.com

官方文档:

http://cbonte.github.io/haproxy-dconv/

 

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行

在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进

您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

 

HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受

内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更

好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,

在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做

更多的工作。

建议:生产环境运行在单进程模型下,便于分析,排查问题

 

二、HAProxy服务配置

程序环境:

主程序:/usr/sbin/haproxy

主配置文件:/etc/haproxy/haproxy.cfg

Unit file:/usr/lib/systemd/system/haproxy.service

 

配置段:

     global:全局配置段

进程及安全配置相关的参数

性能调整相关参数

Debug参数

用户列表

peers

proxies:代理配置段

defaults:为frontend, listen, backend提供默认配置;

fronted:前端,相当于nginx, server {}

backend:后端,相当于nginx, upstream {}

listen:同时拥前端和后端

 

简单的配置示例:

frontend web

                        bind *:80      

                        default_backend     websrvs

backend websrvs

                        balance roundrobin

                        server srv1 172.16.100.6:80 check

                        server srv2 172.16.100.7:80 check

 

 

global配置参数:

进程及安全管理:chroot, daemon,user, group, uid, gid

log:定义全局的syslog服务器;最多可以定义两个;

log <address> [len <length>] <facility> [max level [min level]]

 

nbproc <number>:要启动的haproxy的进程数量;

ulimit-n <number>:每个haproxy进程可打开的最大文件数;

 

性能调整:

maxconn <number>:设定每个haproxy进程所能接受的最大并发连接数;

Sets the maximum per-process number of concurrent connections to <number>.

总体的并发连接数:nbproc * maxconn

maxconnrate <number>:每个进程每秒种所能创建的最大连接数量;

Sets the maximum per-process number of connections per second to <number>.

maxsessrate <number>:每个进程每秒所能创建最大会话数

maxsslconn <number>:设定每个haproxy进程所能接受的ssl的最大并发连接数;

Sets the maximum per-process number of concurrent SSL connections to <number>.

 spread-checks <0..50, in percent>

 

三、实验:实现HAProxy反向代理

前期准备:

虚拟机4台

HAproxy192.168.30.10

node1192.168.30.17

node2192.168.30.27

Client:192.168.30.16

 

具体步骤:

HAProxy服务器操作:

yum install haproxy

修改配置文件

vim /etc/haproxy/haproxy.cfg

frontend main *:80

         default_backend  websrvs

 

backend websrvs

         balance roundrobin

         server websrv1 192.168.30.17:80 check          #check 健康性检查

         server websrv2 192.168.30.27:80 check

1

重启haproxy

systemctl restart haproxy

 

node1,node2开启http服务

[root@node1 ~]# systemctl start httpd

[root@node1 ~]# echo Backend Server 1 > /var/www/html/index.html

 

[root@node2 ~]# systemctl start httpd

[root@node2 ~]# echo Backend Server 2 > /var/www/html/index.html

 

客户端访问测试:

2

 

添加权重:

vim /etc/haproxy/haproxy.cfg

backend websrvs

    balance     roundrobin

    server  websrvs1 192.168.30.17:80 check weight 2

    server  websrvs2 192.168.30.27:80 check

重启HAProxy服务网

systemctl restart haproxy.service

 

访问测试:

3

 

四、实验:实现根据url(uri算法)和客户端来源(hdr算法)进行调度

实现uri算法

对同一url的访问请求都调度至同一个后端服务器

注意:如果HAProxy调度后端为缓存服务器,就要使用uri算法,且使用动态算法,一致性哈希

实验前期准备承接实现HAProxy反向代理中的环境

 

具体步骤:

修改配置文件

vim /etc/haproxy/haproxy.cfg

1

重启haproxy服务

systemctl restart haproxy.service

 

在node1,node2上分别创建http页面test1–test10

2

访问测试:

3

 

实现hdr算法

来自同一客户端的请求都调度至同一个后端服务器

修改配置文件

vim /etc/haproxy/haproxy.cfg

4

重启haproxy服务

systemctl restart haproxy.service

访问测试:

5

 

五、实验:实现基于cookie的会话绑定

前期准备:

虚拟机4台

HAproxy192.168.30.10

node1192.168.30.17

node2192.168.30.27

Client:192.168.30.16

 

具体步骤:

修改配置文件

vim /etc/haproxy/haproxy.cfg

1

重启haproxy服务

systemctl restart haproxy.service

访问测试:

重启服务前在server1与server2之间轮询调度,重启后将绑定在其中一台server中

2

注意:curl命令之间访问不能绑定cookie

 

 

六、实验:启用HAproxy统计接口

统计接口启用相关的参数:

  stats enable

启用统计页;基于默认的参数启用stats page;

                          – stats uri   : /haproxy?stats

                          – stats realm : “HAProxy Statistics”

                          – stats auth  : no authentication

                          – stats scope : no restriction

                                                    

    stats auth <user>:<passwd>

认证时的账号和密码,可使用多次;

 

     stats realm <realm>

认证时的realm;

 

        stats uri <prefix>

自定义stats page uri

 

      stats refresh <delay>

设定自动刷新时间间隔;

 

     stats admin { if | unless } <cond>

启用stats page中的管理功能

 

具体步骤:

只需在frontend或者backend中添加一行

stats enable

1

重启haproxy服务

systemctl restart haproxy.service

 

浏览器访问:http://192.168.30.10/haproxy?stats

2

避免状态页被其他客户端访问:

(1)修改状态页监听端口

3

(2)修改状态页url

4

(3)添加安全认证

5

6

 

启用state page中的管理功能:

可利用此功能实现脚本执行发布,网上搜索基于haproxy的发布脚本

7

再次访问:

8

 

七、实验:Errorfile实现自定义错误页,状态码

修改前端响应报文及后端请求报文头部信息

前端响应报文删除一个头部信息

1

修改前的报文头部信息:

2

访问测试

3

前端响应报文添加一个头部信息

4

访问测试

5

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/102826

评论列表(1条)

  • ely
    ely 2018-07-14 15:18

    写的不错

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code