Linux7层负载均衡-Haproxy

news2025/1/15 20:49:36

Linux7层负载均衡

概述:
是一款高性能的负载均衡软件。
因为其专注于负载均衡这一些事情,
因此与nginx比起来在负载均衡这件事情上做更好,更专业。

特点:
•支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富。
•支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求。
•性能非常优秀,基于事件驱动的链接处理模式及单进程处理模式(和Nginx类似)让其性能卓越。
•拥有一个功能出色的监控页面,实时了解系统的当前状况。
•功能强大的ACL支持,给用户极大的方便。

处理模式:
单进程处理模式
所有客户端连接全部都由同一个服务进程来处理,目标就是等待连接,来一个分配一个,主要消耗cpu,

多线程处理模式
多线程模式消耗内存,会限制并发而且多线程需要进程间通信,也会消耗相当多的cpu资源

实验例子:
拓扑:
在这里插入图片描述
4台linux,做好域名解析
Client
192.168.122.1/24 (真实机做客户端)
HAproxy
192.168.122.254/24
web1
192.168.122.10/24
web2
192.168.122.20/24

1,HTML A & HTML B 创建测试页面
域名解析

#systemctl stop firewalld && setenforce 0
#ntpdate 时间服务器ip(略)
# yum install httpd

准备页面
2.安装haproxy,本次使用yum源进行安装,也可进行编译安装

# yum install epel-release -y 
# yum install haproxy -y

3.配置HAproxy

vim /etc/haproxy/haproxy.cfg 
global
	log 127.0.0.1 local3 info
	maxconn 4096
	uid nobody
	gid nobody
	daemon
	nbproc 1
defaults
	log		   global
	mode	   http
	maxconn 2048
	retries 	3
	option	redispatch
	stats	uri  /haproxy
	stats auth          qianfeng:123
	contimeout	5000
	clitimeout	    50000
	srvtimeout	    50000
	
	
frontend http-in
	bind 0.0.0.0:80
	mode http
	log global
	option httplog
	option httpclose
     acl html url_reg  -i  \.html$
     use_backend html-server if  html
     default_backend html-server

backend html-server
	mode http
	balance roundrobin
	option httpchk GET /index.html
	cookie SERVERID insert indirect nocache
	server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
	server html-B web2:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5

4、配置信息详细解释

gloab:全局配置
log:日志配置
maxconn:最大连接限制(优先级低)
uid:用户
gid:组用户
deamon:守护进程运行
nbproc :haproxy进程数
defaults:针对(listen和backend块进行设置没如果块中没设置,则使用默认设置)默认配置
log:日志使用全局配置
mode:模式7层LB
maxconn:最大连接数(优先级中)
retries:健康检查。3次连接失败就认为服务不可用
option:服务不可用后的操作,重定向到其他服务器
stats:状态模块功能开启
stats auth:状态模块认证(用户名qianfeng密码123)
contimeout	: 定义haproxy将客户端请求转发至后端服务器,所等待的超时时长
clitimeout:haproxy作为客户,和后端服务器之间空闲连接的超时时间,到时候发送fin指令
srvtimeout	:haproxy作为服务器,和用户之间空闲连接的超时时间,到时候发送fin指令
frontend:前端配置块。面对用户侧
bind:面对用户监听地址和端口
mode:http模式的LB
log:日志使用全局配置

option httplog:默认日志格式非常简陋,仅包括源地址、目标地址和实例名称,而“option httplog参数将会使得日志格式变得丰富许多,其通常包括但不限于HTTP请求、连接计时器、会话状态、连接数、捕获的首部及cookie、“frontend”、“backend”及服务器名称,当然也包括源地址和端口号等。

option http close: 每次请求完毕后,关闭http通道

 acl html url_reg  -i  \.html$  :1. 访问控制列表名称html。规则要求访问以html结尾的url时
 use_backend html-server if  html   :2.如果满足acl html规则,则推送给后端服务器 html-server
 default_backend html-server  3:默认的后端服务器是 html-server

backend html-server:后端服务器名称为  html-server
mode http:模式为7层代理
balance roundrobin:算法为轮训
option httpchk GET /index.html     :允许用http协议检查server 的健康
cookie SERVERID insert indirect nocache:轮询的同时,根据插入的cookie SERVERID  的值来做会话保持,将相同的用户请求,转发给相同的真实服务器。
server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5:cookie 3 服务器ID,避免rr算法将客户机请求转发给其他服务器 ,对后端服务器的健康状况检查间隔为2000毫秒,连续2次健康检查成功,则认为是有效的,连续5次健康检查失败,则认为服务器宕机
server html-B web2:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5

5、启动haproxy

systemctl start haproxy.service

6.测试结果
linux客户端

[root@client ~]# elinks --dump http://haproxy
   web1
[root@client ~]# elinks --dump http://haproxy
   web2
[root@client ~]# elinks --dump http://haproxy
   web1
[root@client ~]# elinks --dump http://haproxy
   web2

7.测试HAproxy状态
客户端浏览器输入http://haproxy地址/haproxy

实验案例2:
拓扑:
在这里插入图片描述
1、环境准备:
Client
192.168.122.1/24 (真实机做客户端)
HAproxy
192.168.122.254/24
HTML A
192.168.122.10/24
HTML B
192.168.122.20/24
PHP A
192.168.122.30/24
PHP B
192.168.122.40/24
2、HTML A & HTML B准备
yum install httpd
分别创建测试页面 index.html ,开启服务
3、PHP A & php B 准备
yum install httpd php
分别创建测试页面 index.php ,开启服务
4、安装HAproxy
tar xf haproxy-1.4.20.tar.gz
cd haproxy-1.4.20
make TARGET=linux26 PREFIX=/usr/local/haproxy install
5、生成HAproxy配置文件
cd /usr/local/haproxy/
mkdir conf logs
cd conf/
6、修改配置文件

vim haproxy.cfg
######## 全局配置信息 #########
######参数是进程级的,通常和操作系统相关#######

	global
		log 127.0.0.1 local3 info	   #日志服务器
		maxconn 4096				   #最大连接数
		uid nobody					   #用户身份
		gid nobody					   #组身份
		daemon						   #守护进程方式后台运行
		nbproc 1						   #工作进程数量
		
####### ###########默认设置 ###################
#####这些参数是配置 frontend,backend,listen 组的 ###########		
	defaults                    #这些参数可以被利用配置到frontend,backend,listen组件   
		log		   global
		mode	   http	    #工作模式 http ,tcp 是 4 层,http是 7 层	
		maxconn 2048		#最大连接数
		retries 	3			    #3 次连接失败就认为服务器不可用
		option	redispatch	#如果 cookie 写入了 serverId 而客户端不会刷新 cookie,当serverId 对应的服务器挂掉后,强制定向到其他健康的服务器
		stats	uri  /haproxy	#使用浏览器访问 http://192.168.122.254/haproxy,可以看到服务器状态
		stats auth           wing:123     #用户认证,客户端使用elinks浏览器的时候不生效
		contimeout	5000          #连接超时时间,单位毫秒ms
		clitimeout	    50000        #客户端超时
		srvtimeout	    50000        #服务器超时
		
		
	frontend http-in
		bind 0.0.0.0:80                           #监听端口
		mode http
		log global
		option httplog			                 #日志类别 http 日志格式
		option httpclose		                 #打开支持主动关闭功能,每次请求完毕后主动关闭http通道	,ha-proxy不支持keep-alive,只能模拟这种模式的实现	
	    acl php url_reg  -i  \.php$			 #acl <ACL名字>  <类型>  <大小写>  <规则>
	    acl html url_reg  -i  \.html$		  	 #use_backend  <服务器组>  if  <ACL名字>
	    use_backend php-server if  php
	    use_backend html-server if  html
	    default_backend html-server		 #默认使用的服务器组
	

	backend php-server
		mode http
		balance roundrobin			            #负载均衡的方式
		option httpchk GET /index.php		#健康检查
		cookie SERVERID insert indirect nocache	#客户端的 cookie 信息,允许插入serverid到cookie中,此处cookie号不同
		server php-A 192.168.122.30:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5
		server php-B 192.168.122.40:80 weight 1 cookie 2 check inter 2000 rise 2 fall 5
		#cookie 1 标识 serverid 为 1
		#check inter 2000          检测心跳频率
		#rise 2     2 次正确认为服务器可用
		#fall 5      5 次失败认为服务器不可用
	
	backend html-server
		mode http
		balance roundrobin
		option httpchk GET /index.html
		cookie SERVERID insert indirect nocache
		server html-A 192.168.122.10:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
		server html-B 192.168.122.20:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5		

7、启动HAproxy
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg

8、查看HAproxy状态
firefox http://localhost/haproxy
9、在客户端访问 HAproxy 测试
elinks –dump http:// 192.168.122.254
elinks –dump http:// 192.168.122.254/index.html
elinks –dump http:// 192.168.122.254/index.php

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/74463.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【KNN分类】基于模拟退火优化KNN、蝗虫算法优化KNN实现数据分类附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

web课程设计网页制作:基于html实现传统文化壁画手工艺带psd设计图(15页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【Day3】每日学Java--》详解java中的static成员

大家好&#xff0c;我是良辰丫&#xff0c;今天我和大家分享的是java中的static成员&#xff0c;static说难不难&#xff0c;说简单也不简单&#xff0c;主要是细节&#xff0c;很多情况下&#xff0c;你使用了static&#xff0c;却不知道为什么会报错&#xff0c;嘿嘿嘿&#…

【推免攻略】五.2022年北交计算机学院夏令营、预推免保研经验

欢迎订阅本专栏:《北交计算机保研经验》 订阅地址:https://blog.csdn.net/m0_38068876/category_10779337.html 【推免攻略】一.北交计算机学院夏令营、预推免攻略【推免攻略】二.联系导师的前期准备及注意事项【推免攻略】三.2020年北交计算机学院夏令营、预推免保研经验【推…

Java之网络编程

目录 1.1 概述 1.2 网络通信的要素 1.3 IP 1.4 端口 1.5 通信协议 1.6 TCP &#xff08;1&#xff09;消息发送 &#xff08;2&#xff09;文件上传 1.7 UDP &#xff08;1&#xff09;发短信 &#xff08;2&#xff09;聊天&#xff08;循环发送-循环接收&#xff09;…

ftp共享盘挂载——curlftpfs挂载FTP服务器

通过curlftpfs来将远程ftp某个目录映射到本地目录&#xff0c;可以达到多台机器共享同一目录的效果。我们是用它来共享脚本的。curlftpfs是通过yum本地源安装的&#xff0c;需要epel支持&#xff0c;需要提前弄好。 一、 安装FTP服务 在联网环境下安装epel yum -y install epel…

唯亚威FI-60光纤识别器

光纤识别器可以轻松地识别光信号&#xff0c;而无需断开光缆或中断网络交通。也可以转换为光功率计&#xff08;OPM&#xff09;。VIAVI FI-60 LFI能够使用户轻松检测光信号&#xff0c;而无需断开光缆或中断网络交通。FI-60 LFI还包括了独特的VIAVI SafeChekTM &#xff0c;以…

精华推荐 |【深入浅出Spring原理及实战】「原理分析专题」从源码和架构设计角度深入剖析BeanPostProcessor的原理和运作机制

&#x1f343; 前提概要 Spring具有很好的扩展性&#xff0c;但是这个扩展它的这个扩展性体现在哪里呢&#xff1f;而我们要说的BeanPostProcessor就是对Spring扩展性优秀的表现之一。 &#x1f343; BeanPostProcessor的作用 简单的说就是BeanPostProcessor提供了初始化前后回…

Qt扫盲-QString使用总结

QString使用总结一、概述二、初始化字符串1、极速版2、原理版三、操作字符串1、极速版1. 增加2. 删除3. 修改4. 插入5. 转换2、原理版四、查询字符串五、字符串格式转换六、Null 字符串和 Empty 字符串的区别七、字符串参数格式化八、更高效的字符串构造九、最大大小和出现内存…

疫情之下逆势进阶高级测试拿下20k,看我教你打一场翻盘局...

偶然跟同事交流工作、学习的时候&#xff0c;聊起了近况以及行业的变化&#xff0c;如果说回到三年前&#xff0c;疫情还未影响太深的时候&#xff0c;你会做什么&#xff1f; 本来当时是当玩笑话来问了&#xff0c;以为回答会是一注决定命运的彩票&#xff0c;正当我这样想时…

夏季出汗多中医如何调理

夏季出汗多是什么原因身体哪些方面出了问题?出汗多怎么办呢如何调理?夏季出汗看似是一种很正常的现象&#xff0c;但是如果说出汗过于多可能是身体出现了异常。夏季出汗多的主要原因是气虚&#xff0c;主要是补气固表。在夏天&#xff0c;由于天气炎热&#xff0c;人体出汗过…

随着多点 DMALL 全面 To B 转型

随着多点 DMALL 全面 To B 转型&#xff0c;为越来越多的 B 端客户提供零售全渠道解决方案&#xff0c;需要具备在多云部署环境下提供更具性价比、可复用的大数据底层基座和平台工具链。我们也终于等到了一个契机&#xff0c;彻底甩开历史包袱&#xff0c;设计搭建存算分离、轻…

Git安装和使用

1.工具&#xff1a;Git&#xff0c;下载链接&#xff1a;Releases git-for-windows/git GitHub 下载完成了之后可以看到再程序处可以或者鼠标右击可以看到三个东西&#xff0c;分别是&#xff1a; Git Bash&#xff1a;推荐使用&#xff0c;使用命令风格类似于Linux命令&am…

PyOpenGL安装

PyOpenGL安装 学校图形学大作业&#xff0c; 之前要求是MFC和C &#xff0c; 但是vs mfc c opengl的环境实在是配置的吐血了… 于是润来搞PyOpenGL玩一玩 参考网上经验贴做的 我新建了一个虚拟环境 下载whl文件 我的虚拟环境是python3.7&#xff0c;于是下载下面指出来的两个…

superset vs Tableau

superset the only thing i need to know is how to install superset. it’s difficult to install ?? https://superset.apache.org/docs/intro https://flask-appbuilder.readthedocs.io/en/latest/installation.html how to use superset ? superset is a modern …

Ubuntu下基于Anaconda3 配置任意版本tensorflow和opencv的通用方法

参考 Ubuntu下基于Anaconda3 配置任意版本tensorflow和opencv的通用方法 - 云社区 - 腾讯云 在Github上利用顶会上深度模型时经常会被tensorflow和opencv的版本问题困扰&#xff0c;比如博主最近遇到的需求&#xff1a; 安装更高的版本一般没问题&#xff0c;下面介绍一种配置…

MATLAB应用1——MATLAB傅里叶函数自行封装

主程序&#xff1a; % eximportdata(data3.txt); tx regexp(ex{1}, \s, split);%按照空格分隔字符串,成为单个cell yxstr2double(tx); plot(yx); wwyx(2500:9000)-2055; Fyz_fft(ww,1000); 傅里叶封装函数&#xff1a; function Fyz_fft(y,Fs) % Demon: % Fs 128; …

如何理解UML2.5.1(03篇)

下面先简单列举一下subsets和redefines的特点&#xff1a; 关联端点具有标识subsets表明subsets一端的对象集合是被subsets一端的对象集合的子集。此时&#xff0c;subsets一端的类与被subsets一端的类之间必须存在继承关系。同时&#xff0c;subsets一端的角色名一定与被subse…