Haproxy负载均衡集群

news2024/11/28 20:58:02

目录

一、HAPorxy简介

二、HAPorxy优点

三、理解四层和七层负载均衡

四、HAProxy与LVS的区别

五、使用Haproxy搭建web群集

1、部署2台web服务器

2、编译安装Haproxy

3、客户端访问测试

 六、总结

1、HTTP请求的两种方式

2、haproxy配置文件重要参数说明


一、HAPorxy简介

       HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。

二、HAPorxy优点

免费开源、可靠性和稳定性非常好。

HAProxy可以处理数据可达10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom's 10GbE NICs (Myri-10G PCI-Express),这个数值作为软件级负载均衡器是相当惊人的;

HAProxy支持虚拟主机。

HAProxy的支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。

HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡。

HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种:

roundrobin:表示简单的轮询

static-rr:表示根据权重

leastconn:表示最少连接者先处理

source:表示根据请求源IP

ri:表示根据请求的URI

rl_param:表示根据请求的URl参数

hdr(name):表示根据HTTP请求头来锁定每一次HTTP请求

rdp-cookie(name):表示根据据cookie(name)来锁定并哈希每一次TCP请求。

三、理解四层和七层负载均衡

       四层就是基于IP+端口的负载均衡;通过虚拟IP+端口接收请求,然后再分配到真实的服务器;四层交换机主要分析IP层及TCP/UDP层,实现四层流量负载均衡。例子:LVS,F5。

       七层就是基于URL等应用层信息的负载均衡;通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器。七层交换机除了支持四层负载均衡以外,还有分析应用层的信息,如HTTP协议URI或Cookie信息。例子:  haproxy,MySQL Proxy。

四、HAProxy与LVS的区别

LVS是基于Linux操作系统的软负载均衡,HAProxy是基于第三方应用的软负载均衡。

LVS工作在4层,HAProxy工作在4层和7层。

LVS使用ip负载均衡技术,HAProxy使用TCP和HTTP应用的负载均衡。

LVS处理性能高于HAProxy处理性能,LVS检测方式少于HAProxy检测方式。

五、使用Haproxy搭建web群集

实验环境:

Haproxy负载均衡器:192.168.80.3/24

Nginx1:192.168.80.7/24

Nginx2:192.168.80.8/24

客户端:192.168.80.44/24

1、部署2台web服务器

第一台nginx服务器(192.168.80.7/24)

1、#关闭防火墙
[root@web1 ~]# systemctl stop firewalld
[root@web1 ~]# setenforce 0
 ​
2、#配置nginx的yum仓库在线源
[root@web1 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx-stable
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
 ​
3、#yum安装nginx软件包,查看nginx的版本
[root@web1 ~]# yum install nginx -y 
[root@web1 ~]# nginx -v
 ​
4、#查看配置文件,找到站点目录位置
[root@web1 ~]# vim /etc/nginx/nginx.conf    //查看nginx配置文件
......
include /etc/nginx/conf.d/*.conf;     //可以看到在/etc/nginx/conf.d/目录下还有配置文件
 ​
[root@web1 ~]# cd /etc/nginx/conf.d/  
[root@web1 conf.d]# ls
default.conf 
[root@web1 conf.d]# vim default.conf      //该文件中是Nginx的默认配置
......
    location / {
        root   /usr/share/nginx/html;     //站点目录,即首页文件的默认存放目录
        index  index.html index.htm;
    }
 ​
 ​
5、#切换到站点目录,编写站点文件
[root@web1 conf.d]# cd /usr/share/nginx/html
[root@web1 html]# vim index.html
<html>
<body>
<h1>I love spring!</h1> 
<img src="spring.jpg" />
</body>
</html>
 ​
6、#启动nginx服务
[root@web1 html]# systemctl start nginx
[root@web1 html]# systemctl enable nginx
[root@web1 html]# ss -ntap|grep nginx
 ​
浏览器访问查看 http://192.168.80.7/

第二台nginx服务器(192.168.80.8/24)

和第一台配置步骤相同

2、编译安装Haproxy

#关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
 ​
#安装依赖包
[root@localhost ~]# yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
 ​
#解压依赖包,编译安装haproxy
[root@localhost ~]# uname -r     //查看内核参数
3.10.0-693.el7.x86_64
[root@localhost ~]# cd /opt/     //将Haproxy安装包传到/opt目录下
[root@localhost opt]# ls
haproxy-1.5.19.tar.gz  rh
[root@localhost opt]# tar zxvf haproxy-1.5.19.tar.gz 
[root@localhost opt]# cd haproxy-1.5.19/
[root@localhost haproxy-1.5.19]# make TARGET=linux2628 ARCH=x86_64    //编译
[root@localhost haproxy-1.5.19]# make install      //安装
 ​
######################### 参数说明  #############
TARGET=linux26    #内核版本
#使用uname -r查看内核,如: 2.6.18-371.e15,此时该参数用TARGET=linux26; kernel大于2.6.28的用TARGET=linux2628
 ​
ARCH=x86_64    #系统位数,64位 系统

Haproxy服务器配置:

[root@localhost haproxy-1.5.19]# mkdir /etc/haproxy    #创建配置文件的目录
[root@localhost haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/   #将模板文件复制到配置文件目录
[root@localhost haproxy-1.5.19]# cd /etc/haproxy/
[root@localhost haproxy]# ls
haproxy.cfg
[root@localhost haproxy]# vim haproxy.cfg      #修改配置文件
 ​
global  #全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关。
--4~5行--修改,定义haproxy日志输出设备和日志级别,local0为日志设备,默认存放到系统日志
         log /dev/log   local0 info       #修改
         log /dev/log   local0 notice     #修改
         #log loghost    local0 info
         maxconn 4096     #每个进程最大连接数,需考虑"ulimit -n"限制,推荐使用10240
--8行--注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉。
         #chroot /usr/share/haproxy
         uid 99      #用户UID
         gid 99      #用户GID
         daemon      #守护进程模式
         nbproc 1    #添加,设置并发进程数,建议与当前服务器CPU核数相等或为其2倍
 ​
defaults    #配置默认参数,这些参数可以被用到Listen,frontend,backend组件     
         log     global         #引入global定义的日志格式
         mode    http           #模式为http(7层代理http,4层代理tcp)
         option  httplog        #日志类别为http日志格式
         option  dontlognull    #不记录健康检查日志信息
         retries 3          #检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
         redispatch         #当服务器负载很高时,自动结束当前队列处理比较久的连接
         maxconn 2000       #最大连接数,“defaults”中的值不能超过“global”段中的定义
         #contimeout 5000          #设置连接超时时间,默认单位是毫秒
         #clitimeout 50000         #设置客户端超时时间,默认单位是毫秒
         #srvtimeout 50000         #设置服务器超时时间,默认单位是毫秒
         timeout http-request 10s  #默认http请求超时时间
         timeout queue 1m        #默认队列超时时间
         timeout connect 10s     #默认连接超时时间,新版本中替代contimeout,该参数向后兼容
         timeout client 1m       #默认客户端超时时间,新版本中替代clitimeout,该参数向后兼容
         timeout server 1m       #默认服务器超时时间,新版本中替代srvtimeout,该参数向后兼容
         timeout http-keep-alive 10s      #默认持久连接超时时间
         timeout check 10s       #设置心跳检查超时时间
listen   webcluster 0.0.0.0:80   #haproxy实例状态监控部分配置,定义一个名为webcluster的应用
         option httpchk GET /index.html 
         balance roundrobin      #负载均衡调度算法使用轮询算法roundrobin
         server inst1 192.168.80.7:80 check inter 2000 fall 3  #定义在线节点
         server inst2 192.168.80.8:80 check inter 2000 fall 3  #定义在线节点

#######  参数说明  ##################
balance roundrobin :指定负载均衡调度算法为rr轮询
 #轮询算法: roundrobin; 
 #最小连接数算法: leastconn;
 #来源访问调度算法: source,源地址哈希,类似于nginx的ip_hash 
 ​
 instl :为服务器名称,可以自定义,可以使用主机名或域名来管理。
 ​
 check inter 2000 :表示启用对此后端服务器执行健康检查,设置健康状态检查的时间间隔,单位为毫秒。
 ​
 rise 2 : 表示连续2次检测成功后,则会认为server UP,恢复该节点。
 因为默认为2次,这一项可以省略不设置。(隔离节点后也会进行健康检查,连续2次检测成功后就会恢复)
 ​
 fall 3 :表示连续三次检测不到心跳频率则认为该节点失效。
 若节点配置后带有"backup"表示该节点只是个备份节点,仅在所有在线节点都失效该节点才启用。不携带"backup",表示为主节点,和其它在线节点共同提供服务。

添加haproxy系统服务(把haproxy加入系统服务管理中)

#做个软链接,将haproxy的可执行文件放入环境PATH的目录下
ln -s /usr/local/sbin/haproxy /usr/sbin/
 ​
#将haproxy.init文件复制到/etc/init.d/目录下,并改名为haproxy
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
cd /etc/init.d/
chmod +x haproxy                          #增加文件的执行权限
chkconfig --add /etc/init.d/haproxy       #把haproxy加入系统服务管理中
 ​
#启动haproxy
service haproxy start 或 /etc/init.d/haproxy start

3、客户端访问测试

浏览器输入Haproxy负载调度器地址:192.168.80.3

 

 六、总结

1、HTTP请求的两种方式

方式: GET、POST方式

区别: GET把参数包含在URL中,POST通过request body传递参数

  • GET: 产生一个TCP数据包
  • POST: 产生两个TCP数据包

2、haproxy配置文件重要参数说明

全局配置: global 作用: 用于设定义全局参数,属于进程级的配置,通常与操作系统配置有关。

  • maxconn 4096 #进程最大连接数,需考虑"ulimit -n"的限制,推荐使用10240
  • daemon #守护进程模式。可以使用非守护进程模式,在生产环境中建议使用守护进程模式
  • nbproc 1 #并发进程数,建议与当前服务器CPU核数相等或为其2倍

默认配置: defaults 作用: 配置默认参数,一般会被应用组件继承。

  • retries 3 #检查节点服务器失败次数,连续3次失败,则认为节点不可用
  • redispatch #当服务器负载很高时,自动结束当前队列处理比较久的连接
  • maxconn 2000 #最大连接数,"defaults"中 的值不能超过“global"段中的定义
  • timeout http-request 10s #默认http请求超时时间。建议设置时间为5~10s,增加http连接释放的速度
  • timeout http-keep-alive 10s #默认长连接超时时间
  • timeout check 10s #设置心跳检查超时时间

应用组件配置: listen 作用: 一般配置应用模块参数

  • option httpchk GET /index. html #检查服务器的index.html文件。发送http的GET请求检查index.html文件,返回2xx、3xx表示正常;返回4xx/5xx表示异常,则隔离该节点。
  • balance roundrobin #负载均衡调度算法使用轮询算法roundrobin
  • server inst1 192.168.72.30:80 check inter 2000 rise 2 fall 3 #定义在线节点
  • server inst2 192.168.72.40:80 check inter 2000 rise 2 fall 3 #定义在线节点
  • #server inst2 192.168.72.50:80 check inter 2000 rise 2 fall 3 backup #定义备份节点

haproxy支持的最大并发量=并发进程数×每个进程最大连接数,即"nbproc的值 × maxconn的值"

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

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

相关文章

c语言:初识指针

初识指针一.指针是什么问题一&#xff1a;指针&#xff0c;指针变量&#xff0c;内存&#xff0c;地址&#xff0c;编号的关系问题二&#xff1a;为什么指针大小是4或8字节二.如何使用指针三.指针类型问题三&#xff1a;既然指针是4个字节&#xff0c;那它是如何放下long类型的…

数据库:Centos7安装解压版mysql5.7图文教程,亲测成功

目录 1、卸载Centos7默认自带的mariadb数据库&#xff0c;避免冲突 2、下载解压版mysql并安装 3、配置mysql 4、mysql客户端访问 Centos7安装mysql5.7解压版完整教程避免踩坑&#xff0c;可以把数据目录和系统目录分开设置。 1、卸载Centos7默认自带的mariadb数据库&#xff0c…

Qt5开发从入门到精通——第十二篇一节(Qt5 事件处理及实例——多线程及简单实例)

提示&#xff1a;欢迎小伙伴的点评✨✨&#xff0c;相互学习c/c应用开发。&#x1f373;&#x1f373;&#x1f373; 博主&#x1f9d1;&#x1f9d1; 本着开源的精神交流Qt开发的经验、将持续更新续章&#xff0c;为社区贡献博主自身的开源精神&#x1f469;‍&#x1f680; 文…

菜鸟Linux(3):环境变量

"Oh heiya New World!" 一、什么是环境变量&#xff1f; 谈起环境变量,也许我们在敲代码的层面上并不关心。在链接的时候,我们从来没有告诉编译器,去哪里找动态库去链接;我们也从来没有告诉进程 执行该进程的用户是谁?以及在命令行解释器时&#xff0c;启动一个进程…

深度学习基础--神经网络(4)参数更新策略,梯度法

导数 导数&#xff1a;表示某个瞬间的变化量&#xff0c;公式定义&#xff1a; df(x)dxlimh→0f(xh)−f(x)h(4.4)\frac{df(x)}{dx} lim_{h \to 0}\frac{f(x h)-f(x)}{h} \tag{4.4} dxdf(x)​limh→0​hf(xh)−f(x)​(4.4) 求导的代码实现&#xff1a; import numpy as np i…

SSM框架-Spring(三)

目录 1 Spring对事务的支持 1.1 引入事务场景 1.2 spring对事务的支持 Spring实现事务的两种方式 Spring事务管理API 1.3 事务属性 1.3.1 事务传播行为 1.3.2 事务隔离级别 1.3.3 事务超时 1.3.4 只读事务 1.3.5 异常回滚事务 1.4 事务的全注解式开发 1.5 声明式事…

玩转SQL:咱们的目标是成为SQL方面的“扫地僧”

引言 (Structured Query Language)标准结构化查询语言简称SQL&#xff0c;编写SQL语句是每位后端开发日常职责中&#xff0c;接触最多的一项工作&#xff0c;SQL是关系型数据库诞生的产物&#xff0c;无论是什么数据库&#xff0c;MySQL、Oracle、SQL Server、DB2、PgSQL....&…

FPGA串口接收Demo

串口接收Demo 简单介绍 在发送数据时将并行数据转换成串行数据来传输&#xff0c;在接收数据时将接收到的串行数据转换成并行数据 空闲状态时&#xff0c;为高电平起始位为一个单位长度低电平&#xff0c;停止位为一个长度高电平 分析 帧格式 8位数据位1位停止位无校验位 …

配电站房监控系统方案

配电站为低压用户配送电能&#xff0c;设有中压进线(可有少量出线)、配电变压器和低压配电装置。计讯物联工业网关下配电站房监控系统方案&#xff0c;24小时对运行设备进行不间断数据采集上传服务器&#xff0c;云平台对接&#xff0c;远程实时在线监控设备运行状态 &#xff…

web前端-javascript-标识符(说明,命名规则、不以数字关键字保留字开头、驼峰命名,补充)

文章目录标识符1. 说明2. 命名规则3. 补充标识符 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><script type"text/javascript">//千万不要这么用/* var if 123;console.log(if); *//…

Linux、阿里云服务器用tomcat部署项目

文章目录一、安装JDK和Tomcat1.1 安装JDK2.2 安装Tomcat二、把项目打包成war包&#xff08;jar也可以&#xff0c;但是有区别&#xff09;三、把war包放进webapps里面四、修改tomcat配置五、修改防火墙和开放端口等设置六、在浏览器访问项目一、安装JDK和Tomcat 1.1 安装JDK …

如果你想跨行转做数据分析师,劝你慎重

随着数字化时代的浪潮&#xff0c;数据分析师成了炽手可热的香饽饽&#xff0c;疫情当下&#xff0c;各行各业的失业人员逐渐增多&#xff0c;所以人人都想转行当数据分析师。作为业内人员&#xff0c;说实话&#xff0c;真的不建议&#xff0c;数据分析师真的不是想象的那么简…

【Webpack】webpack的基础使用详细总结 上(建议收藏)

1- 前言&#xff08;前端工程化&#xff09; 实际的前端开发&#xff1a; 模块化&#xff08;js 的模块化、css 的模块化、其它资源的模块化组件化&#xff08;复用现有的 UI 结构、样式、行为&#xff09;规范化&#xff08;目录结构的划分、编码规范化、接口规范化、文档规范…

代码随想录算法训练营第六天|LeetCode 242. 有效的字母异位词 、349. 两个数组的交集 、 202. 快乐数、1. 两数之和

LeetCode 242. 有效的字母异位词 题目链接&#xff1a;242. 有效的字母异位词 方法一&#xff1a; 分析&#xff1a; 两个字符串里的每个字母的个数相等&#xff0c;那么我对每个字符串里的字符串都进行下排序&#xff0c;排出来后岂不是两个字符串的每个字母如果一一对应就…

高通平台开发系列讲解(AI篇)高通神经网络处理引擎工作流程详解

文章目录 一、Model to Runtime Workflow(模型运行流程)二、Basic SNPE Workflow(基本工作流程)2.1、Converting a Network Model(模型转换)2.2、Quantizing a Model(模型量化)沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要介绍高通平台神经网络处…

K_A07_002 基于 STM32等单片机驱动ULN2003模块按键控制步进电机正反转

目录 一、资源说明 二、基本参数 1.参数 2、引脚说明 三、驱动说明 步进电机驱动时序 反向输出 对应程序: 四、部分代码说明 1、接线说明 1.1、STC89C52RCULN2003模块 1.2、STM32F103C8T6ULN2003模块 五、基础知识学习与相关资料下载 六、视频效果展示与程序资料获取 七…

C#使用EPPlus操作Excel(读写)

之所以使用EPPlus操作Excel是因为微软自带的运行效率太低&#xff0c;数据多后会特别慢&#xff0c;不能满足现场要求。如果想速度快&#xff0c;而且只是读取Excel的配置还有另一个办法就是将Excel保存成xml文件&#xff0c;参考我的另一个文章&#xff1a;C# 读取XML格式的Ex…

概率统计·大数定律及中心极限定理【大数定律、中心极限定律】

这一章的学习更多的是为后面的知识作铺垫&#xff0c;所以内容比较少&#x1f358;&#x1f358;&#x1f358;&#xff08;当然也减轻一点复习的负担&#x1f917;&#x1f917;&#x1f917;&#xff09; 依概率收敛 需要概率P极限趋近于1 切比雪夫不等式的特殊情况 前提&…

数据库-sql执行深度剖析以及redo log和undo log(下)(二)

目录 buffer pool change Buffer Log Buffer redo log 随机IO/顺序IO redo log刷盘时机 redo logt特点 redo log结构 Adaptive Hash Index 磁盘区域 undo log 总结更新流程 BInlog 基于上一章sql执行原理基础上&#xff0c;我们来深入探讨sql更新的整个原理。 bu…

力扣(LeetCode)33. 搜索旋转排序数组(C++)

二分查找 二分的本质&#xff0c;是对某种性质的划分&#xff0c;一半满足&#xff0c;另一半不满足&#xff0c;即可划分。 比较 nums[mid]nums[mid]nums[mid] 和 nums[0]nums[0]nums[0] &#xff0c;可以知道 midmidmid 左右哪一端有序。 如果左端有序&#xff0c;我们找往…