中山建站公司/小程序开发公司

中山建站公司,小程序开发公司,建设一个网站用什么软件下载,7有免费建网站Keepalived简介 ‌Keepalived‌ 是一个基于 ‌VRRP(Virtual Router Redundancy Protocol)协议‌的高可用性解决方案,主要用于实现‌服务故障自动切换(Failover)和负载均衡‌。通过管理虚拟 IP(VIP&#xf…

Keepalived简介

‌Keepalived‌ 是一个基于 ‌VRRP(Virtual Router Redundancy Protocol)协议‌的高可用性解决方案,主要用于实现‌服务故障自动切换(Failover)和负载均衡‌。通过管理虚拟 IP(VIP)和健康检查机制,确保关键服务在服务器故障时快速恢复,提升系统可用性。

Keepalived 实现 Nginx 的高可用示意图如下:

用户由初始的访问 Nginx 服务器改为访问虚拟 IP,由虚拟 IP 指定 Nginx 服务器

Keepalived 的优缺点

2.1 优点

1)‌部署简单,配置灵活‌

通过单一配置文件或结合简单脚本即可完成主备切换和健康检查配置;
支持主从(Master-Backup)和主主(Master-Master)模式,适应不同场景需求;

2)高可用性保障‌

基于 ‌VRRP 协议‌实现秒级故障切换,确保服务的连续性‌;
支持多种健康检查方式(脚本、TCP/UDP 端口、HTTP/HTTPS 请求),灵活监控服务状态;

3)‌轻量级且资源占用低‌

核心进程仅管理虚拟 IP 和健康检查,对系统资源消耗较小‌;
开源免费,无额外成本;

4)兼容性‌好

支持对 ‌Nginx、HAProxy、MySQL‌ 等多种服务的高可用管理‌;
可与 ‌LVS‌ 结合实现高可用负载均衡架构;

2.2 缺点

1)‌资源利用率低‌

主备模式下,备用节点长期处于空闲状态,造成资源浪费‌;
需额外工具(如 LVS)实现负载均衡,无法单独扩展服务容量;

2)‌脑裂(Split-Brain)风险‌

若主备节点间网络不稳定,可能导致双方同时持有 VIP,引发服务冲突‌;
需通过第三方仲裁或强制优先级配置降低脑裂概率‌;

3)‌网络依赖性强‌

依赖组播/单播通信,若防火墙未放行 VRRP 协议(IP 协议号 112),会导致心跳检测失败‌;
组播模式配置简单但易受网络波动影响,单播更稳定但需手动指定节点 IP‌;

对于云服务器,部分云厂商(如阿里云、AWS、腾讯云)需提前申请虚拟IP并绑定到实例,且需要启用单播通信;

4)‌功能局限性‌

仅提供四层(传输层)高可用,无法处理七层(应用层)流量调度‌;
复杂场景需结合其他工具(如 Nginx、HAProxy)实现完整解决方案‌;

5)性能瓶颈‌

大规模并发场景下,单节点 Keepalived 可能成为性能瓶颈,需集群化部署或结合云服务优化‌;

Keepalived 安装

1)CentOS

yum install keepalived -y

2)Ubuntu

apt-get install keepalived -y

Keepalived 配置

Keepalived 的安装目录为 /etc/keepalived,自带默认的配置文件 keepalived.conf。

keepalived.conf 的配置项如下:

4.1 global_defs 全局配置

global_defs 是 Keepalived 的全局配置块,用于定义全局参数。

  • log_file:指定日志路径

log_file syslog,输出到syslog

  • router_id:标识当前 Keepalived 节点的唯一名称,用于区分集群中的不同节点
  • notification_email:定义接收告警通知的邮箱列表(需与 smtp 配置配合使用)
global_defs {notification_email {ops@example.com      # 邮箱}
}
  • notification_email_from:设置发送告警邮件的发件人邮箱
  • smtp_server、smtp_port:指定 SMTP 服务器地址和端口,用于发送邮件通知。​默认端口为25
  • smtp_connect_timeout:设置 SMTP 服务器连接超时时间(单位:秒)。默认为30秒
  • enable_script_security:控制是否允许脚本中调用外部程序(如 systemctl 等)。建议开启(设置为 true),避免恶意脚本执行
  • lvs_flush:Keepalived 停止时是否自动清理 LVS(负载均衡)规则。默认为true
  • vrrp_garp_interval:控制 ​Gratuitous ARP(免费ARP)​ 的发送间隔(单位:秒)。默认值为0,表示单次切换仅发送 5 个 GARP 报文,间隔 200ms

当主备切换时,新的 Master 节点会广播 GARP 报文,更新网络中其他设备的 ARP 缓存,确保流量指向新主节点。

若网络设备 ARP 缓存刷新慢,可增大发送频率(如 vrrp_garp_interval 3,每3秒发送一次GARP)

  • vrrp_gna_interval:控制 ​IPv6 Gratuitous Neighbor Advertisement(免费邻居通告)​ 的发送间隔(单位:秒)。功能类似 vrrp_garp_interval,但用于 IPv6 环境
  • vrrp_skip_check_adv_addr:是否跳过对收到的 VRRP 广告报文源 IP 地址的校验。默认校验源 IP 是否属于当前 VRRP 实例的网段,若不属于则丢弃报文。

当 VRRP 报文通过隧道或复杂路由传递时,源 IP 可能不匹配,需设为 on 跳过检查。可能接收非法 VRRP 报文,导致脑裂

  • vrrp_strict:启用严格模式,强制遵守 VRRP 协议规范。校验 VRRP 报文版本、校验和等。若与不支持严格模式的设备互通,需设为 off

4.2 vrrp_instance VRRP实例

  • vrrp_instance 是 Keepalived 的核心配置块,用于定义 ​VRRP 实例​(即虚拟路由器),实现主备节点的状态切换和虚拟 IP 管理。
  • state:定义实例的初始状态,可选 MASTER(主节点)或 BACKUP(备节点)

所有节点可都设为 BACKUP,通过 priority 参数决定主备角色,避免启动竞争

  • interface:指定绑定 VRRP 实例的物理/虚拟网络接口

必须与节点实际网卡名称一致,在 CentOS 中,通过 ip addr 可查看。如 eth0

  • virtual_router_id:标识 VRRP 组的唯一 ID(范围:1-255),同一组的节点必须一致
  • priority:定义节点的优先级(范围:1-254),优先级高的节点成为 MASTER

主节点优先级应高于备节点(如主节点 100,备节点 90)

  • virtual_ipaddress:定义虚拟 IP(VIP),支持 IPv4 和 IPv6

对于云服务器,部分云厂商(如阿里云、AWS、腾讯云)需提前申请虚拟IP并绑定到实例,且需要启用单播通信;

  • track_script:引用 vrrp_script 定义的脚本,监控服务健康状态

若脚本检测失败,节点优先级降低,触发主备切换

  • track_interface:监控其他网络接口状态,若接口故障,节点优先级降低
  • unicast_src_ip 与 unicast_peer:在 ​云环境(禁用组播)​ 中使用单播通信

unicast_src_ip:本节点内网 IP
unicast_peer:对端节点内网 IP

  • authentication:配置 VRRP 报文认证,支持明文或加密
  • nopreempt:禁止优先级高的节点抢占主节点角色,需与 state BACKUP 配合使用

确保主节点故障恢复后不自动切换回来

  • preempt_delay:抢占延迟时间(单位:秒),防止网络抖动导致频繁切换

4.3 vrrp_script 检查脚本

vrrp_script 用于定义 ​自定义健康检查脚本,监控服务或资源的可用性。当检测失败时,触发 VRRP 优先级调整,实现主备切换。

  • script:指定健康检查脚本的路径或直接嵌入命令

脚本必须有执行权限,返回 0 表示成功,非 0 表示失败

  • interval:定义健康检查的执行间隔(单位:秒)。根据业务敏感度调整(如 2 秒)
  • timeout:设置脚本执行的超时时间(单位:秒),超时视为检测失败。默认无超时(需显式配置)
  • weight:调整优先级的权重值

​正值:检测成功时增加优先级
​负值:检测失败时减少优先级
​典型值:±20(需与 priority 配合)

  • fall 与 rise:定义触发状态变化的连续失败/成功次数。避免网络抖动导致误切换

fall 3:连续 3 次失败才认为检测失败
rise 2:连续 2 次成功才认为检测恢复

4.4 virtual_server 负载均衡

virtual_server 是 Keepalived 实现 ​四层负载均衡(LVS)​ 的核心配置块,用于定义虚拟服务器、后端真实服务器(Real Server)及负载策略。

  • virtual_server <VIP> 与 <Port>:虚拟服务器的 IP 和端口,客户端通过此地址访问服务

如:virtual_server 192.168.199.210 80

  • delay_loop:健康检查的时间间隔(单位:秒)。默认为5
  • ​lb_algo:负载均衡调度算法

rr:轮询(Round Robin)
wrr:加权轮询(Weighted RR)
lc:最少连接(Least Connections)
wlc:加权最少连接(Weighted LC)
sh:源地址哈希(Session Persistence)

  • ​lb_kind:定义 LVS 的工作模式

1)NAT:网络地址转换(需网关功能)

Director 修改请求报文的目标 IP 和端口(VIP → RIP),并将响应报文的源 IP 改回 VIP


2)DR:直接路由(高性能,需配置回环接口)

irector 仅修改请求报文的 MAC 地址,将请求直接转发给 Real Server

3)TUN:隧道模式(跨机房场景)

通过 IP 隧道封装请求报文,发送到 Real Server,Real Server 解封装后直接响应客户端


​云环境注意:部分云平台不支持 DR 模式

  • persistence_timeout:会话保持时间,同一客户端请求在一定时间内发往同一 Real Server,单位秒。默认为0。
  • protocol:指定协议类型,支持 TCP、UDP、SCTP
  • real_server <RIP> 与 <Port>:真实服务器的 IP 和端口
  • weight:权重值(仅 wrr/wlc 算法生效),权重越高分配流量越多
  • ​TCP_CHECK:TCP 端口连通性健康检查
  • HTTP_GET 或 ​SSL_GET:HTTP/HTTPS 状态检查
  • ​MISC_CHECK:自定义脚本检查

Keepalived 与 Nginx 负载均衡的区别

Keepalived 和 Nginx 均可实现负载均衡,但其设计目标、工作层级、功能特性及适用场景有显著差异。

5.1 Keepalived(LVS)​

1)四层负载均衡:基于 IP 和端口进行流量分发,不解析应用层数据(如 HTTP Header)

2)适用协议:TCP、UDP、SCTP,适合非 HTTP 服务(如 MySQL、Redis、VoIP)

3)​性能优势:内核态转发,吞吐量高(可达百万级并发)

4)源 IP 哈希:同一客户端 IP 的请求始终转发到同一后端服务器

5)基础检查:TCP/UDP 端口连通性

6)脚本扩展:通过 MISC_CHECK 执行自定义脚本(如检查 MySQL 状态)

7)性能:内核态转发,适合高并发、低延迟场景(如视频流、游戏服务器)

8)​扩展性:功能固定,依赖 LVS 内核模块,无法灵活扩展

5.2 Nginx

​1)七层负载均衡:解析 HTTP/HTTPS 协议,支持基于 URL、Header、Cookie 的路由

2)​适用协议:HTTP、HTTPS、HTTP/2、WebSocket、gRPC

3)功能扩展:支持缓存、限流、重写、SSL 终止等高级功能

​4)主动检查:定期向后端发送 HTTP 请求,验证状态码(如 200)和响应内容

5)​被动检查:根据请求失败率自动标记异常节点

6)性能:用户态处理,虽不如 LVS 高效,但通过优化(如启用 reuseport)可支持数万并发

7)扩展性:模块化设计,支持 Lua 脚本、动态模块(如 ngx_http_geoip_module)

Keepalived + Nginx

6.1 准备工作

两台服务器,地址分别为 192.168.199.210、192.168.199.211,虚拟IP为192.168.199.223。

6.2 安装 Keepalived

两台服务器分别安装 Keepalived

6.3 安装 Nginx

两台服务器分别安装 Nginx。使用 Docker compose 安装

1)创建 docker-compose.yml,内容如下:

version: '3.8'
services:nginx:image: nginx:1.27-alpine-otelcontainer_name: my-nginxports:- 80:80volumes:- ./html:/usr/share/nginx/html- ./conf.d:/etc/nginx/conf.d- ./logs:/var/log/nginx

2)在同一目录中,创建 html、conf.d、logs 三个文件夹

3)在 conf.d 目录中 default.conf 文件,内容如下:

server {listen       80;server_name  localhost;location / {root   /usr/share/nginx/html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

配置 nginx,监听 80 端口,根目录指向 /usr/share/nginx/html。结合 docker-compose.yml 卷的映射,根目录执行 2)中创建的 html 目录。默认访问文件为 index.html 或 index.htm。

4)在 html 目录中创建 index.html

<h1>Hello Docker Nginx 192.168.199.210!</h1>

在 html 中,标题显示当前服务器的 IP。便于在浏览器中判定 keepalived 是否实现自动切换。

5)执行安装部署

docker-compose up -d

6.4 编写 Nginx 检测脚本

1)编写 check_nginx.sh 脚本文件,内容如下:

#!/bin/bash
echo "执行 nginx 检测"# 获取 nginx 容器的id
containerId=$(docker ps | grep my-nginx | awk '{print $1}')
echo "my-nginx docker id:"$containerId
# 如果 容器id 为空,说明容器已停止,需要切换
if [ "$containerId" == "" ]; thenecho "nginx 停止"exit 1  # nginx 容器不存在,触发VIP切换
fi
echo "nginx 执行中..."
exit 0

在 4.3 介绍 vrrp_script 脚本时说明,脚本返回 0 时,表示成功,非 0 表示失败。所以当 nginx 容器不存在时,返回 1,否则返回 0

2)设置脚本为可执行

chmod +x check_nginx.sh

6.5 编写 keepalived.conf 配置

1)192.168.199.210 的 keepalived.conf 配置如下:

global_defs {router_id nginx_master  # 唯一标识
}vrrp_instance VI_1 {state MASTER            # 初始角色interface enp0s3        # 网卡名称(通过 ip addr 确认)virtual_router_id 51    # 集群内唯一 ID(范围 1-255)priority 100            # 优先级(主节点 > 备份节点)authentication {auth_type PASSauth_pass 123456  # 集群节点相同密码}virtual_ipaddress {192.168.199.223/24    # 虚拟 IP(VIP)}# 绑定健康检查脚本track_script {chk_nginx}
}# 健康检查脚本配置
vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2weight -5
}

2)192.168.199.211 中的 keepalived.conf 配置类似,差异如下:

global_defs {router_id nginx_bakcup  # 唯一标识
}vrrp_instance VI_1 {state BACKUP            # 初始角色interface enp0s3          # 绑定到物理网卡(通过 ip addr 确认名称)virtual_router_id 51    # 集群内唯一 ID(范围 1-255)priority 90            # 优先级(主节点 > 备份节点)
}

6.6 启动 Keepalived

两台服务器都启动 Keepalived。命令如下:

systemctl start keepalived        # 启动

systemctl enable keepalived    # 开机自启动

6.7 测试验证

关闭 192.168.199.210 中的 nginx

[root@localhost nginx]# docker ps
CONTAINER ID   IMAGE                    COMMAND                   CREATED      STATUS         PORTS                               NAMES
8f108796688a   nginx:1.27-alpine-otel   "/docker-entrypoint.…"   6 days ago   Up 2 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   my-nginx
[root@localhost nginx]# docker stop 8f108796688a
8f108796688a

重新访问

结尾

以上为本篇分析的全部内容。

关于本篇内容你有什么自己的想法或独到见解,欢迎在评论区一起交流探讨下吧。

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

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

相关文章

WPS JS宏编程教程(从基础到进阶)--第二部分:WPS对象模型与核心操作

第二部分&#xff1a;WPS对象模型与核心操作 WPS对象的属性、方法、集合 工作簿对象常用表达方式工作表对象常用表达方式单元格对象常用表达方式 单元格操作实战 单元格复制与重定位单元格偏移与尺寸调整 颜色设置专题 索引颜色与RGB颜色按条件动态设置单元格颜色 第二部分&…

基于DrissionPage的TB商品信息采集与可视化分析

一、项目背景 随着电子商务的快速发展,淘宝作为中国最大的电商平台之一,拥有海量的商品信息。这些数据对于市场分析、用户行为研究以及竞争情报收集具有重要意义。然而,由于淘宝的反爬虫机制和复杂的页面结构,直接获取商品信息并不容易。尤其是在电商行业高速发展的今天,商…

JS数组方法

数组方法 一、数组 JavaScript 数组的大小是可调整的&#xff0c;并且可以包含不同 数据类型。&#xff08;当不需要这些特性时&#xff0c;请使用 类型数组。&#xff09; 注&#xff1a;JavaScript 类型数组是类似数组的对象&#xff0c;它提供了一种在内存缓冲区中读取和写…

【一起学Rust | Tauri2.0框架】深入浅出 Tauri 2.0 应用调试:从新手到专家的蜕变

前言 Tauri 是一款备受瞩目的跨平台桌面应用开发框架&#xff0c;它允许开发者使用 Web 技术栈&#xff08;HTML、CSS、JavaScript&#xff09;构建高性能、安全的原生应用。Tauri 2.0 的发布带来了诸多令人兴奋的新特性和改进&#xff0c;进一步提升了开发体验和应用性能。然…

TCP/IP三次握手的过程,为什么要3次?

一&#xff1a;过程 第一次&#xff08;SYN&#xff09;&#xff1a; 客户端发送一个带有SYN标志的TCP报文段给服务器&#xff0c;设置SYN1&#xff0c;并携带初始序列号Seqx&#xff08;随机值&#xff09;&#xff0c;进入SYN_SENT状态。等待服务器相应。 第二次&#xff08…

消息队列性能比拼: Kafka vs RabbitMQ

本内容是对知名性能评测博主 Anton Putra Kafka vs RabbitMQ Performance 内容的翻译与整理, 有适当删减, 相关数据和结论以原作结论为准。 简介 在本视频中&#xff0c;我们将首先比较 Apache Kafka 和传统的 RabbitMQ。然后&#xff0c;在第二轮测试中&#xff0c;会将 Kaf…

打磨和修改:字帖自动生成

功能增加一些。 一个人和大语言模型对话的结果。 不过是重复性劳动&#xff0c;特别需要创意的地方还是不容易做到。

电脑干货:万能驱动--EasyDrv8

目录 万能驱动EasyDrv8 功能介绍 主程序界面 驱动解压与安装 PE环境支持 系统部署环境 桌面环境一键解决方案 万能驱动8电脑版是由IT天空出品的一款智能识别电脑硬件并自动安装驱动的工具&#xff0c;一般又称为it天空万能驱动&#xff0c;万能驱动vip版&#xff0c;简称…

Sentinel 限流利器(功能以及源码解析)

Sentinel简介 Sentinel是阿里开源的一款面向分布式、多语言异构化服务架构的流量治理组件。 主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 核心概念 资源 资源是…

子数组 之 logTrick算法,求解或,与,LCM,GCD

文章目录 gcd的问题最大公约数 求解子数组的&,|,lcm,gcd的最值or计数问题&#xff0c;如果采用暴力的做法&#xff0c;那么时间复杂度会来到o(n^2),其实在求解的过程中&#xff0c;会出现很多的结果不变的情况&#xff0c;所以我们就可以提前结束 存在一定的单调性&#x…

应用服务接口第二次请求一直pending问题

目录 一、问题背景二、问题排查过程三、解决方案四、总结 一、问题背景 升级内容发布到灰度环境&#xff0c;验证相关服务&#xff0c;查看接口调用日志&#xff0c;发现第一次请求正常&#xff0c;第二次相同接口请求就一直pending&#xff0c;其他服务也是如此 二、问题排查…

嵌入式八股RTOS与Linux---网络系统篇

前言 关于计网的什么TCP三次握手 几层模型啊TCP报文啥的不在这里讲,会单独分成一个计算机网络模块   这里主要介绍介绍lwip和socket FreeRTOS下的网络接口–移植LWIP 实际上FreeRTOS并不自带网络接口,我们一般会通过移植lwip协议栈让FreeRTOS可以通过网络接口收发数据,具体可…

推荐一款好看的 vue3 后台模板

SoybeanAdmin 项目简介 SoybeanAdmin 是一个基于最新前端技术栈的清新、优雅、高颜值且功能强大的后台管理模板。它采用 Vue3, Vite5, TypeScript, Pinia, NaiveUI 和 UnoCSS 构建&#xff0c;为开发者提供了一个现代化、高效且易于扩展的后台管理系统解决方案。 主要特点&am…

【智能体】从一个聊天工作流了解LangGraph

1. 前言 这篇文章将从如何搭建一个带网络搜索功能的聊天机器人工作流&#xff0c;带你初步了解 LangGraph。 2. 前提条件 已搭建 Python 开发环境&#xff0c;使用 3.11 以上版本。 已熟悉 Python 基础语法。可参考&#xff1a;【LLM】Python 基础语法_llm python入门-CSDN博…

Softmax 回归 + 损失函数 + 图片分类数据集

Softmax 回归 softmax 回归是机器学习另外一个非常经典且重要的模型&#xff0c;是一个分类问题。 下面先解释一下分类和回归的区别&#xff1a; 简单来说&#xff0c;分类问题从回归的单输出变成了多输出&#xff0c;输出的个数等于类别的个数。 实际上&#xff0c;对于分…

MySQL-存储过程

介绍 基本语法 创建 调用 查看 删除 变量 系统变量 查看 设置 用户定义变量 赋值 使用 局部变量 声明 赋值 流程控制 参数 条件结构 IF case 循环结构 while repeat loop 游标 条件处理程序 介绍 举个简单的例子&#xff0c;我们先select某数据&…

在 Linux(Ubuntu / CentOS 7)上快速搭建我的世界 MineCraft 服务器,并实现远程联机,详细教程

Linux 部署 MineCraft 服务器 详细教程&#xff08;丐版&#xff0c;无需云服务器&#xff09; 一、虚拟机 Ubuntu 部署二、下载 Minecraft 服务端三、安装 JRE 21四、安装 MCS manager 面板五、搭建服务器六、本地测试连接七、下载樱花&#xff0c;实现内网穿透&#xff0c;邀…

批量取消 PDF 文档中的所有超链接

在 PDF 文档中我们可以插入各种各样的文本也可以给文本设置字体&#xff0c;颜色等多种样式&#xff0c;同时还可以给文字或者图片添加上超链接&#xff0c;当我们点击超链接之后&#xff0c;就会跳转到对应的网页。有时候这会对我们的阅读或者使用形成一定的干扰&#xff0c;今…

Linux学习笔记(应用篇三)

基于I.MX6ULL-MINI开发板 LED学习GPIO应用编程输入设备 开发板中所有的设备&#xff08;对象&#xff09;都会在/sys/devices 体现出来&#xff0c;是 sysfs 文件系统中最重要的目录结构 /sys下的子目录说明/sys/devices这是系统中所有设备存放的目录&#xff0c;也就是系统中…

递归、搜索与回溯第四讲:floodfill算法

递归、搜索与回溯第四讲&#xff1a;floodfill算法 1.Floodfill算法介绍2.图像渲染3.岛屿数量4.岛屿的最大面积5.被围绕的区域6.太平洋大西洋水流问题7.扫雷游戏8.衣橱整理 1.Floodfill算法介绍 2.图像渲染 3.岛屿数量 4.岛屿的最大面积 5.被围绕的区域 6.太平洋大西洋水流问题…