HAProxy介绍及相关实验

栏目: 服务器 · 发布时间: 6年前

内容简介:http的应用程序代理。mode 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台

HAproxy 192.168.30.10

node1 192.168.30.17

node2 192.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

HAProxy介绍及相关实验

重启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

客户端访问测试:

HAProxy介绍及相关实验

添加权重:

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

访问测试:

HAProxy介绍及相关实验

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

实现uri算法

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

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

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

具体步骤:

修改配置文件

vim /etc/haproxy/haproxy.cfg

HAProxy介绍及相关实验

重启haproxy服务

systemctl restart haproxy.service

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

HAProxy介绍及相关实验

访问测试:

HAProxy介绍及相关实验

实现hdr算法

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

修改配置文件

vim /etc/haproxy/haproxy.cfg

HAProxy介绍及相关实验

重启haproxy服务

systemctl restart haproxy.service

访问测试:

HAProxy介绍及相关实验

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

前期准备:

虚拟机4台

HAproxy 192.168.30.10

node1 192.168.30.17

node2 192.168.30.27

Client: 192.168.30.16

具体步骤:

修改配置文件

vim /etc/haproxy/haproxy.cfg

HAProxy介绍及相关实验

重启haproxy服务

systemctl restart haproxy.service

访问测试:

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

HAProxy介绍及相关实验

注意: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

HAProxy介绍及相关实验

重启haproxy服务

systemctl restart haproxy.service

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

HAProxy介绍及相关实验

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

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

HAProxy介绍及相关实验

(2)修改状态页url

HAProxy介绍及相关实验

(3)添加安全认证

HAProxy介绍及相关实验

HAProxy介绍及相关实验

启用state page中的管理功能:

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

HAProxy介绍及相关实验

再次访问:

HAProxy介绍及相关实验

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

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

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

HAProxy介绍及相关实验

修改前的报文头部信息:

HAProxy介绍及相关实验

访问测试

HAProxy介绍及相关实验

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

HAProxy介绍及相关实验

访问测试

HAProxy介绍及相关实验

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

高效团队开发

高效团队开发

[日] 池田尚史、[日] 藤仓和明、[日] 井上史彰 / 严圣逸 / 人民邮电出版社 / 2015-7 / 49.00

本书以团队开发中所必需的工具的导入方法和使用方法为核心,对团队开发的整体结构进行概括性的说明。内容涉及团队开发中发生的问题、版本管理系统、缺陷管理系统、持续集成、持续交付以及回归测试,并且对“为什么用那个工具”“为什么要这样使用”等开发现场常有的问题进行举例说明。 本书适合初次接手开发团队的项目经理,计划开始新项目的项目经理、Scrum Master,以及现有项目中返工、延期问题频发的开发人......一起来看看 《高效团队开发》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具