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


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

查看所有标签

猜你喜欢:

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

Clean Architecture

Clean Architecture

Robert C. Martin / Prentice Hall / 2017-9-20 / USD 34.99

Practical Software Architecture Solutions from the Legendary Robert C. Martin (“Uncle Bob”) By applying universal rules of software architecture, you can dramatically improve developer producti......一起来看看 《Clean Architecture》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

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

HEX HSV 互换工具