keepalived + nginx 实现网站高可用性(HA)
keepalive
- 一、keepalive简介
- 二、实现步骤
- 1. 环境准备
- 2. 安装 Keepalived
- 3. 配置 Keepalived 双机主备集群架构
- 4. 配置 Nginx
- 5. 启动Keepalived
- 6. 测试高可用性
- 7. 配置keepalived 双主热备集群架构
- 三、虚拟ip
一、keepalive简介
-
目前互联网主流的实现WEB网站及数据库服务高可用软件包括:
keepalived
、heartbeat
等。
Heartbeat
是比较早期的实现高可用软件,而keepalived
是目前轻量级的管理方便、易用的高可用软件解决方案,得到互联网公司IT人的青睐。 -
Keepalived是一个类似于工作在layer 3, 4 & 7交换机制的软件,Keepalived软件有两种功能,分别是健康检查、VRRP冗余协议,keepalived是模块化设计,不同模块负责不同的功能。
-
Keepalived的
作用
是检测服务器的状态,如果有一台web服务器、Mysql服务器宕机,或工作出现故障,Keepalived将检测到后,会将有故障的web服务器或者Mysql服务器从系统中剔除,当服务器工作正常后Keepalived自动将web、Mysql服务器加入到服务器群中。
keepalived + nginx 实现双机主备高可用:
在使用 Nginx 实现双机主备高可用(HA)架构时,结合 Keepalive,可以有效地提高系统的可靠性和可用性。以下是实现这一架构的基本步骤和要点:
架构概述
-
主备节点:有两台 Nginx 服务器,一台作为主节点,另一台作为备节点。当主节点出现故障时,流量会自动切换到备节点。
-
Keepalived:通过 Keepalived 机制维持主备节点之间的心跳检测,确保在主节点故障时能够及时切换。
二、实现步骤
1. 环境准备
确保两台 Nginx 服务器已经安装并配置好,并且网络可以互通。
2. 安装 Keepalived
在两台服务器上安装 Keepalived,Keepalived 是一种用于实现高可用性的工具,能够通过 VRRP 协议管理主备节点的 IP 地址。
1、下载链接: https://www.keepalived.org/download.html
2、上传后,进行解压
tar -zxvf keepalived-2.0.20.tar.gz
3、先进入Keepalived目录,然后输入配置命令进行配置(--prefix
:指明Keepalived的安装位置,--sysconf
:指明Keepalived配置文件存放位置,必须放在/etc下面,为了后续Keepalived启动关闭不报错)
cd keepalived-2.0.20
./configure --prefix=/usr/local/keepalived --sysconf=/etc
如果出现了下面的错误,运行
yum -y install libnl libnl-devel
yum -y install openssl-devel
4、编译和安装
make && make install
3. 配置 Keepalived 双机主备集群架构
在主节点和备节点上配置 Keepalived。
1、建立check_nginx脚本
如上配置还需要建立check_nginx脚本,用于检查本地Nginx是否存活,如果不存活,则kill keepalived实现切换。其中check_nginx.sh脚本内容如下
#!/bin/bash
killall -0 /usr/local/nginx/sbin/nginx
if [[ $? -ne 0 ]]; thenservice keepalived stopexit 1
elseexit 0
fi
2、主节点配置(/etc/keepalived/keepalived.conf):
global_defs {#路由id:当前安装keepalived节点主机的标识符,全局唯一router_id keep_129
}vrrp_script check_nginx_alive {script "/etc/keepalived/check_nginx.sh"#每隔2秒运行上一行的脚本interval 2#权重weight 2
}vrrp_instance VI_1 {# 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUPstate MASTER# 当前实例绑定的网卡interface ens33# 保证主备节点一致virtual_router_id 51# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTERpriority 100# 主备之间同步检查的时间间隔,默认1sadvert_int 1# 认证授权的密码,防止非法节点的进入authentication {auth_type PASSauth_pass 123456}track_script {# 追踪 nginx脚本check_nginx_alive}virtual_ipaddress {192.168.121.120}
}
3、备节点配置(/etc/keepalived/keepalived.conf):
global_defs {#路由id:当前安装keepalived节点主机的标识符,全局唯一router_id keep_128
}vrrp_instance VI_1 {# 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUPstate BACKUP# 当前实例绑定的网卡interface ens33# 保证主备节点一致virtual_router_id 51# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTERpriority 80# 主备之间同步检查的时间间隔,默认1sadvert_int 1# 认证授权的密码,防止非法节点的进入authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.121.120}
}
4. 配置 Nginx
在两台 Nginx 上配置相同的站点,以确保在主节点故障时备节点可以无缝接管。
示例 Nginx 配置(/etc/nginx/nginx.conf):
http {upstream backend {server 127.0.0.1:8080; # 假设应用运行在本地的8080端口}server {listen 80;server_name example.com;location / {proxy_pass http://backend;}}
}
访问原ip
5. 启动Keepalived
cd /usr/local/keepalived/sbin/
# 启动命令
./keepalived
6. 测试高可用性
- 确保主节点正常工作,访问虚拟 IP 地址(192.168.121.120)。
- 停止主节点上的 Nginx 或 Keepalived,检查流量是否自动切换到备节点。
- 重新启动主节点,确认其恢复后是否接管虚拟 IP 地址。
访问虚拟ip 192.168.121.120
7. 配置keepalived 双主热备集群架构
Nginx+keepalived主备模式,始终存在一台服务器处于空闲状态,如何更好的把两台服务器利用起来呢,可以借助Nginx+keepalived双主架构来实现,如图23-2所示,将架构改成双主架构,也即同时两台对外两个VIP地址,同时接收用户的请求。
1、192.168.2.128的keepalived.conf配置文件代码:
global_defs {#路由id:当前安装keepalived节点主机的标识符,全局唯一router_id keep_128
}vrrp_instance VI_1 {# 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUPstate MASTER# 当前实例绑定的网卡interface ens33# 保证主备节点一致virtual_router_id 51# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTERpriority 100# 主备之间同步检查的时间间隔,默认1sadvert_int 1# 认证授权的密码,防止非法节点的进入authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.2.120}
}vrrp_instance VI_2 {# 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUPstate BACKUP# 当前实例绑定的网卡interface ens33# 保证主备节点一致virtual_router_id 52# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTERpriority 80# 主备之间同步检查的时间间隔,默认1sadvert_int 1# 认证授权的密码,防止非法节点的进入authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.2.121}
}
2、192.168.2.129的keepalived.conf配置文件代码:
! Configuration File for keepalivedglobal_defs {#路由id:当前安装keepalived节点主机的标识符,全局唯一router_id keep_129
}vrrp_instance VI_1 {# 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUPstate BACKUP# 当前实例绑定的网卡interface ens33# 保证主备节点一致virtual_router_id 51# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTERpriority 80# 主备之间同步检查的时间间隔,默认1sadvert_int 1# 认证授权的密码,防止非法节点的进入authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.2.120}
}vrrp_instance VI_2 {# 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUPstate MASTER# 当前实例绑定的网卡interface ens33# 保证主备节点一致virtual_router_id 52# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTERpriority 100# 主备之间同步检查的时间间隔,默认1sadvert_int 1# 认证授权的密码,防止非法节点的进入authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.2.121}
}
注意点:
- Keepalived主配置文件必须设置不同的VRRP名称,同时优先级和VIP设置也各不相同;
- Nginx网站总访问量为两台Nginx服务器之和,可以写脚本自动统计访问量;
- 两台Nginx为Master,存在两个VIP地址,用户从外网访问VIP,
需配置域名映射到两个VIP上方
。 - 通过外网DNS映射不同VIP的方法也称为DNS负载均衡模式;
三、虚拟ip
虚拟 IP 和真实 IP 之间的区别主要在于它们的用途和管理方式:
真实 IP
- 定义:真实 IP 是指分配给设备的唯一的、可在互联网或局域网中直接访问的 IP 地址。
- 特性:
- 每个真实 IP 地址在网络中都是唯一的。
- 真实 IP 可以直接与设备通信,比如访问某台服务器。
- 真实 IP 地址通常由互联网服务提供商(ISP)分配。
虚拟 IP
- 定义:虚拟 IP 是一个逻辑 IP 地址,它并不直接分配给某个特定的设备,而是可以在多个设备之间共享。
- 特性:
- 虚拟 IP 常用于高可用性和负载均衡,允许多个服务器通过一个共同的 IP 地址对外提供服务。
- 虚拟 IP 可以在不同的物理服务器之间动态切换,以实现故障转移。
- 虚拟 IP 通常与网络协议(如 VRRP、CARP)结合使用,管理虚拟 IP 的分配和切换。
应用场景
- 真实 IP:适用于需要被直接访问的服务器或设备,如网页服务器、数据库服务器等。
- 虚拟 IP:常用于负载均衡器、集群环境和高可用性设置,确保即使某台服务器故障,服务仍然可用。
总结
真实 IP 是指设备的实际地址,而虚拟 IP 是用于在多个设备之间实现共享和故障转移的逻辑地址。
虚拟 IP 地址并不是可以随便设定的,设定虚拟 IP 时需要遵循一些原则和规定:
- IP 地址范围
- 虚拟 IP 应该在你的网络地址范围内,避免与已有的真实 IP 地址冲突。
- 网络配置
- 在设置虚拟 IP 时,需要确保网络设备(如路由器、交换机、负载均衡器)支持虚拟 IP 的配置。
- 使用协议
- 配置虚拟 IP 通常需要使用特定的网络协议(如 VRRP、CARP 等)来管理和切换虚拟 IP 的所有权。
- 环境一致性
- 在多台服务器上使用虚拟 IP 时,确保它们在同一个子网内,并且配置相同的网络参数,以确保正常通信。
- 避免冲突
- 虚拟 IP 必须确保在整个网络中唯一,避免与其他设备或服务的 IP 地址发生冲突。
结论
虽然技术上可以在网络中设置虚拟 IP,但实际操作时需要遵循上述原则,以确保网络的正常运行和稳定性。如果不小心设置了不合适的虚拟 IP,可能会导致网络问题。
相关文章:

keepalived + nginx 实现网站高可用性(HA)
keepalive 一、keepalive简介二、实现步骤1. 环境准备2. 安装 Keepalived3. 配置 Keepalived 双机主备集群架构4. 配置 Nginx5. 启动Keepalived6. 测试高可用性7. 配置keepalived 双主热备集群架构 三、虚拟ip 一、keepalive简介 目前互联网主流的实现WEB网站及数据库服务高可用…...
有哪些编辑器,怎样选择编辑器
1. Visual Studio Code (VSCode) 特点: 轻量级且强大:启动速度快,占用资源少,但功能强大。跨平台:支持 Windows、macOS 和 Linux。丰富的扩展生态:拥有庞大的扩展市场,可以安装各种插件来扩展功…...

软件系统开发
目录 软件开发方法 软件开发生命周期 软件开发模型 敏捷方法 敏捷型方法两个特点 敏捷方法的核心思想三点 4个核心价值观 主要敏捷方法 RUP RUP的核心特点: RUP软件开发生命周期 9个核心工作流 RUP裁剪 软件系统工具 软件开发工具 需求分析工具 设计…...
浅谈RPC的实现原理与RPC实战
浅谈RPC的实现原理与RPC实战 什么是RPC?RPC框架基本原理gRPC框架介绍Http/2ProtoBuf gRPC实战一、创建项目二、导入依赖三、编写proto文件编写服务端编写客户端 什么是RPC? RPC(Remote Procedore Call),及远程过程调用,是一种在分布式系统中用于进程间…...

算法|牛客网华为机试31-40C++
牛客网华为机试 上篇:算法|牛客网华为机试21-30C 文章目录 HJ31 单词倒排HJ32 密码截取HJ33 整数与IP地址间的转换HJ34 图片整理HJ35 蛇形矩阵HJ36 字符串加密HJ37 统计每个月兔子的总数HJ38 求小球落地5次后所经历的路程和第5次反弹的高度HJ39 判断两个IP是否属于同…...

Mysql 大表limit查询优化原理
优化前( 查询耗时 114.1s) explain select * from link_exec_task limit 80000, 10 # 查询耗时 114.1s优化后( 查询耗时 0.121s) explain select * from link_exec_task a INNER JOIN (select id from link_exec_task limit 80000, 10) b on a.id b.id #0.121s原理&…...
封装axios、环境变量、api解耦、解决跨域、全局组件注入
官网:Axios中文文档 | Axios中文网 安装:npm install axios axios封装: // 1. 引入axios import axios from "axios"; import storage from /utils/storage // 2. 创建axios实例 const instance axios.create({baseURL: proces…...

CDGP|数据治理于企业而言到底有什么用?
在当今数字化时代,数据已成为企业最重要的资产之一。无论是大型跨国公司还是初创型企业,数据都扮演着驱动决策、优化运营和推动创新的关键角色。然而,仅仅拥有大量的数据并不足以确保企业的成功。如何有效管理、整合和利用这些数据࿰…...
Java学习教程,从入门到精通,Java数组(Arrays)语法知识点及案例(19)
1、Java数组(Arrays)语法知识点及案例 一、数组的基本概念 数组是多个相同类型的数据按照一定的顺序排列的集合,使用一个名字命名,通过编号(索引)的方式对这些数据进行统一管理。数组是引用数据类型&…...
11.4OpenCV_图像预处理习题02
1.身份证号码识别(结果:身份证号识别结果为:911124198108030024) import cv2 import numpy as np import paddlehub as hubdef get_text():img cv2.imread("images1/images/shenfen03.jpg")# 灰度化gray_img cv2.cvt…...
go的template示例
模板定义: type Config struct {{{- $len : len .DbConfigs -}}{{- $i : 0 -}}{{- range $key, $value : .DbConfigs}}{{title $key}} *DbConfig "yaml:\"{{lower $key}}\"" {{if lt $i (sub $len 1)}},{{end}}{{- $i add $i 1 -}}{{- end…...
『YOLO』| 断点训练、解决训练中断异常情况
文章目录 方法一方法二 当yolo在训练的时候,如果训练中断或者出现异常,可通过修改代码,从上一次断掉处重新训练,实现断点续训。 方法一 第一种方法: 按照官方给出的恢复训练代码,用yolo命令格式ÿ…...
MQTT+Disruptor 提高物联网高并发
基于springboot2.5.7 废话不多说,直接上干货: Slf4j Configuration EnableConfigurationProperties(MqttProperties.class) IntegrationComponentScan(basePackages {"扫描包路径","扫描包路径"}) public class MqttAutoConfig {…...

SpringBoot项目集成ONLYOFFICE
ONLYOFFICE 文档8.2版本已发布:PDF 协作编辑、改进界面、性能优化、表格中的 RTL 支持等更新 文章目录 前言ONLYOFFICE 产品简介功能与特点Spring Boot 项目中集成 OnlyOffice1. 环境准备2. 部署OnlyOffice Document Server3. 配置Spring Boot项目4. 实现文档编辑功…...
用于nodejs的开源违禁词检测工具 JavaScript node-word-detection
地址 : https://www.npmjs.com/package/node-word-detection github地址: https://github.com/xiaobaidadada/node-word-detection 非常节省内存的轻量级快速违禁词、词典库 检测工具 、 50万个词大约需要300MB内存、被检测的文本100字内结果在1毫秒左右。本项目没有提供词库请…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发十二:在屏幕上显示多路视频播放,可以有不同的分辨率,格式和帧率。
上图是在安防领域的要求,一般都是一个屏幕上有显示多个摄像头捕捉到的画面,这一节,我们是从文件中读取多个文件,显示在屏幕上。...

Linux权限问题(账号切换,权限,粘滞位)
1.什么是权限? 在Linux下有两种用户,分别是超级用户(root)和普通用户。超级用户可以在Linux下做任何事情,几乎不受限制,而普通用户一般只能在自己的工作目录下(/home/xxx)工作&#…...
el-upload,上传文件,后端提示信息,前端需要再次重新上传(不用重新选择文件)
1.el-upload 上传附件: <el-uploadref"upload":action"upload.url ?updateSupport upload.updateSupport":auto-upload"false":disabled"upload.isUploading":headers"upload.headers":limit"1"…...

数字信号处理Python示例(5)使用实指数函数仿真PN结二极管的正向特性
文章目录 前言一、二极管的电流-电压关系——Shockley方程二、PN结二极管正向特性的Python仿真三、仿真结果分析写在后面的话 前言 使用Python代码仿真了描述二极管的电流-电压关系的Shockley方程,对仿真结果进行了分析,说明在正向偏置区域,…...
ctfshow(89,90,92,93)--PHP特性--intval函数
Web89 源代码: include("flag.php"); highlight_file(__FILE__);if(isset($_GET[num])){$num $_GET[num];if(preg_match("/[0-9]/", $num)){die("no no no!");}if(intval($num)){echo $flag;} }审计 GET传参num。 如果在参数num中…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...