3.haproxy负载均衡

haproxy负载均衡

  • 一、haproxy介绍
    • 1、负载均衡类型
  • 二、haproxy配置文件
    • 1、backend
    • 2、frontend
  • 三、haproxy实现MySQL负载均衡 —— 4层
    • 1、后端两台MySQL配置双主复制
    • 2、安装配置haproxy
      • 2.1 安装软件
      • 2.2 编辑配置
      • 2.3 启动haproxy
      • 2.4 测试通过haproxy正常连接MySQL
  • 四、haproxy实现七层调度
    • 1、匹配请求的方法
    • 2、配置haproxy实现web 7层负载
    • 2.1 编辑haproxy配置文件
    • 2.2 所有网站域名统一解析到haproxy上,测试访问
    • 2.3 修改nginx日志格式

一、haproxy介绍

开源、负载均衡器
同时支持4层负载、7层负载

1、负载均衡类型

  • 4层负载
    根据IP/port进行负载、调度
    LVS、nginx(stream模块)

  • 7层负载
    针对http/https协议进行负载, 灵活性高
    根据应用层数据(图片、视频、动画等)进行调度
    nginx(upstream模块)

二、haproxy配置文件

1、backend

  • 定义后端业务服务器
backend xxxxbalance roundrobin			// 调度算法mode {tcp|http}				// tcp:4层负载、http: 7层负载server 名称 IP:port checkserver 名称 IP:port check

2、frontend

  • 定义虚拟服务
frontend 虚拟服务名称bind IP:portmode {tcp|http}use_backend backend后端服务器

三、haproxy实现MySQL负载均衡 —— 4层

在这里插入图片描述

1、后端两台MySQL配置双主复制

2、安装配置haproxy

2.1 安装软件

[root@master_haproxy ~]# yum install -y haproxy 

2.2 编辑配置

[root@master_haproxy ~]# vim /etc/haproxy/haproxy.cfg 
frontend MySQL_Servicebind 0.0.0.0:3306mode tcpuse_backend DBbackend DBbalance source  mode tcpserver db01 192.168.140.13:3306server db02 192.168.140.14:3306

2.3 启动haproxy

[root@master_haproxy ~]# systemctl enable --now haproxy
Created symlink from /etc/systemd/system/multi-user.target.wants/haproxy.service to /usr/lib/systemd/system/haproxy.service.
[root@master_haproxy ~]# 
[root@master_haproxy ~]# netstat -tunlp | grep haproxy 
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1500/haproxy        
udp        0      0 0.0.0.0:58409           0.0.0.0:*                           1499/haproxy     

2.4 测试通过haproxy正常连接MySQL

四、haproxy实现七层调度

1、匹配请求的方法

ACL, 访问控制列表, 作用用于匹配请求,便于7层调度
语法: acl acl名称 <匹配请求的方法> -i 条件

  • hdr_reg(host)
    以正则表达式的方式匹配主机名
acl test1 hdr_reg(host) -i download 
use_backend xxxxxx if test1
  • hdr_dom(host)
    精确匹配主机名
acl test2 hdr_dom(host) -i www.jd.com 
  • hdr_beg(host)
    匹配以xxxx开头的主机名
acl tes3 hdr_beg(host) -i blog.
  • path_end
    根据URL以xxxx结尾的请求
acl test4 path_end -i .jpg .jpeg .png .gif .css .js 
  • path_beg
    根据URL以xxx开头的请求
acl test5 path_beg -i https:// 
  • url_ip
    根据请求中的目的IP来匹配
acl test6 url_ip 10.0.0.0/8
acl test6 url_ip 172.12.0.0/12
acl test6 url_ip 192.168.0.0/16
http-request deny if test6 
  • src
    根据源IP地址匹配请求
acl test8 src -i 12.32.34.43
http-request deny if test8 
  • method
    根据http的请求方法来匹配请求 GET/POST
acl test7 method -i POST 

2、配置haproxy实现web 7层负载

在这里插入图片描述

2.1 编辑haproxy配置文件

[root@master_haproxy ~]# vim /etc/haproxy/haproxy.cfg 
frontend web_servicebind 0.0.0.0:80mode httpoption forwardfor					// 让后端服务器日志记录真实客户端地址acl blog_acl hdr_reg(host) blog.use_backend blog if blog_aclacl cart_acl hdr_dom(host) opencart.linux.comuse_backend opencart if cart_acldefault_backend opencart     // 定义默认后端,通过IP访问haproxy时默认为503 backend blogbalance roundrobinmode httpserver blog01 192.168.140.12:80 checkserver blog02 192.168.140.13:80 checkbackend opencartbalance roundrobinmode httpserver cart01 192.168.140.12:80 checkserver cart02 192.168.140.13:80 check
[root@master_haproxy ~]# systemctl restart haproxy
[root@master_haproxy ~]# 
[root@master_haproxy ~]# netstat -tunlp | grep haproxy
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1909/haproxy        
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1909/haproxy        
udp        0      0 0.0.0.0:42707           0.0.0.0:*                           1908/haproxy   

2.2 所有网站域名统一解析到haproxy上,测试访问

2.3 修改nginx日志格式

    log_format  main  '$http_x_forwarded_for - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent"';$remote_addr修改为$http_x_forwarded_for
[root@web01 ~]# tail -n 3 /usr/local/nginx/logs/opencart_access.log 
192.168.140.1 - - [08/Jun/2024:15:30:35 +0800] "GET /image/cache/catalog/demo/product/product-5-300x300.png HTTP/1.1" 404 153 "http://opencart.linux.com/index.php?route=product/category&path=20_26" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0"
192.168.140.1 - - [08/Jun/2024:15:30:35 +0800] "GET /image/cache/catalog/demo/slideshow/banner-2-287x403.png HTTP/1.1" 404 153 "http://opencart.linux.com/index.php?route=product/category&path=20_26" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0"

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

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

相关文章

张大哥笔记:从古至今,赚钱最快的路子就一个,从未改变

从古至今&#xff0c;赚钱最快的路子就一个&#xff0c;而且从未改变&#xff0c;那就是信息差&#xff01; 不要误解信息差为某种高端复杂的概念&#xff1b;其本质很简单——它就是"你知道而别人不知道的信息"。 曾经我也认为&#xff0c;随着互联网的发展&#x…

Android.基本用法学习笔记

设置文本的内容 先在strings.xml声明变量 方法1. 方法2. 设置文本的大小 1.单位dp&#xff0c;大家可以去学一下有关的单位换算 2. 设置文本颜色 1. 2. 4.设置文本背景颜色 1. 2. 设置视图的宽高 与上级视图一致&#xff0c;也就是上一级有多宽就有多少 1. 2. 3. 4. 设置视图…

【全网最简单的解决办法】vscode中点击运行出现仅当从 VS 开发人员命令提示符处运行 VS Code 时,cl.exe 生成和调试才可用

首先确保你是否下载好了gcc编译器&#xff01;&#xff01;&#xff01; 检测方法&#xff1a; winR 打开cmd命令窗 输入where gcc(如果出现路径则说明gcc配置好啦&#xff01;) where gcc 然后打开我们的vscode 把这个文件删除掉 再次点击运行代码&#xff0c;第一个出现…

【C语言】C语言—通讯录管理系统(源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

AI日报0610 -- Prompt这样改,AI成本瞬降20%!

全球首届人工智能选美大赛 世界 AI 创作者大赛和创作者平台 FanVue 正在举办首届“Miss AI”大赛 超过 1,500 名 AI 生成的模特竞逐。这些模型不仅形象逼真 还展示了不同的个性和原因。 评委将评估技术和吸引观众的能力。 奖金池高达 20,000 美元&#xff0c;并有机会参加公关…

【python】python化妆品销售logistic逻辑回归预测分析可视化(源码+课程论文+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

已解决Error || IndexError: index 3 is out of bounds for axis 0 with size 3

已解决Error || IndexError: index 3 is out of bounds for axis 0 with size 3 原创作者&#xff1a; 猫头虎 作者微信号&#xff1a; Libin9iOak 作者公众号&#xff1a; 猫头虎技术团队 更新日期&#xff1a; 2024年6月6日 博主猫头虎的技术世界 &#x1f31f; 欢迎来…

11. MySQL 备份、恢复

文章目录 【 1. MySQL 备份类型 】【 2. 备份数据库 mysqldump 】2.1 备份单个数据表2.2 备份多个数据库2.3 备份所有数据库2.4 备份文件解析 【 3. 恢复数据库 mysql 】【 4. 导出表数据 OUTFILE 】【 5. 恢复表数据 INFILE 】 问题背景 尽管采取了一些管理措施来保证数据库的…

33-unittest数据驱动(ddt)

所谓数据驱动&#xff0c;是指利用不同的测试数据来测试相同的场景。为了提高代码的重用性&#xff0c;增加代码效率而采用一种代码编写的方法&#xff0c;叫数据驱动&#xff0c;也就是参数化。达到测试数据和测试业务相分离的效果。 比如登录这个功能&#xff0c;操…

大模型基础——从零实现一个Transformer(2)

大模型基础——从零实现一个Transformer(1) 一、引言 上一章主要实现了一下Transformer里面的BPE算法和 Embedding模块定义 本章主要讲一下 Transformer里面的位置编码以及多头注意力 二、位置编码 2.1正弦位置编码(Sinusoidal Position Encoding) 其中&#xff1a; pos&…

线程知识点总结

Java线程是Java并发编程中的核心概念之一&#xff0c;它允许程序同时执行多个任务。以下是关于Java线程的一些关键知识点总结&#xff1a; 1. 线程的创建与启动 继承Thread类&#xff1a;创建一个新的类继承Thread类&#xff0c;并重写其run()方法。通过创建该类的实例并调用st…

从信号灯到泊车位,ARMxy如何重塑城市交通智能化

城市智能交通系统的高效运行对于缓解交通拥堵、提高出行安全及优化城市管理至关重要。ARMxy工业计算机&#xff0c;作为这一领域内的技术先锋&#xff0c;正以其强大的性能和灵活性&#xff0c;悄然推动着交通管理的智能化升级。 智能信号控制的精细化管理 想象一下&#xff0…

【C语言】11.字符函数和字符串函数

文章目录 1.字符分类函数2.字符转换函数3.strlen的使用和模拟实现4.strcpy的使用和模拟实现5.strcat的使用和模拟实现6.strcmp的使用和模拟实现7.strncpy函数的使用8.strncat函数的使用9.strncmp函数的使用10.strstr的使用和模拟实现11.strtok函数的使用12.strerror函数的使用 …

视频修复工具,模糊视频变清晰!

老旧视频画面效果差&#xff0c;视频效果模糊。我们经常找不到一个好的工具来让视频更清晰&#xff0c;并把它变成高清画质。相信很多网友都会有这个需求&#xff0c;尤其是视频剪辑行业的网友&#xff0c;经常会遇到这个问题。今天给大家分享一个可以把模糊视频修复清晰的工具…

cnvd_2015_07557-redis未授权访问rce漏洞复现-vulfocus复现

1.复现环境与工具 环境是在vulfocus上面 工具&#xff1a;GitHub - vulhub/redis-rogue-getshell: redis 4.x/5.x master/slave getshell module 参考攻击使用方式与原理&#xff1a;https://vulhub.org/#/environments/redis/4-unacc/ 2.复现 需要一个外网的服务器做&…

《TCP/IP网络编程》(第十四章)多播与广播

当需要向多个用户发送多媒体信息时&#xff0c;如果使用TCP套接字&#xff0c;则需要维护与用户数量相等的套接字&#xff1b;如果使用之前学习的UDP&#xff0c;传输次数也需要和用户数量相同。 所以为了解决这些问题&#xff0c;可以采用多播和广播技术&#xff0c;这样只需要…

Python学习打卡:day02

day2 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 8、字符串的三种定义方式 字符串在Python中有多种定义形式 单引号定义法&#xff1a; name 黑马程序员双引号定义法&#xff1a; name "黑马程序…

代码随想录算法训练营第四十四天 | 01背包问题理论基础、01背包问题滚动数组、416. 分割等和子集

背包问题其实有很多种&#xff0c;01背包是最基础也是最经典的&#xff0c;软工计科学生一定要掌握的。 01背包问题 代码随想录 视频讲解&#xff1a;带你学透0-1背包问题&#xff01;| 关于背包问题&#xff0c;你不清楚的地方&#xff0c;这里都讲了&#xff01;| 动态规划经…

C++11:列表初始化 初始化列表initializer_list decltype关键字

目录 前言 列表初始化 初始化列表initializer_list decltype关键字 左值和右值 move 前言 2003年C标准委员会曾经提交了一份技术勘误表&#xff08;简称TC1&#xff09;&#xff0c;使得C03这个名字取代了C98成为了C11前最新的C标准名称。不过由于C03主要是对C98标准中的…

认识和使用 Vite 环境变量配置,优化定制化开发体验

Vite 官方中文文档&#xff1a;https://cn.vitejs.dev/ 环境变量 Vite 内置的环境变量如下&#xff1a; {"MODE": "development", // 应用的运行环境"BASE_URL": "/", // 部署应用时使用的 URL 前缀"PROD": false, //应用…