一站式带你深入了解HAProxy


前言

本文相关连接如下:

负载均衡出现的背景:
由于业务访问量和数据流量的日益增加,‌传统单一服务器已经无法承担,‌而升级单一服务器硬件会带来成本的增加、‌资源的浪费、‌以及扩展能力不足等问题。‌为了解决这些问题,‌更有效的方式是将单一服务器的计算任务分担到多台低配置服务器上进行处理,‌这就产生了负载均衡设备。‌
用户将业务请求发送到负载均衡设备,‌再由负载均衡设备按需分发到后端服务器,‌在基本不改变网络架构的基础上,‌扩展了网络设备接入能力。‌这种技术不仅提供了廉价有效透明的方法来扩展网络设备和服务器的带宽、‌增加吞吐量、‌加强网络数据处理能力、‌提高网络的灵活性和可用性


一、HAProxy是什么?

  1. HAProxy是法国开发者威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件
  2. 是一款具备高并发(万级以上以、高性能的TCP和HTTP负载均衡器
  3. 支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计

1.1 haproxy的基本配置信息

HAProxy的配置文件haproxy.cfg由两大部分组成,分别是:
globa:全局配置段

  • 进程及安全配置相关的参数
  • 性能调整相关参数
  • Debug参数

proxies:代理配置段

  • defaults:为frontend,backend,listen提供默认配置
  • frontend:前端,相当于nginx中的server)
  • backend:后端,相当于nginx中的upstream
  • listen:同时拥有前端和后端配置,配置简单,生产推荐使用

二、haproxy配置详解过程

2.1 全局配置(global)

2.1.1 多进程及其多线程

代码如下(示例):

# 下载软件
[root@haproxy ~]# dnf install haproxy -y
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service

需要将图片中的注释打开
在这里插入图片描述
或者
在这里插入图片描述
多线程

第一个进程使用第一个核心,第二天进程使用第二个核心

在这里插入图片描述
多进程
在这里插入图片描述

2.2.2自定义haproxy日志

查看志名称
在这里插入图片描述
编辑日志文件

[root@haproxy ~]# vim /etc/rsyslog.conf 
[root@haproxy ~]# systemctl restart rsyslog.service

在这里插入图片描述
在这里插入图片描述

2.2 Proxies配置 代理配置段

Proxies配置-frontend(前端)

Proxies配置-backemd (后端)

  • 定义一组后端服务器,backend服务器将被frontend进行调用。
  • 注意:backend的名称必须唯一,并且必须在listen或frontend中事先定义才可以使用,否则服务无法
    启动

Proxies配置-listen (同时拥有前端和后端)

代码如下:

[root@haproxy ~]# vim /etc/httpd/conf/httpd.conf

[root@haproxy ~]#vim /etc/haproxy/haproxy.cfg

更改端口
在这里插入图片描述
更改配置
在这里插入图片描述

2.3 网页重定向

需要将另外两个服务器下线,当找不到访问的服务器的时候,网页重定向到百度

在这里插入图片描述
重启服务:[root@haproxy ~]# systemctl restart haproxy.service

当用浏览器访问100,10或20服务器时,网页将重定向到百度网页
注意:没配dns,因此需要配本地解析


2.4 socat工具进行热处理

socat工具解释:

  • 对服务器动态权重和其它状态可以利用socat工具进行调整,Socat是Linux下的一个多功能的网络工具,名字来由是Socket CAT,相当于netCAT的增强版。Socat的主要特点就是在两个数据流之间建立双向通道,且支持众多协议和链接方式。如IP、TCP、UDP、IPv6、Socket文件等

  • 安装socat工具目的:为了动态调整haproxy参数

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service

[root@haproxy ~]# vim /etc/rsyslog.conf
[root@haproxy ~]# systemctl restart rsyslog.service

提权
在这里插入图片描述
提权后
在这里插入图片描述
需关闭独立日志文件
在这里插入图片描述
在这里插入图片描述
配置

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service

在这里插入图片描述

针对多进程处理方法:

  • 如果开启多进程那么我们在对进程的sock文件进行操作时其对进程的操作时随机的

  • 如果需要指定操作进程那么需要用多soct文件方式来完成

  • 处理多进程使用多个文件来保证你处理的是哪个文件

在这里插入图片描述每个进程会有单独的sock文件进行单独管理

在这里插入图片描述


三 haproxy算法配置

此篇文章只简单做了算法的配置过程及其运行结果,若想了解更多详情,
算法详情请移步:
请点击我

静态算法

3.1 static-rr

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service

在这里插入图片描述
不可更改,不能进行热处理
在这里插入图片描述

3.2 first

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service

为了更好的看效果,需要在两台主机上进行死循环,并设置最大连接数为1
在这里插入图片描述
效果呈现:
运行代码:

[root@webserver1 ~]# while true;do curl 172.25.254.100;done

[root@webserver22 ~]# while true;do curl 172.25.254.100;done

在这里插入图片描述

动态算法

此篇文章只简单做了算法的配置过程及其运行结果,若想了解更多关于动态算法的相关知识,
算法详情请移步:
请点击我

3.3 roundrobin

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service


所需配置见图红框内,需要放开注释
所需配置见图红框内,需要放开注释

权重都是2的情况下,因为负载优先,所以两个主机轮流上线

在这里插入图片描述

3.4 leastconn

打在链接数少的主机上,先看链接数,后看权重

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service


在这里插入图片描述

其他算法

此篇文章只简单做了算法的配置过程及其运行结果,若想了解更多详情,
算法详情请移步:
请点击我

其它算法即可作为静态算法,又可以通过选项成为动态算法

3.5 source算法

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service


在这里插入图片描述
在这里插入图片描述


3.6 map-base取模法

map-based算法解析图

在这里插入图片描述
在这里插入图片描述
取余过程:使用bc命令

在这里插入图片描述
在这里插入图片描述
配置

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service

在这里插入图片描述

3.7 一致性hash

在这里插入图片描述

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service

在这里插入图片描述
两个浏览器,其中只有hash到一个服务器上,在服务器正常的情况下,就只会访问那个服务器
在这里插入图片描述

3.8 uri

语法解释

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

左半部分:/<path>;<params>
整个uri:/<path>;<params>:?<query>#<frag>

scheme:协议http
user:用户
password:密码
host:主机名
port:端口
path:文件路径/index.html

params:向服务器传递的指令,如Search
?代表
params:搜索的字段
frag:片段(在文件里面做一个索引,快速定位你点击的片段)

需在服务器上添加网页
在这里插入图片描述
uri不变,访问的地址就不变
在这里插入图片描述

3.9 uri_param

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service

在这里插入图片描述
搜索同一个,会调度到同一个服务器上
在这里插入图片描述

3.10 hdr

配置:

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service

在这里插入图片描述
验证:
在这里插入图片描述
在这里插入图片描述

HAProxy状态页

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service

启用状态页
在这里插入图片描述
验证;
在这里插入图片描述
在这里插入图片描述


haproxy 了解到这就结束了,如需深造的宝子们请移步haproxy高级配置及其功能,
若想了解更多算法的相关知识,请下一场:超越自我——带你学haproxy算法一遍过!!!


祝我们活到老,学到老!!!

本文相关连接如下:

本文相关连接如下:

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值