Haproxy实现七层负载均衡

目录

Haproxy概述

haproxy算法:

Haproxy实现七层负载

①部署nginx-server测试页面

②(主/备)部署负载均衡器

 ③部署keepalived高可用

 ④增加对haproxy健康检查

⑤测试


Haproxy概述

haproxy---主要是做负载均衡的7层,也可以做4层负载均衡
apache也可以做7层负载均衡,但是很麻烦。实际工作中没有人用。
负载均衡是通过OSI协议对应的
7层负载均衡:用的7层http协议,
4层负载均衡:用的是tcp协议加端口号做的负载均衡

haproxy算法:


1.roundrobin
基于权重进行轮询,在服务器的处理时间保持均匀分布时,这是最平衡,最公平的算法.此算法是动态的,这表示其权重可以在运行时进行调整.不过在设计上,每个后端服务器仅能最多接受4128个连接
2.static-rr
基于权重进行轮询,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效.不过,其在后端服务器连接数上没有限制
3.leastconn
新的连接请求被派发至具有最少连接数目的后端服务器.

Haproxy实现七层负载

keepalived+haproxy

192.168.134.165  master

192.168.134.166 slave

192.168.134.163  nginx-server

192.168.134.164 nginx-server

192.168.134.160   VIP(虚拟IP)

①部署nginx-server测试页面

两台nginx都部署方便测试

[root@server03 ~]# yum -y install nginx
[root@server03 ~]# systemctl  start nginx
[root@server03 ~]# echo "webserver01..." > /usr/share/nginx/html/index.html [root@server04 ~]# yum -y install nginx
[root@server04 ~]# systemctl  start nginx
[root@server04 ~]# echo "webserver02..." > /usr/share/nginx/html/index.html
②(主/备)部署负载均衡器
[root@server01 ~]# yum -y install haproxy
[root@server01 ~]# vim /etc/haproxy/haproxy.cfg
globallog         127.0.0.1 local2 infopidfile     /var/run/haproxy.pidmaxconn     4000user        haproxygroup       haproxydaemonnbproc 1
defaultsmode                    httplog                     globalretries                 3option                  redispatchmaxconn                 4000contimeout              5000clitimeout              50000srvtimeout              50000
listen statsbind                        *:81stats                       enablestats uri                   /haproxystats auth                  aren:123
frontend  webmode                        httpbind                            *:80option                  httplogacl html url_reg  -i  \.html$use_backend httpservers if  htmldefault_backend    httpservers
backend httpserversbalance     roundrobinserver  http1 192.168.134.163:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2server  http2 192.168.134.164:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2[root@server01 ~]# systemctl  start haproxy

浏览器访问haproxy监控

master:

slave:

页面主要参数解释
Queue
Cur: current queued requests //当前的队列请求数量
Max:max queued requests     //最大的队列请求数量
Limit:           //队列限制数量

Errors
Req:request errors             //错误请求
Conn:connection errors          //错误的连接

Server列表:
Status:状态,包括up(后端机活动)和down(后端机挂掉)两种状态
LastChk:    持续检查后端服务器的时间
Wght: (weight) : 权重

 ③部署keepalived高可用

注意:master和slave的优先级不一样,但虚拟路由id(virtual_router_id)保持一致;并且slave配置 nopreempt(不抢占资源)

master:

[root@server01 ~]# yum -y install keepalived
[root@server01 ~]# vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalivedglobal_defs {router_id director1
}
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 80priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.134.160/24}
}[root@server01 ~]# systemctl  start keepalived

slaver:

[root@localhost ~]# yum -y install keepalived
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id directory2
}
vrrp_instance VI_1 {state BACKUPinterface ens33nopreemptvirtual_router_id 80priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.134.160/24}
}
[root@localhost ~]# systemctl  start keepalived

查看IP

 ④增加对haproxy健康检查

两台机器都做,让Keepalived以一定时间间隔执行一个外部脚本,脚本的功能是当Haproxy失败,则关闭本机的Keepalived。

[root@server01 ~]# vim /etc/keepalived/check.sh
#!/bin/bash /usr/bin/curl -I http://localhost &>/dev/null
if [ $? -ne 0 ];then
#       /etc/init.d/keepalived stopsystemctl stop keepalived
fi
[root@server01 ~]# chmod a+x /etc/keepalived/check.sh

在keepalived增加健康检查配置vrrp_script check_haproxy并且用 track_script调用。

! Configuration File for keepalivedglobal_defs {router_id director1
}
vrrp_script check_haproxy {script "/etc/keepalived/check.sh"interval 5
}
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 80priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.134.160/24}track_script {check_haproxy}
}

重启keepalived

[root@server01 ~]# systemctl  restart keepalived
⑤测试

关闭master的haproxy服务可以发现master的keepalived服务也关闭,此时master上的VIP转移到slave上

  • 关闭master的服务并查看VIP

  • 查看slave的IP可以发现VIP跳转至此。

  • 在web界面查看服务是否正常

第一次刷新

第二次刷新

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bytebase 2.11.0 - 支持 OceanBase Oracle 模式

🚀 新功能 支持 OceanBase Oracle 模式。支持设置 MySQL 在线变更参数。新增项目数据库查看者的角色。 🎄 改进 支持在项目中直接选择所有用户并为之添加角色。 调整了项目页面的布局。在 SQL 编辑器中通过悬浮面板展示表和列的详情。 🪦 …

【Git】Git使用Gui图形化界面,Git中SSH协议,Idea集成Git

一,Git使用Gui图形化界面 1.1 Gui的简介 Gui (Graphical User Interface)指的是图形用户界面,也就是指使用图形化方式来协同人和计算机进行交互的一类程序。它与传统的命令行界面相比,更加直观、易用,用户…

数据结构之双向链表

目录 引言 链表的分类 双向链表的结构 双向链表的实现 定义 创建新节点 初始化 打印 尾插 头插 判断链表是否为空 尾删 头删 查找与修改 指定插入 指定删除 销毁 顺序表和双向链表的优缺点分析 源代码 dlist.h dlist.c test.c 引言 数据结构…

Linux shell编程学习笔记24:函数定义和使用

为了实现模块化设计和代码重用,很多编程语言支持函数或过程,Linux shell也支持函数定义和调用。 Linux shell中的函数与其它编程语言很多有相似之处,也有自己独特之处。 1 函数的定义 1.1 标准格式 function 函数名(){语句或命令1……语句…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三)

员工分页查询和账号启用禁用功能 1. 员工分页查询1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计 1.2 代码开发1.2.1 设计DTO类1.2.2 封装PageResult1.2.3 Controller层1.2.4 Service层接口1.2.5 Service层实现类1.2.6 Mapper层 1.3 功能测试1.4 代码完善 2. 启用禁用员工账号…

基于ubuntu22.04手动安装openstack——2023.2版本(最新版)的问题汇总

前言:基本上按照openstack官方网站动手可以搭建成功(如有需要私信发部署文档)。 但是任然有些小问题,所以汇总如下。 第一个问题 问题: ubuntu搭建2023.2版本neutorn报错,ERROR neutron.plugins.ml2.driv…

c++求三个数的最小公倍数

答案&#xff1a; #include <iostream> using namespace std; int main() {int n1, n2, n3, max;cin >> n1 >> n2 >> n3;max (n1 > n2 > n3) ? n1 : n2;do{if (max % n1 0 && max % n2 0 && max % n3 0){cout << ma…

2.docker镜像的导入导出

目录 概述docker 常用命令下载导出导入镜像结束 概述 docker 常用命令 本章节使用到的命令&#xff0c;总结在此&#xff0c;后面有使用案例。 命令作用docker images显示镜像docker rmi $(docker images -q)删除系统上所有的镜像docker rmi -f强制删除多个镜像 &#xff1a…

第十三章《搞懂算法:神经网络是怎么回事》笔记

目前神经网络技术受到追捧&#xff0c;一方面是由于数据传感设备、数据通信技术和数据存储技术 的成熟与完善&#xff0c;使得低成本采集和存储海量数据得以成为现实;另一方面则是由于计算能力的大幅提升&#xff0c;如图形处理器(Graphics Processing Unit&#xff0c;GPU)在神…

VS c++多文件编译

前言&#xff1a;记录下我这个菜鸡学习的过程&#xff0c;如有错误恳请指出&#xff0c;不胜感激&#xff01; 1.简单多文件编译调试 文件目录&#xff1a; 编译&#xff1a; -g选项是告诉编译器生成调试信息&#xff0c;这样可以在程序崩溃或出现错误时更容易地进行调试。这…

图论11-欧拉回路与欧拉路径+Hierholzer算法实现

文章目录 1 欧拉回路的概念2 欧拉回路的算法实现3 Hierholzer算法详解4 Hierholzer算法实现4.1 修改Graph&#xff0c;增加API4.2 Graph.java4.3 联通分量类4.4 欧拉回路类 1 欧拉回路的概念 2 欧拉回路的算法实现 private boolean hasEulerLoop(){CC cc new CC(G);if(cc.cou…

19 异步通知

一、异步通知 1. 异步通知简介 阻塞和非阻塞两种方式都是需要应用程序去主动查询设备的使用情况。 异步通知类似于驱动可以主动报告自己可以访问&#xff0c;应用程序获取信号后会从驱动设备中读取或写入数据。 异步通知最核心的就是信号&#xff1a; #define SIGHUP 1 /* 终…