《Nginx核心技术》第11章:实现MySQL数据库的负载均衡
作者:冰河
星球:http://m6z.cn/6aeFbs
博客:https://binghe.gitcode.host
文章汇总:https://binghe.gitcode.host/md/all/all.html
星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html
沉淀,成长,突破,帮助他人,成就自我。
- 本章难度:★★☆☆☆
- 本章重点:用最简短的篇幅介绍Nginx最核心的知识,掌握Nginx实现MySQL数据库的负载均衡,并能够灵活运用到实际项目中,维护高可用系统。
大家好,我是冰河~~
今天给大家介绍《Nginx核心技术》的第11章:实现MySQL数据库的负载均衡,多一句没有,少一句不行,用最简短的篇幅讲述Nginx最核心的知识,好了,开始今天的内容。
11.1 本章概述
Nginx能够实现HTTP、HTTPS协议的负载均衡,也能够实现TCP协议的负载均衡。那么,问题来了,可不可以通过Nginx实现MySQL数据库的负载均衡呢?答案是:可以。接下来,就让我们一起探讨下如何使用Nginx实现MySQL的负载均衡。
11.2 前提条件
注意:使用Nginx实现MySQL数据库的负载均衡,前提是要搭建MySQL的主主复制环境,关于MySQL主主复制环境的搭建,后续会在MySQL专题为大家详细阐述。这里,我们假设已经搭建好MySQL的主主复制环境,MySQL服务器的IP和端口分别如下所示。
- 192.168.1.101 3306
- 192.168.1.102 3306
通过Nginx访问MySQL的IP和端口如下所示。
- 192.168.1.100 3306
11.3 Nginx实现MySQL负载均衡
nginx在版本1.9.0以后支持tcp的负载均衡,具体可以参照官网关于模块ngx_stream_core_module的叙述,链接地址为:http://nginx.org/en/docs/stream/ngx_stream_core_module.html#tcp_nodelay。
nginx从1.9.0后引入模块ngx_stream_core_module,模块是没有编译的,需要用到编译,编译时需添加–with-stream配置参数,stream负载均衡官方配置样例如下所示。
worker_processes auto;
error_log /var/log/nginx/error.log info;events {worker_connections 1024;
}stream {upstream backend {hash $remote_addr consistent;server backend1.example.com:12345 weight=5;server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;server unix:/tmp/backend3;}upstream dns {server 192.168.0.1:53535;server dns.example.com:53;}server {listen 12345;proxy_connect_timeout 1s;proxy_timeout 3s;proxy_pass backend;}server {listen 127.0.0.1:53 udp;proxy_responses 1;proxy_timeout 20s;proxy_pass dns;}server {listen [::1]:12345;proxy_pass unix:/tmp/stream.socket;}
}
说到这里,使用Nginx实现MySQL的负载均衡就比较简单了。我们可以参照上面官方的配置示例来配置MySQL的负载均衡。这里,我们可以将Nginx配置成如下所示。
user nginx;
#user root;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {worker_connections 1024;
}
http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;include /etc/nginx/conf.d/*.conf;
}stream{upstream mysql{server 192.168.1.101:3306 weight=1;server 192.168.1.102:3306 weight=1;}server{listen 3306;server_name 192.168.1.100;proxy_pass mysql;}
}
配置完成后,我们就可以通过如下方式来访问MySQL数据库。
jdbc:mysql://192.168.1.100:3306/数据库名称
此时,Nginx会将访问MySQL的请求路由到IP地址为192.168.1.101和192.168.1.102的MySQL上。
好了,相信各位小伙伴们对Nginx如何实现MySQL数据库的负载均衡,有了进一步的了解,我是冰河,我们下期见~~
相关文章:
《Nginx核心技术》第11章:实现MySQL数据库的负载均衡
作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀,…...
使用 Gnosis Safe 创建多签名钱包
创建多签名钱包可以通过多个步骤完成,具体取决于你使用的平台或工具。下面我将介绍使用 Gnosis Safe 创建多签名钱包的过程,因为它是目前以太坊生态中最受欢迎且功能强大的多签名钱包之一。 目录 使用 Gnosis Safe 创建多签名钱包1. 准备工作2. 访问 Gnosis Safe3. 创建多签名…...
LeetCode 算法:前 K 个高频元素 c++
原题链接🔗:前 K 个高频元素 难度:中等⭐️⭐️ 题目 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2] 示例 2…...
MySQL的SQL语句更新某个字段的值在原来值的基础上随机增加100~600
要在 MySQL 中更新某个字段的值,使其在原有值的基础上随机增加一个 100 到 600 之间的值,你可以使用 RAND() 函数来生成随机数,并结合其他 SQL 函数进行计算。以下是一个 SQL 更新语句的示例: UPDATE your_table_name SET your…...
LeetCode --- 410周赛
题目列表 3248. 矩阵中的蛇 3249. 统计好节点的数目 3250. 单调数组对的数目 I 3251. 单调数组对的数目 II 一、矩阵中的蛇 只要按照题目要求模拟即可,代码如下 class Solution { public:int finalPositionOfSnake(int n, vector<string>& commands…...
最佳的iPhone解锁软件和应用程序
在探讨最佳的iPhone解锁软件和应用程序时,我们需要考虑多个方面,包括软件的解锁能力、易用性、安全性、兼容性以及用户评价等。以下是对当前市场上几款优秀iPhone解锁软件和应用程序的详细分析,旨在为用户提供全面而深入的指导。 一、奇客iO…...
初等函数和它的表达式
常量函数,幂函数,指数函数,对数函数,三角函数和反三角函数成为基本初等函数。基本初等函数经过有限四则运算和符合运算得到的函数称为初等函数。 1. 常量函数 表达式: (其中 c 是常数)参数的意…...
Android 12系统源码_多屏幕(二)模拟辅助设备功能开关实现原理
前言 上一篇我们通过为Android系统开启模拟辅助设备功能开关,最终实现了将一个Activity显示到多个屏幕的效果。 本篇文章我们具体来分析一下当我们开启模拟辅助设备功能开关的时候,Android系统做了什么哪些操作。 一、模拟辅助设备功能开关应用位置 …...
【Go语言初探】(二)、项目文件结构和GOPATH设置
一、go语言项目文件结构 由go/bin、go/src和go/pkg三个子文件夹组成,见下图: 实际项目: 二、gopath路径变量设置 在项目中创建main.go文件后,IDE会提示设置GOPATH路径: 点击“configure GOPATH”,设置GOP…...
三种简单排序:插入排序、冒泡排序与选择排序 【算法 05】
三种简单排序:插入排序、冒泡排序与选择排序 在编程中,排序算法是基础且重要的知识点。虽然在实际开发中,我们可能会直接使用标准库中的排序函数(如C的std::sort),但了解并实现这些基础排序算法对于理解算法…...
Python -- GUI图形界面编程—GUI编程实例 博主也在持续学习中[ 持续更新中!!! 欢迎白嫖 也求粉啊啊啊~ ]
本文介绍了GUI的图形界面编程(相关视频是哔站上的应该搜这个题目就能找到),文章还是很基础的,反正我是小白从0开始,主要的结构tinkter库、重要组件简介(这个不用死记硬背 用的时候再说)、Label&…...
Vue2和Vue3中的diff算法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、diff算法是什么?二、vue2中的diff算法三、vue3中的diff算法总结 前言 一、diff算法是什么? diff算法很早就存在了,一开…...
springboot使用aop或Jackson进行数据脱敏
1.aop 启动类加EnableAspectJAutoProxy 自定义注解,在实体类中使用表示被脱敏字段 建立aop切面类 可能这里gpt会建议你用Pointcut("execution(public * com.xx.aop..*.get*(..))")这种方式拦截,这种我试了,拦截不住。猜测在mvc返…...
【Solidity】基础介绍
数据类型 值类型 值类型的变量在赋值或作为函数参数传递时会被复制。 布尔类型:bool整数类型: 无符号:uint8、uint16、…、uint256 (uint256 可简写为 uint)有符号:int8、int16、…、int256 (int256可简写为 int) 地址类型&…...
【SpringBoot3】双向实时通讯 websocket
文章目录 一、Websocket使用步骤二、示例1:继承抽象类 AbstractWebSocketHandler后端代码前端代码 三、示例2:使用注解ServerEndpoint后端代码前端代码 四、前端代码封装 一、Websocket使用步骤 在Spring Boot中使用WebSocket是一个常见的需求ÿ…...
搭建内网开发环境(一)|基于docker快速部署开发环境
引言 最近因需要搭建一套简易版的纯内网的开发环境,服务器采用 centos8.0,容器化技术采用 docker 使用 docker-compose 进行容器编排。 该系列教程分为两大类: 软件安装和使用,这类是开发环境常用的软件部署和使用,涉…...
MATLAB R2023b配置Fortran编译器
MATLAB R2023b配置Fortran编译器 引言1. 安装Visual Studio 20192. 安装Intel API20243. 配置xml文件文件4. 设置环境变量5. MATLAB编译Fortran 引言 当我们需要用到MATLAB编译Fortran代码后进行调用计算时,整个配置流程较繁琐。下面以MATLAB R2023b为例࿰…...
2024新型数字政府综合解决方案(七)
新型数字政府综合解决方案通过集成人工智能、大数据、区块链和云计算技术,创建了一个高度智能化和互联互通的政府服务平台,旨在全面提升行政效率、服务质量和透明度。该平台实现了跨部门的数据整合与实时共享,利用人工智能进行智能决策支持和…...
搭建高可用k8s集群
高可用 Kubernetes V1.28.10 安装 文章目录 1. 环境介绍2. 准备工作2.1 修改主机名称2.2 修改hosts文件2.3 关闭防火墙和SLinux2.4 配置SSH免密访问2.4.1 主机名称: k8s-master-01 操作 2.5 配置yum源2.6 禁用Swarp分区2.7 同步时间2.8 配置内核转发及网桥过滤2.9 安装 IPVS 3…...
完美解决html2canvas + jsPDF导出pdf分页内容截断问题
代码地址:https://github.com/HFQ12333/export-pdf.git html2canvas jspdf方案是前端实现页面打印的一种常用方案,但是在实践过程中,遇到的最大问题就是分页截断的问题:当页面元素超过一页A4纸的时候,连续的页面就会…...
# WebNFC:让网页也能“碰一碰”实现设备交互的新可能随着移动互联网的快速发展,**近场通信(NFC)技术**逐渐从支付场景走
3 webNFC:让网页也能“碰一碰”实现设备交互的新可能 随着移动互联网的快速发展,近场通信(NFC)技术逐渐从支付场景走向更广泛的应用领域。而在浏览器端,**WebNFC ApI*8 的出现彻底改变了我们与 NFC 设备交互的方式——…...
Windows 11 + Ubuntu 20.04双系统安装避坑指南(附分区方案)
Windows 11与Ubuntu 20.04双系统安装全流程精解 对于想要在现有Windows 11系统上体验Ubuntu的用户来说,双系统安装是最佳选择。这种方式既能保留熟悉的Windows环境,又能探索Linux世界的无限可能。本文将详细解析从准备到安装的完整流程,特别针…...
深入XFS文件系统:从一次CentOS 7的Internal error报错,聊聊xfs_repair背后的原理与避坑指南
深入XFS文件系统:从Internal error报错到修复原理与实战指南 当你在一台运行CentOS 7的生产服务器上看到"XFS_WANT_CORRUPTED_GOTO"这个鲜红的报错信息时,作为运维工程师的肾上腺素会立刻飙升。这不是一个普通的I/O错误,而是XFS文件…...
Go语言中的跨平台开发:从Windows到Linux
Go语言中的跨平台开发:从Windows到Linux 前言 作为一个在小厂挣扎的Go后端老兵,我对跨平台开发的理解就一句话:能跨平台的绝不局限。 想当年在大厂时,开发环境和生产环境都是Linux,跨平台开发的需求不大。现在到了小厂…...
C++ 异常安全的最佳策略
C 异常安全的最佳策略 在C开发中,异常安全是确保程序在抛出异常时仍能保持正确性和资源管理的关键。异常处理不当可能导致内存泄漏、数据不一致或资源未释放等问题。本文将探讨C异常安全的最佳策略,帮助开发者编写更健壮的代码。 资源管理:…...
WarcraftHelper:魔兽争霸3现代优化解决方案 - 突破兼容性壁垒,重焕经典游戏活力
WarcraftHelper:魔兽争霸3现代优化解决方案 - 突破兼容性壁垒,重焕经典游戏活力 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper …...
双模型对比:OpenClaw接入Qwen3.5-4B-Claude与原版效果实测
双模型对比:OpenClaw接入Qwen3.5-4B-Claude与原版效果实测 1. 测试背景与实验设计 去年在开发一个自动化文档处理工具时,我发现OpenClaw的任务成功率高度依赖底层模型的逻辑推理能力。当时使用的标准Qwen模型在处理多步骤任务时经常出现"跳步&quo…...
CAPL实战指南:如何构建并发送带计数器的自定义周期报文
1. 为什么需要带计数器的周期报文 在汽车电子测试中,模拟ECU通信是最基础也最频繁的需求之一。想象一下,你正在测试一个车载娱乐系统,需要验证它能否正确处理来自其他ECU的周期性状态更新。这时候,如果只是发送固定内容的报文&…...
别只把Text2SQL当玩具:结合Spring AI与DeepSeek,我们这样用它优化了内部报表系统
别只把Text2SQL当玩具:结合Spring AI与DeepSeek,我们这样用它优化了内部报表系统 当业务团队每天提出十几个动态报表需求时,传统开发模式就像用勺子舀干涸的井水——我们团队曾连续三个月被SQL编写和接口开发压得喘不过气。直到将Text2SQL技术…...
AI芯片算力揭秘:从INT8到FP16,如何正确理解不同精度的TOPS值?
AI芯片算力揭秘:从INT8到FP16,如何正确理解不同精度的TOPS值? 当你在选购AI加速卡时,是否曾被厂商宣传的"200TOPS算力"搞得晕头转向?作为在边缘计算部署过数十个模型的工程师,我必须告诉你一个残…...
