前言
本文相关连接如下:
- 如果想深入了解haproxy算法的相关知识,请点击:超越自我——带你学haproxy算法一遍过!!!
- 如果想深入探讨haproxy的高级用法,请移步:进阶!haproxy高级功能与配置
负载均衡出现的背景:
由于业务访问量和数据流量的日益增加,传统单一服务器已经无法承担,而升级单一服务器硬件会带来成本的增加、资源的浪费、以及扩展能力不足等问题。为了解决这些问题,更有效的方式是将单一服务器的计算任务分担到多台低配置服务器上进行处理,这就产生了负载均衡设备。
用户将业务请求发送到负载均衡设备,再由负载均衡设备按需分发到后端服务器,在基本不改变网络架构的基础上,扩展了网络设备接入能力。这种技术不仅提供了廉价有效透明的方法来扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性
一、HAProxy是什么?
- HAProxy是法国开发者威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件
- 是一款具备高并发(万级以上以、高性能的TCP和HTTP负载均衡器
- 支持基于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算法一遍过!!!
祝我们活到老,学到老!!!
本文相关连接如下:
本文相关连接如下:
- 如果想深入了解haproxy算法的相关知识,请点击:超越自我——带你学haproxy算法一遍过!!!
- 如果想深入探讨haproxy的高级用法,请移步:进阶!haproxy高级功能与配置