通过Nginx负载均衡+Keepalived实现业务高可用

embedded/2025/3/3 5:12:05/

通过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

nginx">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}}
}

与主节点配置的主要区别在于 stateBACKUPpriority 较低。

配置完成后,分别在服务器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的优先级等参数。

http://www.ppmy.cn/embedded/169528.html

相关文章

Imagination通过最新的D系列GPU IP将效率提升至新高度

Imagination DXTP GPU IP在加速移动设备和其他电力受限设备上的 图形和计算工作负载时,能够延长电池续航时间。 近日,Imagination Technologies(“Imagination”)宣布推出其最新的GPU IP——Imagination DXTP,该产品…

鸿蒙中连接手机可能遇到的问题

连接权限问题:手机开启了严格的权限管理机制,若未授予鸿蒙设备连接所需的权限,如蓝牙连接时未开启蓝牙权限,或者 USB 连接时未允许设备进行调试、文件传输等操作,就会导致连接失败。例如,当使用鸿蒙平板通过…

LangChain解锁LLM大语言模型的结构化输出能力:调用 with_structured_output() 方法

什么是LLM的结构化输出能力? 在一些工业级LLM应用或比较复杂的LLM应用编排环节,我们需要用LLM的输出作为下一环节的输入,而这个过程往往对LLM输出的格式有一定要求,比如JSON、XML、YAML、CSV、Markdown 表格和HTML 等比较常见的格…

JavaScript知识点4

1.解释一下这段JavaScript代码 var fruits ["Apple", "Orange", "Apple", "Mango"]; var a fruits.indexOf("Apple",-1); console.log("index"a); 输出的a值为-1,indexOf的第二个参数是-1&#xf…

Git与GitHub:它们是什么,有什么区别与联系?

1.Git是什么? Git 是一个开源的、分布式版本控制系统(Version Control System, VCS),由 Linus Torvalds 于 2005 年开发,最初用于管理 Linux 内核的开发。它的核心功能是跟踪文件的变更历史,帮助开发者高效…

「Selenium+Python自动化从0到1①|2025最新环境搭建+浏览器驱动避坑指南(附验证代码)」

Selenium Python 自动化 1 - 环境搭建 一、Selenium 简介 Selenium 是一个广泛使用的自动化测试工具,主要用于 Web 应用程序的自动化测试。它支持多种编程语言(如 Java、Python、C#、Ruby、JavaScript 等),并允许用户控制浏览器…

linux vim 撤销 回退操作

在Linux的vim编辑器中,撤销和回退操作是非常基本的,但它们可以通过不同的方式实现,具体取决于你想要的精确效果。下面是一些常用的方法: 1. 撤销(Undo) 单个撤销: 你可以通过按下u键来撤销上一…

如何获取Mac OS 安装盘

发现虚拟机VirtualBox支持Mac虚拟,就想尝试一下。但是发现Mac的安装盘特别难拿到,因此留档。发现有几种方法,最简单的方法,是在有Mac 机器的情况下,直接到App Store里,根据Mac版本的名字查找并下载。另外还…