通过Nginx负载均衡+Keepalived实现业务高可用
通过Nginx负载均衡和Keepalived可以实现业务的高可用,以下是详细的实现步骤:
环境准备
假设我们有3台服务器,IP地址分别为:
- 服务器1(Nginx + Keepalived 主节点):192.168.1.100
- 服务器2(Nginx + Keepalived 备节点):192.168.1.101
- 后端应用服务器:192.168.1.102、192.168.1.103
步骤一:安装Nginx和Keepalived
在服务器1和服务器2上分别安装Nginx和Keepalived:
安装Nginx
# 更新系统包列表
sudo apt update
# 安装Nginx
sudo apt install nginx -y
安装Keepalived
sudo apt install keepalived -y
步骤二:配置Nginx负载均衡
在服务器1和服务器2上进行相同的Nginx配置。编辑Nginx的配置文件 /etc/nginx/sites-available/default:
http {upstream backend {server 192.168.1.102;server 192.168.1.103;}server {listen 80;server_name _;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}
上述配置中,upstream 块定义了后端应用服务器列表,server 块将所有请求代理到后端服务器。
配置完成后,重启Nginx服务:
sudo systemctl restart nginx
步骤三:配置Keepalived
主节点(服务器1)配置
编辑 /etc/keepalived/keepalived.conf 文件:
! Configuration File for keepalivedglobal_defs {router_id LVS_DEVEL
}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.110}
}virtual_server 192.168.1.110 80 {delay_loop 6lb_algo rrlb_kind NATpersistence_timeout 50protocol TCPreal_server 192.168.1.100 80 {weight 1SSL_GET {url {path /digest ff20ad2481f8d0385d96a347da6cdb0c}url {path /mrtg/digest 9b3a0c85a8872a256d6939da88aabd8cd}connect_timeout 3retry 3delay_before_retry 3}}
}
state MASTER:表示该节点为主节点。interface eth0:指定使用的网络接口。virtual_router_id 51:虚拟路由ID,主备节点需保持一致。priority 100:优先级,主节点优先级要高于备节点。virtual_ipaddress:指定虚拟IP地址(VIP)。
备节点(服务器2)配置
编辑 /etc/keepalived/keepalived.conf 文件:
! Configuration File for keepalivedglobal_defs {router_id LVS_BACKUP
}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.110}
}virtual_server 192.168.1.110 80 {delay_loop 6lb_algo rrlb_kind NATpersistence_timeout 50protocol TCPreal_server 192.168.1.101 80 {weight 1SSL_GET {url {path /digest ff20ad2481f8d0385d96a347da6cdb0c}url {path /mrtg/digest 9b3a0c85a8872a256d6939da88aabd8cd}connect_timeout 3retry 3delay_before_retry 3}}
}
与主节点配置的主要区别在于 state 为 BACKUP,priority 较低。
配置完成后,分别在服务器1和服务器2上启动Keepalived服务:
sudo systemctl start keepalived
sudo systemctl enable keepalived
步骤四:验证高可用性
- 访问业务:在客户端浏览器中输入虚拟IP地址
192.168.1.110,应该可以正常访问后端应用服务。 - 模拟主节点故障:在服务器1上停止Keepalived服务:
sudo systemctl stop keepalived
此时,虚拟IP地址会自动漂移到服务器2上,再次在客户端浏览器中输入虚拟IP地址,仍然可以正常访问后端应用服务。
- 恢复主节点:在服务器1上启动Keepalived服务:
sudo systemctl start keepalived
由于主节点优先级较高,虚拟IP地址会再次漂移回服务器1。
注意事项
- 确保服务器之间网络连通,并且防火墙允许相关端口(如80、VRRP协议)的通信。
- 可以根据实际需求调整Nginx的负载均衡算法和Keepalived的优先级等参数。
相关文章:
通过Nginx负载均衡+Keepalived实现业务高可用
通过Nginx负载均衡和Keepalived可以实现业务的高可用,以下是详细的实现步骤: 环境准备 假设我们有3台服务器,IP地址分别为: 服务器1(Nginx Keepalived 主节点):192.168.1.100服务器2&#x…...
Spark技术系列(三):Spark算子全解析——从基础使用到高阶优化
Spark技术系列(三):Spark算子全解析——从基础使用到高阶优化 1. 算子核心概念与分类体系 1.1 算子本质解析 延迟执行机制:转换算子构建DAG,行动算子触发Job执行任务并行度:由RDD分区数决定(可通过spark.default.parallelism全局配置)执行位置优化:基于数据本地性的…...
ES6模块化详解:导入与导出方式
在现代 JavaScript 开发中,模块化是代码管理和组织的重要工具。ES6(ECMAScript 2015)引入了模块化的概念,通过 import 和 export 来组织代码,使得模块的管理变得更加清晰和简洁。本文将详细介绍 ES6 中的各种模块导入导…...
每日学习Java之一万个为什么?[MySQL面试篇]
分析SQL语句执行流程中遇到的问题 前言1 MySQL是怎么在一台服务器上启动的2 MySQL主库和从库是同时启动保持Alive的吗?3 如果不是主从怎么在启动的时候保证数据一致性4 ACID原则在MySQL上的体现5 数据在MySQL是通过什么DTO实现的6 客户端怎么与MySQL Server建立连接…...
常用空间数据结构对比
空间数据结构是用来组织和查询多维空间数据的算法结构。它们在地理信息系统 (GIS)、计算机图形学、机器人导航、机器学习等领域非常重要。以下是几种常见空间数据结构的对比: 1. 四叉树(Quadtree) 适用场景:二维空间数据&#x…...
AnythingLLM+LM Studio本地知识库构建
前置操作: 已经安装以下软件,并配置后: DeepSeek-R1-Distill-Llama-8B-Q4_K_M.ggufLM-Studio-0.3.10-6-x64 软件准备: 下载AnythingLLM:AnythingLLM | The all-in-one AI application for everyone 点击"Dow…...
使用 Java 更新 Word 文档中的图表数据-超详细
使用 Java 更新 Word 文档中的图表数据 在日常的工作中,尤其是在数据分析和报告自动化的场景中,可能会遇到需要定期更新 Word 文档中的图表数据的需求。比如,生成数据报告时,我们需要在图表中更新一些动态的数据值。今天…...
Qt常用控件之下拉框QComboBox
下拉框QComboBox QComboBox 是一个下拉框控件。 1. QComboBox属性 属性说明currentText当前选中的文本。currentIndex当前选中的条目下标(从 0 开始,如果没有条目被选中则该值为 -1)。editable是否允许被修改。为 true 时,QCom…...
Qt 中集成mqtt协议
一,引入qmqtt 库 我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台时 方便,直接编译就行了。 原始仓库路径:https://github.com/emqx/qmqtt/tree/master 二,使用 声明一个单例类,将订阅到…...
2024年第十五届蓝桥杯大赛软件赛省赛Python大学A组真题解析
文章目录 试题A: 拼正方形(本题总分:5 分)解析答案试题B: 召唤数学精灵(本题总分:5 分)解析答案试题C: 数字诗意解析答案试题A: 拼正方形(本题总分:5 分) 【问题描述】 小蓝正在玩拼图游戏,他有7385137888721 个2 2 的方块和10470245 个1 1 的方块,他需要从中挑出一些…...
AI大模型-提示工程学习笔记19-自我反思
目录 1. 自我反思的核心思想 (1) LLM 的局限性 (2) Reflexion 的解决方案 2. Reflexion 的工作流程 (1) 任务输入 (2) 初始生成 (3) 反思 (Reflection) (4) 调整与改进 (5) 迭代 (6) 结果输出 3. Reflexion 的关键组件 (1) 大语言模型 (LLM) (2) 反思者 (Reflector…...
GaussDB 学习实战指南:从部署到高并发优化的全流程解析
引言 GaussDB 作为华为推出的高性能分布式数据库,凭借其 分布式架构、高可用性、云原生支持 等特性,成为企业级应用的核心选择。本文将以 实战操作为核心,覆盖 集群部署、数据分片、性能调优、容灾备份、云上迁移 五大场景,通过真实案例与代码示例,助你快速掌握 GaussDB …...
vue3 Props的使用
Props是什么? 官方地址:Props | Vue.js 在 Vue 中,props 是父组件向子组件传递数据的一种机制。 props 是子组件中定义的自定义属性,父组件通过这些属性向子组件传递数据。 它们是单向数据流的一部分,意味着数据只能…...
Ecode前后端传值
说明 在泛微 E9 系统开发过程中,使用 Ecode 调用后端接口并进行传值是极为常见且关键的操作。在上一篇文章中,我们探讨了 Ecode 调用后端代码的相关内容,本文将深入剖析在 Ecode 中如何向后端传值,以及后端又该如何处理接收这些值…...
【Linux】进程状态(二)
目录 前言: 一、进程状态: 1.运行状态(时间片) 2.阻塞状态 3.阻塞挂起状态 二、Linux进程状态: 1.运行状态(R)和阻塞状态(S) 2.深度睡眠状态(D) 3.停止状态(T) 3.1使进程在后台运行 4.追踪暂停状态(t) 5.死亡状态(X)和僵尸状态…...
domain 网络安全 网络安全域
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 文章目录 1、域的概述 1.1、工作组与域1.2、域的特点1.3、域的组成1.4、域的部署概述1.5、活动目录1.6、组策略GPO 2、域的部署实验 2.1、建立局域网…...
链表和STL —— list 【复习笔记】
1. 链表 1.1 链表的定义和类型 和顺序表一样,链表也是一种线性表,线性表存储结构为链式存储就是链表 链式存储不仅要保存数据元素,还要保存数据元素间的关系,这两个部分信息形成了结点。结点有两个域:数据域&#x…...
Java Map实现类面试题
Java Map实现类面试题 HashMap Q1: HashMap的实现原理是什么? HashMap基于哈希表实现,使用数组链表红黑树(Java 8)的数据结构。 public class HashMapPrincipleExample {// 模拟HashMap的基本结构public class SimpleHashMap&…...
技术架构和工程架构区别
技术架构 技术架构是对某一技术问题解决方案的结构化描述,包括组件结构及其交互关系。它涵盖部署方案、存储方案、缓存方案、日志方案等多个方面,旨在通过组织人员和技术,以最低的成本满足需求和应对变化,保障软件的稳定高效运…...
简单介绍JVM
1.什么是JVM? JVM就是Java虚拟机【Java Virtual Machine】,简称JVM。主要部分包括类加载子系统,运行时数据区,执行引擎,本地方法库等,接下来我们一一介绍 2.类加载子系统 JVM中运行的就是我们日常写的JA…...
华三交换机端口隔离配置(VLAN内二层互访隔离)
一、前言 华三(H3C)交换机的端口隔离是一种关键的二层端口级控制技术,它能在同一 VLAN 内部实现端口间的二层互访隔离,有效抑制广播风暴、提升网络安全与用户隔离性。 核心原理是将指定端口加入隔离组,组内端…...
终极SketchUp STL插件指南:3D打印爱好者的完美转换解决方案
终极SketchUp STL插件指南:3D打印爱好者的完美转换解决方案 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl 你是否…...
PowerPaint-V1 Gradio快速部署:国内镜像加速,消费级显卡也能流畅运行
PowerPaint-V1 Gradio快速部署:国内镜像加速,消费级显卡也能流畅运行 1. 为什么你需要关注PowerPaint-V1 如果你经常需要处理图片,比如去掉照片里多余的路人、抹掉商品图上的水印、或者给老照片修复破损的地方,那你一定知道这活…...
VMware macOS虚拟机终极指南:3步解锁苹果系统支持
VMware macOS虚拟机终极指南:3步解锁苹果系统支持 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 你是否想在Windows或Linux电脑上体验macOS系统,却发现VMware中根本没有苹果系统…...
保姆级教学:实时手机检测-通用镜像部署与使用全流程
保姆级教学:实时手机检测-通用镜像部署与使用全流程 1. 模型简介与核心优势 1.1 模型技术背景 实时手机检测-通用模型是基于DAMOYOLO-S框架开发的高性能目标检测模型。DAMO-YOLO是一个专门为工业落地设计的目标检测框架,在保持高速推理的同时…...
nanobot快速入门:超轻量级AI助手部署,支持QQ机器人智能回复
nanobot快速入门:超轻量级AI助手部署,支持QQ机器人智能回复 1. nanobot简介与核心优势 nanobot是一款受OpenClaw启发的超轻量级个人人工智能助手,其核心设计理念是用最精简的代码实现最实用的AI助手功能。与传统AI助手动辄数十万行代码的庞…...
50款创意HTML5错误页模板集锦(403/404/500全适配)
1. 为什么你需要这些HTML5错误页模板? 做网站的朋友都知道,遇到403、404、500这些错误状态码是家常便饭。但很多开发者往往把精力都放在主页面设计上,忽略了错误页面的用户体验。我见过太多网站的错误页面就是一行冷冰冰的文字提示ÿ…...
Nuxt v4.x 应用创建中的常见问题与解决方案
Nuxt v4.x 应用创建中的常见问题与解决方案 在构建现代Web应用时,Nuxt.js以其出色的开发体验和强大的功能集赢得了众多开发者的青睐。随着v4.x版本的发布,这个基于Vue.js的框架带来了更多令人兴奋的特性,但同时也伴随着一些新的挑战。本文将深…...
思摩尔第一季营收38.6亿:同比增42% 全面收益总额1.3亿降39%
雷递网 乐天 4月10日思摩尔国际控股有限公司(简称:“思摩尔”,股票代码:“6969”)日前发布截至2026年3月31日的财报。财报显示,思摩尔2026年第一季度营收为38.56亿元,较上年同期的27.22亿元增长…...
AI生成代码的版权争议:谁拥有所有权?——软件测试从业者的专业视角
技术变革下的新命题随着ChatGPT、文心一言等生成式AI工具在软件开发领域的深度应用,AI自动生成的测试脚本、接口代码甚至自动化测试框架正迅速普及。2025年全球开发者调研显示,67%的软件测试团队已常态化使用AI辅助编码。当一行行由机器生成的代码融入测…...
