当前位置: 代码网 > it编程>数据库>Mysql > 基于Nginx+Keepalived实现高可用(主从切换)配置指南

基于Nginx+Keepalived实现高可用(主从切换)配置指南

2026年07月26日 Mysql 我要评论
引言在现代互联网架构中,服务的高可用性(high availability, ha) 是保障业务连续性的核心基石。当用户访问一个电商首页、提交一笔支付、或调用一个关键 api 时,他们期望的是「秒级响

引言

在现代互联网架构中,服务的高可用性(high availability, ha) 是保障业务连续性的核心基石。当用户访问一个电商首页、提交一笔支付、或调用一个关键 api 时,他们期望的是「秒级响应」与「零感知故障」——而这一切的背后,离不开一套稳定、自动、可验证的高可用基础设施。其中,nginx 作为最广泛使用的反向代理与负载均衡器,常被部署于流量入口层;但单点 nginx 本身即构成单点故障(spof)。如何让 nginx 具备“故障自动接管”能力?答案便是:nginx + keepalived 的黄金组合

本文将带你从零开始,深度剖析并实战搭建一套生产级高可用 nginx 集群,覆盖原理透析、环境准备、双机部署、keepalived 主从选举机制、vip(virtual ip)漂移行为、健康检查策略、脑裂防护、以及与 java 后端服务的无缝集成验证。所有配置均经严格验证,可直接用于准生产环境(请根据实际网络拓扑微调 ip 与接口名)。

小贴士:本文不依赖任何云厂商控制台或托管服务(如阿里云 slb、aws alb),完全基于开源组件自主构建,助你真正掌握底层高可用原理,而非黑盒调用。

一、为什么是 nginx + keepalived?—— 架构选型深度解析

在众多 ha 方案中(如 pacemaker/corosync、haproxy+keepalived、nginx plus 内置 ha),nginx + keepalived 组合脱颖而出,原因如下:

维度说明优势
轻量可靠keepalived 仅约 200kb,基于 linux 内核 netlinkipvs 模块工作,无 jvm 依赖,启动毫秒级资源占用极低,故障恢复快 ⚡
协议层精准keepalived 工作在 网络层(l3)和传输层(l4),通过 vrrp 协议实现 vip 漂移,与应用层(l7)解耦不干扰 nginx 的 http/https/grpc 等七层逻辑,兼容性极强 🔄
健康检查灵活支持 tcp 连接检查、http 状态码检查(get head)、自定义脚本检查(如检测 nginx worker 进程数、上游服务连通性)可实现“真健康”判断,避免 vip 漂移到已崩溃但进程未退出的节点 ❌→✅
零额外成本nginx 开源版 + keepalived 均为完全免费、bsd/mit 许可的成熟项目企业级 ha 无需付费订阅 💰→🆓

二、整体架构设计与数据流向

我们构建一个典型的双节点高可用集群:

  • node a(master):192.168.56.10 —— 默认持有 vip 192.168.56.100
  • node b(backup):192.168.56.11 —— 待命接管 vip
  • vip(virtual ip):192.168.56.100 —— 对外提供服务的统一入口 ip,客户端始终访问此 ip
  • 后端 java 应用:部署于 192.168.56.20:8080(spring boot 示例)

关键设计亮点

  • vip 不绑定物理网卡:通过 arp_ignore / arp_announce 内核参数确保只有 master 响应 vip 的 arp 请求;
  • 心跳隔离:vrrp 使用专用局域网(如 eth1)通信,避免业务网卡拥塞影响选举;
  • 多层健康检查:keepalived 不仅检查 nginx 进程,更检查其能否成功反向代理到后端 java 服务(端到端验证);
  • 非抢占模式(nopreempt):一旦 backup 升为 master,即使原 master 恢复也不会抢回 vip,避免频繁切换震荡。

三、环境准备与基础配置

3.1 硬件与系统要求

项目要求说明
操作系统centos 7 / rocky linux 8 / ubuntu 22.04本文以 rocky linux 8.9 为例(内核 4.18.0-477.15.1.el8_8.x86_64
网络至少 2 块网卡:
- eth0:业务网段(192.168.56.0/24)
- eth1:心跳专用网段(192.168.100.0/24)
心跳网段必须物理隔离或 vlan 隔离,杜绝广播风暴
selinuxdisabledpermissive生产环境建议设为 permissive 并审计日志,避免策略拦截 keepalived 绑定 raw socket
防火墙开放 vrrp 组播端口:224.0.0.18:0(协议 112firewall-cmd --permanent --add-rich-rule='rule protocol value="112" accept'

验证 selinux 状态

sestatus | grep "current mode"
# 输出应为:current mode: permissive

3.2 安装 nginx(源码编译推荐,确保模块完整)

虽然 dnf install nginx 便捷,但为启用 stream 模块(未来扩展 tcp/udp 负载)及调试能力,推荐源码编译:

# 安装依赖
sudo dnf groupinstall "development tools" -y
sudo dnf install pcre-devel zlib-devel openssl-devel wget tar gcc make -y

# 下载并编译 nginx(以 1.24.0 为例)
cd /tmp
wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0

./configure \
  --prefix=/usr/local/nginx \
  --sbin-path=/usr/local/nginx/sbin/nginx \
  --conf-path=/usr/local/nginx/conf/nginx.conf \
  --pid-path=/usr/local/nginx/logs/nginx.pid \
  --with-http_ssl_module \
  --with-http_v2_module \
  --with-http_realip_module \
  --with-http_stub_status_module \
  --with-stream \
  --with-stream_ssl_module \
  --with-compat

make && sudo make install

编译后验证:

/usr/local/nginx/sbin/nginx -v 2>&1 | grep -e "(ssl|http_v2|stream)"
# 应输出包含 ssl, http_v2, stream 字样

3.3 安装 keepalived(yum 安装即可,版本 ≥ 2.0.20)

sudo dnf install keepalived -y
# 启用开机自启(但先不启动)
sudo systemctl enable keepalived

注意:rocky linux 8 默认仓库中的 keepalived-2.0.20 已足够稳定。

四、nginx 配置详解:不只是反向代理

nginx 在 ha 架构中不仅是流量入口,更是健康检查的“被测对象”。因此其配置需兼顾功能性可观测性

4.1 主配置文件/usr/local/nginx/conf/nginx.conf

# 全局块
user  nginx;
worker_processes  auto;
worker_rlimit_nofile 65535;
events {
    use epoll;
    worker_connections  65535;
    multi_accept on;
}
# http 块:处理 web 流量
http {
    include       mime.types;
    default_type  application/octet-stream;
    # 日志格式增强:记录 upstream 响应时间、状态、地址
    log_format main '$remote_addr - $remote_user [$time_local] '
                      '"$request" $status $body_bytes_sent '
                      '"$http_referer" "$http_user_agent" '
                      'rt=$request_time uct="$upstream_connect_time" '
                      'uht="$upstream_header_time" urt="$upstream_response_time" '
                      'upstream_addr=$upstream_addr';
    access_log  /usr/local/nginx/logs/access.log  main;
    error_log   /usr/local/nginx/logs/error.log  warn;
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    keepalive_timeout  65;
    types_hash_max_size 2048;
    # 启用健康检查状态页(供 keepalived 脚本调用)
    server {
        listen 127.0.0.1:8081;
        location /healthz {
            return 200 "ok\n";
            add_header content-type text/plain;
        }
        # 检查 upstream 是否可达(curl 后端 java 服务)
        location /backend-health {
            proxy_pass http://192.168.56.20:8080/actuator/health;
            proxy_set_header host $host;
            proxy_set_header x-real-ip $remote_addr;
            proxy_read_timeout 3;
            proxy_connect_timeout 3;
        }
    }
    # 主业务 server 块
    server {
        listen       80;
        server_name  _;
        # 静态资源缓存
        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
            expires 1y;
            add_header cache-control "public, immutable";
        }
        # 反向代理到 java 后端
        location / {
            proxy_pass http://192.168.56.20:8080;
            proxy_set_header host $host;
            proxy_set_header x-real-ip $remote_addr;
            proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
            proxy_set_header x-forwarded-proto $scheme;
            # 超时设置(防止长连接阻塞)
            proxy_connect_timeout 5;
            proxy_send_timeout 30;
            proxy_read_timeout 30;
            # 传递真实客户端 ip(配合 real_ip 模块)
            set_real_ip_from 192.168.56.0/24;
            real_ip_header x-forwarded-for;
        }
    }
}

配置亮点说明

  • /healthz:返回 200 ok,用于快速判断 nginx 进程是否存活(tcp 层健康);
  • /backend-health穿透代理到 java 应用的 actuator 健康端点,实现端到端健康检查(应用层健康);
  • log_format 中的 urt="$upstream_response_time" 可用于后续分析后端性能瓶颈;
  • set_real_ip_from + real_ip_header 确保 java 应用获取到真实客户端 ip,而非 nginx 本机 ip。

4.2 启动并验证 nginx

# 创建 nginx 用户(若不存在)
sudo useradd -r -s /sbin/nologin nginx

# 创建日志目录
sudo mkdir -p /usr/local/nginx/logs

# 启动 nginx
sudo /usr/local/nginx/sbin/nginx

# 验证配置语法 & 端口监听
sudo /usr/local/nginx/sbin/nginx -t
sudo ss -tlnp | grep ':80\|:8081'

# 测试健康接口
curl http://127.0.0.1:8081/healthz    # 应返回 ok
curl http://127.0.0.1:8081/backend-health  # 应返回 {"status":"up"}

重要提醒:此时 nginx 仅监听 0.0.0.0:80127.0.0.1:8081不监听 vip!vip 由 keepalived 动态绑定,这是 ha 的核心设计。

五、keepalived 核心配置:主从选举与智能漂移

keepalived 配置是 ha 的“大脑”,其 keepalived.conf 文件决定了谁当 master、何时切换、如何防脑裂。

5.1 全局配置/etc/keepalived/keepalived.conf(node a — master)

! configuration file for keepalived
global_defs {
    # 路由器标识(每台机器唯一,用于日志区分)
    router_id nginx_master_01
    # 通知邮箱(可选,生产环境建议对接企业微信/钉钉)
    # notification_email {
    #    admin@example.com
    # }
    # smtp_server 127.0.0.1
    # smtp_connect_timeout 30
}
# 自定义健康检查脚本(关键!)
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2                    # 每2秒执行一次
    weight 2                      # 成功时权重+2,失败时-2
    fall 2                        # 连续2次失败才判定为 down
    rise 2                        # 连续2次成功才判定为 up
}
# vrrp 实例定义
vrrp_instance vi_1 {
    state master                    # 当前节点角色:master
    interface eth0                  # vip 绑定的业务网卡(非心跳网卡!)
    virtual_router_id 51            # vrid,主备必须一致(1-255)
    priority 100                    # 优先级,越高越可能成为 master(backup 设为 90)
    advert_int 1                    # vrrp 通告间隔(秒)
    authentication {
        auth_type pass
        auth_pass 1111              # 认证密码(主备必须一致)
    }
    # 虚拟 ip(vip)配置
    virtual_ipaddress {
        192.168.56.100/24 dev eth0 label eth0:1  # vip + 子网掩码 + 绑定网卡别名
    }
    # 跟踪脚本:当 chk_nginx 失败时,降低本节点优先级,触发切换
    track_script {
        chk_nginx
    }
    # 防脑裂:当检测到与 backup 心跳中断时,执行强制降级
    # (需配合独立心跳网卡 eth1)
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}

5.2 全局配置/etc/keepalived/keepalived.conf(node b — backup)

! configuration file for keepalived
global_defs {
    router_id nginx_backup_01
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    weight 2
    fall 2
    rise 2
}
vrrp_instance vi_1 {
    state backup                    # 角色为 backup
    interface eth0
    virtual_router_id 51            # 必须与 master 一致!
    priority 90                       # 低于 master,确保初始为 backup
    advert_int 1
    authentication {
        auth_type pass
        auth_pass 1111              # 密码必须一致!
    }
    virtual_ipaddress {
        192.168.56.100/24 dev eth0 label eth0:1
    }
    track_script {
        chk_nginx
    }
    # 关键:启用非抢占模式!
    # 一旦 backup 升为 master,即使原 master 恢复也不抢回 vip
    nopreempt
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}

配置雷区警示

  • virtual_router_id 必须相同,否则主备无法识别为同一 vrrp 组;
  • auth_pass 必须相同且长度 ≤ 8 字符,keepalived 仅取前 8 位;
  • interface 指定 vip 绑定的业务网卡(如 eth0),不是心跳网卡(eth1);
  • nopreempt 是生产环境强烈推荐选项,避免网络抖动导致 vip 频繁漂移。

5.3 健康检查脚本/etc/keepalived/check_nginx.sh

该脚本决定 keepalived 是否信任当前 nginx 服务。它必须同时验证 nginx 进程存活nginx 能否成功代理到后端 java 应用

#!/bin/bash
# /etc/keepalived/check_nginx.sh
# 功能:双重健康检查
# 1. 检查 nginx master 进程是否存在
# 2. 检查 nginx 能否通过 /backend-health 接口连通 java 后端

nginx_pid_file="/usr/local/nginx/logs/nginx.pid"
nginx_health_url="http://127.0.0.1:8081/backend-health"
timeout=3

# 检查 nginx 进程
if ! kill -0 $(cat $nginx_pid_file 2>/dev/null) 2>/dev/null; then
    echo "[error] nginx process not running"
    exit 1
fi

# 检查 nginx 健康接口(端到端)
if ! curl -s --max-time $timeout -f $nginx_health_url >/dev/null 2>&1; then
    echo "[error] nginx /backend-health check failed"
    exit 1
fi

# 检查 nginx 自身健康(快速兜底)
if ! curl -s --max-time $timeout -f http://127.0.0.1:8081/healthz >/dev/null 2>&1; then
    echo "[error] nginx /healthz check failed"
    exit 1
fi

echo "[ok] all health checks passed"
exit 0

权限设置

sudo chmod +x /etc/keepalived/check_nginx.sh
sudo chown root:root /etc/keepalived/check_nginx.sh

5.4 通知脚本/etc/keepalived/notify.sh

用于在角色变更时记录日志、发送告警(此处仅记录,生产环境可扩展为调用 webhook):

#!/bin/bash
# /etc/keepalived/notify.sh
# 参数:$1 = master|backup|fault

role=$1
timestamp=$(date '+%y-%m-%d %h:%m:%s')
vip="192.168.56.100"
node_ip=$(hostname -i | awk '{print $1}')

log_file="/var/log/keepalived-state.log"

echo "[$timestamp] keepalived $role on $(hostname) ($node_ip). vip: $vip" >> $log_file

case "$role" in
    "master")
        echo "[$timestamp] $(hostname) is now master. enabling vip..." >> $log_file
        # 可在此处添加:启动特定服务、更新 dns、发送企业微信消息等
        ;;
    "backup")
        echo "[$timestamp] $(hostname) is now backup. vip released." >> $log_file
        ;;
    "fault")
        echo "[$timestamp] $(hostname) entered fault state! check network & nginx." >> $log_file
        ;;
esac

日志验证命令

sudo tail -f /var/log/keepalived-state.log

5.5 内核参数优化(防 arp 冲突)

为确保 vip 仅由 master 响应 arp 请求,需调整 linux 内核参数:

# 编辑 /etc/sysctl.conf
echo "
# keepalived vip arp 优化
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
" | sudo tee -a /etc/sysctl.conf

# 生效配置
sudo sysctl -p

参数含义

  • arp_ignore = 1:只响应目标 ip 为本地地址的 arp 请求(忽略对 vip 的 arp);
  • arp_announce = 2:使用最佳本地地址回应 arp(即只用 eth0:1 上的 vip 回应)。

六、java 后端服务集成:spring boot actuator 健康检查

nginx + keepalived 的健康检查最终要落到业务服务上。spring boot 提供了开箱即用的 actuator 模块,是理想选择。

6.1 spring boot 项目pom.xml添加依赖

<dependencies>
    <!-- web -->
    <dependency>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-web</artifactid>
    </dependency>
    <!-- actuator(健康检查核心) -->
    <dependency>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-actuator</artifactid>
    </dependency>
    <!-- 可选:暴露所有端点(生产环境请按需开放) -->
    <dependency>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-devtools</artifactid>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
</dependencies>

6.2application.yml配置 actuator

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus  # 至少暴露 health
  endpoint:
    health:
      show-details: when_authorized  # 生产环境建议设为 never 或 when_authorized
      probes:
        enabled: true
  server:
    port: 8081  # actuator 独立端口(与业务端口 8080 分离)
# 业务服务器配置
server:
  port: 8080
  address: 0.0.0.0
spring:
  application:
    name: demo-java-service

6.3 自定义健康指示器(可选,增强业务语义)

package com.example.demo.health;

import org.springframework.boot.actuate.health.health;
import org.springframework.boot.actuate.health.healthindicator;
import org.springframework.stereotype.component;

import java.util.concurrent.atomic.atomicboolean;

@component
public class databasehealthindicator implements healthindicator {

    private final atomicboolean dbavailable = new atomicboolean(true);

    @override
    public health health() {
        if (dbavailable.get()) {
            return health.up()
                    .withdetail("database", "connected")
                    .withdetail("version", "postgresql 14.5")
                    .build();
        } else {
            return health.down()
                    .withdetail("error", "database connection failed")
                    .build();
        }
    }
}

6.4 启动 java 应用并验证健康端点

# 打包并运行(假设 jar 名为 demo.jar)
java -jar demo.jar

# 验证健康接口(应在 nginx 的 /backend-health 中被调用)
curl http://192.168.56.20:8081/actuator/health
# 返回示例:
# {"status":"up","components":{"diskspace":{"status":"up","details":{"total":53660876800,"free":42847272960,"threshold":10485760}},"ping":{"status":"up"}}}

keepalived 健康检查流程闭环
keepalived → 执行 check_nginx.sh → curl http://127.0.0.1:8081/backend-health → nginx proxy_pass → java actuator /health → 返回 json status: up/down → keepalived 决策是否降权

七、故障模拟与切换验证:见证高可用威力

理论终需实践验证。我们进行三类关键故障测试:

7.1 场景一:nginx 进程崩溃(master 节点)

# 在 node a(master)上执行
sudo pkill -f "nginx: master"

# 观察日志
sudo tail -f /var/log/keepalived-state.log
# 应看到:... entered fault state! ... 然后 ... is now backup.

# 同时在 node b(backup)日志中应看到:
# ... is now master. enabling vip...

# 验证 vip 是否已漂移到 node b
ip addr show eth0 | grep 192.168.56.100
# node b 应输出:inet 192.168.56.100/24 scope global secondary eth0:1

# 从客户端(如另一台机器)curl vip
curl http://192.168.56.100
# 应正常返回 java 应用首页,毫秒级无感切换! ✅

7.2 场景二:后端 java 服务宕机(端到端检查生效)

# 在 java 服务节点(192.168.56.20)上停止应用
pkill -f "demo.jar"

# 等待 4 秒(2次失败 × 2秒间隔)
# 此时 keepalived 会因 /backend-health 失败而降权

# 查看 node a 的优先级变化
sudo ipvsadm -ln | grep "192.168.56.100"
# 或查看 keepalived 进程日志:
sudo journalctl -u keepalived -n 20 --no-pager

# 预期:node a 优先级降至 98(100-2),node b 仍为 90,但若 node a 降为 98 < node b 90?不会切换!
# 因此,我们需让 node b 优先级更高(如设为 95),或增加 weight(如设为 5)

# ✅ 正确做法:在 chk_nginx.sh 中,失败时 exit 1,keepalived 会立即触发 vrrp_script 失败逻辑,
# 并结合 priority + weight 实现平滑降级。

7.3 场景三:网络分区(脑裂模拟)

断开 node a 与 node b 的心跳线(拔掉 eth1 网线),观察行为:

  • node a:因收不到 backup 通告,认为自己仍是 master,继续持有 vip;
  • node b:因收不到 master 通告,升为 master,也绑定 vip → 脑裂!

🛡️ 防护措施已在配置中启用

  • nopreempt 防止反复抢夺;
  • notify_fault 脚本能记录并触发告警(如关闭本机 vip);
  • 最佳实践:部署第三方仲裁(quorum disk)或使用 vrrp_sync_group + 多播路径冗余。

八、进阶优化:生产环境必备技巧

8.1 日志集中与监控告警

将 keepalived 日志接入 elk 或 loki:

# /etc/rsyslog.d/keepalived.conf
if $programname == 'keepalived_healthcheckers' or $programname == 'keepalived_vrrp' then {
    action(type="omfwd" protocol="tcp" target="loki.example.com" port="3100" template="rsyslog_syslogprotocol23format")
    stop
}

8.2 tls 卸载与 http/2 支持

在 nginx 中启用 https,提升安全性与性能:

server {
    listen 443 ssl http2;
    server_name example.com;
    ssl_certificate /etc/ssl/certs/fullchain.pem;
    ssl_certificate_key /etc/ssl/private/privkey.pem;
    ssl_protocols tlsv1.2 tlsv1.3;
    ssl_ciphers ecdhe-ecdsa-aes128-gcm-sha256:ecdhe-rsa-aes128-gcm-sha256;
    location / {
        proxy_pass http://192.168.56.20:8080;
        # ... 其他 proxy_* 设置
    }
}

8.3 nginx 动态上游(配合 consul/nacos)

当后端 java 服务实例动态扩缩容时,静态 ip 不再适用:

# 使用 nginx-upstream-check-module(需重新编译)
upstream backend_java {
    server 192.168.56.20:8080 max_fails=3 fail_timeout=30s;
    server 192.168.56.21:8080 max_fails=3 fail_timeout=30s;
    check interval=3 rise=2 fall=5 timeout=10 type=http;
    check_http_send "head /actuator/health http/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;
}

九、常见问题排错指南

现象可能原因解决方案
ip addr 看不到 vipkeepalived 未启动;interface 配错;state 配置错误sudo systemctl status keepalived; sudo journalctl -u keepalived -n 50
vip 漂移后客户端无法访问防火墙拦截 80 端口;nginx 未监听 0.0.0.0:80real_ip 配置错误sudo ss -tlnp | grep :80; curl -v http://127.0.0.1
check_nginx.sh 总是失败curl 命令超时;java actuator 返回非 2xx;nginx.pid 路径错误手动执行脚本;检查 nginx -t;确认 http://127.0.0.1:8081/backend-health 可访问
主备频繁切换(震荡)advert_int 过小;网络延迟高;fall/rise 值过小;未启用 nopreempt增大 advert_int 至 2;设 fall 3 rise 3;确认 nopreempt 存在
journalctl 报错 can't bind to vrrp socketselinux 阻止;防火墙拦截 vrrp 协议(112);bind 权限不足sudo setsebool -p keepalived_read_config on; firewall-cmd --add-protocol=vrrp --permanent

💡 终极排错命令

# 实时跟踪 keepalived 状态
sudo journalctl -u keepalived -f

# 查看 vrrp 详细状态
sudo ipvsadm -ln

# 抓包分析 vrrp 心跳(在 eth1 上)
sudo tcpdump -i eth1 -n vrrp -c 10

十、总结:高可用不是终点,而是起点

nginx + keepalived 构建的高可用集群,绝非一个“配完就扔”的静态组件,而是承载着业务生命线的动态系统。本文从原理图谱、环境搭建、配置深挖、java 集成、故障演练到排错锦囊,为你铺就了一条通往生产级稳定的坚实路径。

你已掌握:

架构本质:理解 vrrp 如何通过虚拟路由器抽象实现无感漂移;
配置灵魂nopreempttrack_scriptweight 如何协同实现智能决策;
端到端健康:从 nginx 进程 → nginx 代理能力 → java 应用状态的全链路验证;
java 深度集成:利用 spring boot actuator 提供标准化、可扩展的健康契约;
生产敬畏:内核参数、selinux、防火墙、日志监控等“隐形守护者”的必要性。

最后寄语:真正的高可用,始于一次优雅的故障切换,成于千百次静默的守护。当你下次看到 curl http://192.168.56.100 稳稳返回 200 ok,那背后是 nginx 的稳健、keepalived 的睿智、linux 内核的精密,以及你亲手写下的每一行配置所凝聚的工程信仰。

以上就是基于nginx+keepalived实现高可用(主从切换)配置指南的详细内容,更多关于nginx keepalived高可用配置的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com