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)
wangxczwangxcz
上一篇 2018-07-13 14:27
下一篇 2018-07-13 20:54

相关推荐

  • 磁盘存储个文件管理

    设备文件I/O Ports:I/O设备地址一切接文件:调用函数open(), read(), write(), close()设备类型:块设备:block,存取单位”块”,磁盘字符设备:char,存取单位”字符”,键盘设备文件:关联至一个设备驱动程序,进而都够跟与之对应硬件设备进行通信设备号码:主设备号:标识设备类型次设备号:标识同一类型下的不同设备mkno…

    2018-04-25
  • linux中cat、more、less命令区别详解

    众所周知linux中命令cat、more、less均可用来查看文件内容,主要区别有:
    cat是一次性显示整个文件的内容,还可以将多个文件连接起来显示,它常与重定向符号配合使用,适用于文件内容少的情况;
    more和less一般用于显示文件内容超过一屏的内容,并且提供翻页的功能。more比cat强大,提供分页显示的功能,less比more更强大,提供翻页,跳转,查找等命令。而且more和less都支持:用空格显示下一页,按键b显示上一页。下面详细介绍这3个命令。

    2018-04-15
  • 自定义linux系统

    假如生活欺骗了你,不要悲伤不要心急,相信吧,快乐的日子终将来临!–海子

    Linux笔记 2018-03-26
  • 4.8整理

    根据教学顺序整理

    Linux笔记 2018-04-08
  • 权限管理

    权限管理 普通权限 通过划分为三种人来管理,所有者u,所属组g,其他人o,所有人a 文件 删除文件用文件所在文件夹的写权限来决定 读写权限root不受控制,执行受控制 对于目录没有执行权限,无法进入目录,无法查看目录内文件属性,无法查看文件内容 执行权限是基础权限没有执行读写权限无用 程序要运行,所在目录要有执行权限 普通用户无法更改文件的所有者,要更改文件…

    Linux笔记 2018-03-31
  • nginx

    nginx(web server,web reverse proxy) http事务:request <—-> response request: <method> <URL> <version> <HEADERS> … <body> response: <…

    2018-06-29

评论列表(1条)

  • ely
    ely 2018-07-14 15:18

    写的不错