我知道如何管理数据中心冗余如果有可以指向您公司任何工作站点的 DNS 服务器 - 有 VRRP、多 WAN 等等。但是 DNS 服务器本身如何保持在线?当有人连接到服务并且无法真正配置时,它首先会受到影响。我的意思是例如8.8.8.8
或8.8.4.4
。我不记得它们停机过。从来没有。ISP 如何设法保持这样的 IP总是在线的?
我知道这可能是一个很宽泛的问题,但我只想听听可用于此目的的协议/技术的名称。我可以自己阅读有关它们的详细信息。
答案1
首先,VRRP 完全不依赖 DNS。为了在单个站点内实现冗余,您可以在共享 VRRP 地址上运行 DNS 服务器。
但正如其他人在评论中提到的那样,这些服务还使用任播路由,这实质上意味着同一个 IP 地址存在于世界各地的多个地方。当整个站点瘫痪时,全球的路由都会重新计算,这样您的数据包最终会转到另一个正常运行的站点。
比 Google 公共 DNS 更好的例子是根.
DNS 服务器(为区域提供服务并保存指向 、 、 等的指针的com
服务器org
)eu
因为它们有地图13 个逻辑地址的每个实例。ICANN 的“L”由 160 个不同的站点提供服务!
请注意,任播与基于 DNS 的循环机制无关(在基于 DNS 的循环机制中,姓名有多个地址)。Anycast 本质上是通过欺骗路由协议来实现的。
互联网使用 BGP 在组织之间交换路由信息。
边界网关协议固有地支持根据各种标准从通向同一网络的多个路由中选择最佳路由。例如,同一个客户可能拥有到同一 ISP 的冗余上行链路(宣布两个仅在权重/偏好方面不同的路由)。或者客户可能拥有通过多个 ISP 的上行链路,并且每个人都会选择他们喜欢的路由(主要是最短的 AS 路径)——这就是“真正的”多 WAN 的要点。
Multihoming
┌────────[AS 65535]────────┐
client 1 ---ISP---│--BGProuter--+ │
¦ │ ¦--DNSserver │
client 2 ---ISP---│--BGProuter--+ │
└──────────────────────────┘
但是,BGP 只会将流量引导至您的入口,而不会关心入口之后发生的情况。因此,如果您在内部设置了通向同一台服务器的两条路由,则会出现多宿主。但如果每个“入口”都通向不同的服务器(针对同一 IP 配置),则会出现任播。
Anycast... kind of?
┌────────[AS 65535]────────┐
client 1 ---ISP---│--BGProuter-----DNSserver │
¦ │ │
client 2 ---ISP---│--BGProuter-----DNSserver │
└──────────────────────────┘
重要的是,这也意味着 BGP 并不关心 AS 是否完全不连续。要获得全球冗余,只需从多个物理位置宣布同一个网络 - 如果您将这些位置连接在一起(以便它们将该网络路由到一个地方),您将获得多宿主;如果它们是孤岛,您将获得任播。
Anycast
┌────────[AS 65535]────────┐
client 1 ---ISP---│--BGProuter-----DNSserver │
¦ └──────────────────────────┘
¦
¦ ┌────────[AS 65535]────────┐
client 2 ---ISP---│--BGProuter-----DNSserver │
└──────────────────────────┘
(就此而言,它甚至不需要是相同的 AS – 例如 6to4 中继由多个独立组织运行,每个组织都宣布自己的路线192.88.99.0/24
。)
注意事项:
任播提供冗余,但不提供负载平衡。一旦 BGP 收敛,每个路由器都会选择一条首选路由(或偶尔选择几条),并将继续使用该路由,直到网络发生变化。
然而你无法预测多久路由将保持稳定,因此任播有状态服务可能会很棘手。DNS 可以解决这个问题,因为它是无状态的,并且主要使用 UDP(EDNS 减少了对 TCP 连接的需求)。
实际服务和 BGP 路由器之间必须进行协调,以便在服务崩溃时撤回路由。
答案2
实现此目的的一种方法是使用服务器端平衡器。当您连接到 IP 8.8.8.8 的网关时,它会将请求分发到系统内的一个空闲服务器。因此,当一个服务器死机时,不会拖垮整个系统。
对于互联网服务,服务器端负载均衡器通常是一个软件程序,它监听外部客户端连接以访问服务的端口。负载均衡器将请求转发到“后端”服务器之一,后者通常会回复负载均衡器。这允许负载均衡器回复客户端,而客户端永远不会知道内部功能的分离。它还可以防止客户端直接联系后端服务器,这可能具有安全优势,因为它可以隐藏内部网络的结构并防止对内核的网络堆栈或在其他端口上运行的无关服务的攻击。
某些负载均衡器提供了一种机制,用于在所有后端服务器都不可用时执行某些特殊操作。这可能包括转发到备份负载均衡器,或显示有关中断的消息。
负载均衡器本身不会成为单点故障也很重要。负载均衡器通常以高可用性对的形式实现,如果特定应用程序需要,它们还可以复制会话持久性数据。[5]