Keepalived配置好后,域名解析到哪里

发布于:2025-09-09 ⋅ 阅读:(18) ⋅ 点赞:(0)

非常好,这是一个非常经典且核心的架构问题。简单直接的回答是:

域名应该解析到 Keepalived 生成的虚拟 IP (VIP) 上。

下面我为你详细解释为什么,以及整个请求的流转过程。


1. 为什么是 Keepalived 的 VIP?

这个架构的核心目标是实现高可用(High Availability)。我们逐层分析:

  • 应用实例层(你的多个实例):它们是实际处理业务请求的服务。但直接配置域名到某个实例,该实例宕机则服务就中断了,不具备高可用性。
  • Nginx 层(多个Nginx实例):Nginx 本身可以实现负载均衡,将请求分发到后端的多个应用实例。但如果你把域名配置到某一个固定的 Nginx 服务器的真实IP上,那么当这台 Nginx 服务器本身宕机时,尽管后端应用实例都是健康的,整个服务依然会中断。
  • Keepalived 层(VIP):Keepalived 的作用就是解决上述 Nginx 单点故障的问题。它通过一组协议(如 VRRP)在多台 Nginx 机器之间协商,最终只有一台机器会持有并对外宣告这个虚拟 IP (VIP)

工作流程如下:

  1. 用户通过域名访问你的服务。
  2. DNS 服务器将域名解析为 Keepalived 的 VIP
  3. 用户的请求被发送到该 VIP。
  4. 当前持有该 VIP 的那台 主(Master)Nginx 服务器会接收到这个请求。
  5. 这台 Nginx 再根据自己的负载均衡规则(如轮询、权重等),将请求转发给后端多个应用实例中的某一个。
  6. 应用实例处理完请求,将结果返回给 Nginx,再由 Nginx 返回给用户。

高可用切换(Failover)过程:

  • 当主 Nginx 服务器发生故障(如宕机、网络异常、Nginx 进程崩溃)时,Keepalived 会检测到。
  • 备(Backup)Nginx 服务器上的 Keepalived 进程会发现主节点不可用,随即接管 VIP,成为新的主节点。
  • VIP 会飘移(Drift)到这台健康的备用服务器上。
  • 对于用户和DNS来说,VIP 没有变化,只是背后持有它的物理服务器变了。整个切换过程对用户是透明的(短暂中断后自动恢复),无需修改域名解析。

2. 架构图与数据流

为了更好地理解,我们可以看下面的流程图:

flowchart TD
    subgraph DNS层
        A[用户访问域名<br>example.com]
    end

    subgraph Keepalived高可用层
        B[虚拟IP (VIP)<br>192.168.1.100]
    end

    subgraph Nginx服务器层
        C[NGINX 01<br>主 Master<br>真实IP: 192.168.1.10]
        D[NGINX 02<br>备 Backup<br>真实IP: 192.168.1.11]
    end

    subgraph 应用实例层
        E[应用实例<br>192.168.2.10:8080]
        F[应用实例<br>192.168.2.11:8080]
        G[应用实例<br>192.168.2.12:8080]
    end

    A -- DNS解析 --> B
    B -- 请求路由到VIP持有者 --> C
    C -- 负载均衡 --> E
    C -- 负载均衡 --> F
    C -- 负载均衡 --> G

    D -. Keepalived心跳检测 .- C
    D -. 主节点故障时接管VIP .-> B

总结与最佳实践

选项

配置方式

优点

缺点

结论

Keepalived VIP

域名解析到 VIP(如 192.168.1.100

实现高可用,自动故障转移,对用户透明。

需要额外搭建和维护 Keepalived 集群。

正确选择

某个Nginx实例IP

域名解析到某一台 Nginx 的固定IP(如 192.168.1.10

配置简单。

存在单点故障,该台 Nginx 宕机则整个服务不可用,失去了高可用意义。

不推荐

应用实例IP

域名解析到某个后端应用实例的IP

配置最简单。

无负载均衡,无高可用,实例宕机即服务中断,扩展性极差。

绝对禁止

因此,你的域名 DNS 记录(A 记录或 CNAME)应该指向由 Keepalived 管理的虚拟 IP 地址 (VIP)。 这是保证整个架构高可用性的最关键一步。

补充建议:

  • 确保所有 Nginx 服务器上的配置(nginx.conf)保持一致。
  • 在 Keepalived 配置中,除了网络检查,最好使用 scriptcheck_nginx.sh 等脚本,通过检查本地 Nginx 进程状态来触发切换,这样即使网络通但 Nginx 进程挂掉也能进行故障转移。

网站公告

今日签到

点亮在社区的每一天
去签到