如何配置 DNS 轮询负载均衡以实现高可用性

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 如何配置 DNS 轮询负载均衡以实现高可用性

简介


尽管这是一种更具争议性的技术,但利用和管理 DNS 响应(即返回的 IP 地址列表)来地理分布您的应用程序,以利用您的提供商的全球存在是一个很好的方法。除非您愿意在硬件和基础设施成本上花费一小笔财富,否则使用 DNS 来实现高可用性可能是一个很好的选择。

在本文中,我们将看到如何利用 DigitalOcean 的全球云服务器/数据中心基础设施所提供的一些真正出色和独特的可能性,通过管理 DNS 响应来实现地理分布、高可用的应用程序设置,以实现最小的停机时间(因此最小的数据丢失)。

术语表


1. 传统应用部署结构


2. 高可用性


  1. 高可用性应用部署结构
  2. 如何利用 DNS 实现高可用性
  3. 总结

3. 如何部署高可用性应用


  1. 设置负载均衡器/反向代理
  2. 设置 DNS 记录
  3. 设置应用服务器
  4. 设置数据库

传统应用部署结构


传统和最常见的应用部署依赖于所有相关组件位于同一位置的设置,原因有很多,比如:

  • 提供商缺乏手段;
  • 高成本,和/或;
  • 复杂的工程工作。

即使应用程序是由多台位于负载均衡器(或反向代理)后面的机器提供服务,即使数据库也设置了可靠性以防止数据丢失,这种安排也容易出现不同级别的错误,有时会导致停机时间。

为了防止这种情况,必须依赖并使用更可靠的系统架构。其中数据和服务器在不同地区(例如旧金山和纽约)全球分布。

高可用性


如果您的应用程序就是您的业务,您需要保持其在可能的情况下全天候可访问,几乎没有任何中断。不幸的是,在一个地点横向扩展到许多服务器并不总是解决方案,因为会出现意外的数据中心问题。

然而,在不同地理中心全球分布您的虚拟服务器可以为您提供所需的稳定性,从而使应用程序的正常运行时间尽可能高。

在 IT 系统设计方面,这种结构被称为高可用性

由于 DigitalOcean 在两个大洲的五个不同位置都有存在,您也可以全球分布您的应用程序堆栈。

高可用性应用部署结构


简而言之,高可用性应用部署结构取决于从不同数据中心向客户端交付和响应。

尽管有许多可能的方法可以获得这种结构,但可能最简单和最经济的方法是利用 DNS 的工作原理。

一个基本的示例设置可以考虑如下:

如何使用 DNS 实现高可用性


当用户输入网站的域名时,通过一组定义好的规则(即协议),Web 浏览器会拨号到域名服务器,并询问托管该网站的机器的地址。一旦收到 IP 地址,它就会将请求发送到该计算机,同时附带一些额外的数据,并呈现响应。

由于 DNS 允许保留多个记录(甚至是相同类型的记录),因此可以将多个主机列为服务器。

因此,如上图所示,如果您在 DNS 服务器中列出了 2 个位于不同位置的负载均衡器/反向代理的 IP 地址,每个负载均衡器都设置为在至少两个不同的数据中心之间平衡负载,如果其中一个数据中心不可访问,客户端的 Web 浏览器将尝试 DNS 服务器返回的下一个 IP 地址记录,并重复获取网站的过程。

这种负载均衡称为轮询 DNS 负载均衡。

总结


乍一看,事情可能看起来有点复杂。让我们使用逐步说明来总结它们:

  1. DNS 可以为相同的域名保存多个记录。
  2. DNS 可以返回相同域名的 IP 地址列表。
  3. 当 Web 浏览器请求网站时,它将依次尝试这些 IP 地址,直到获得响应。
  4. 这些 IP 地址应该指向负载均衡器/反向代理而不是应用服务器。
  5. 这些反向代理需要在多个位置平衡多个服务器的负载。
  6. 如果一个数据中心宕机,Web 浏览器无法从 IP 地址(即负载均衡器)获取响应,它将尝试访问另一个地址。
  7. 由于两个数据中心同时不可访问的可能性非常小,第二个负载均衡器将返回响应。
  8. Web 应用服务器应该是无状态的,以便使负载均衡器的工作更加容易。
  9. 数据库服务器应该以复制的方式设置。

如何部署高可用性应用


注意: 本教程与编程语言或 Web 服务器类型无关。遵循这些说明,无论您选择的框架、Web 或 HTTP 服务器如何,都可以实现高可用性。

设置负载均衡器/反向代理


实现高可用性的第一步是设置两个或更多个负载均衡反向代理,它们将在应用服务器之间进行通信。

  1. 在两个位置实例化两个云服务器:
    创建两个 DigitalOcean droplets。
    例如:文章:如何创建 DO 云服务器
  2. 在每个 droplet 上设置负载均衡器/反向代理:
    安装和配置 Nginx、Apache 或 HAProxy。
    例如:文章:Nginx 作为前端代理,Ubuntu 上的 HAProxy 负载均衡
  3. 获取负载均衡器的 IP 地址:
    输入 /sbin/ifconfig 并找出 droplets 的 IP 地址。
    例如:inet addr:107.170.40.112

设置 DNS 记录


DNS A 记录将域名(例如 www.digitalocean.com)转换为可访问的 IP 地址。

一旦您完成了在每个 droplet 上配置负载均衡反向代理的步骤,下一步是通过 DigitalOcean 的 DNS 服务添加 2 个 A 记录,将您的域名指向 IP 地址。

  1. 登录到您的 DigitalOcean 控制面板:
    单击左侧菜单上的 DNS,并添加一个新的域名,将其指向上一步中的负载均衡器 droplet。
  2. 添加新的 A 记录:
    一旦您进入下一步,点击上方的“添加记录”,创建一个新的 A 记录,使用另一个负载均衡器 droplet 的 IP 地址。

设置应用服务器


下一步是设置应用服务器。

为了使全球分发起作用,就像您创建的第一个负载均衡服务器一样,您需要在两个新的 droplet 上托管您的应用服务器。

注意: 您也可以在与负载均衡器相同的机器上运行每个应用服务器;但是,这并不被推荐。

在两个位置部署或复制您的应用服务器 droplet。例如:

  • NY 1NY 2
  • AMS 1AMS 2
  • SF 1NY 2 等。

回到第一步,并按照负载均衡器设置文章的说明,将它们配置为代理传入连接到这两个应用服务器 droplet。

设置数据库


很难想象一个没有数据库的 Web 应用程序。在将应用程序分布到多个服务器上时,最困难的部分可能是处理数据库。

根据您选择的数据库服务器,创建一个跨多个位置的重复配置。

参见:

  • 对于 MySQL 主/从复制:

如何在 MySQL 中设置主从复制

  • 对于 MySQL 主/主复制:

如何设置 MySQL 主-主复制

  • 对于 PostgreSQL 主/从复制:

如何在 PostgreSQL 上设置主从复制

完成创建复制数据库结构后,将您的应用程序指向使用它们的地址,如在教程中与 DB 服务器交互的方式。


目录
相关文章
|
1月前
|
负载均衡 算法 Java
Spring Cloud全解析:负载均衡算法
本文介绍了负载均衡的两种方式:集中式负载均衡和进程内负载均衡,以及常见的负载均衡算法,包括轮询、随机、源地址哈希、加权轮询、加权随机和最小连接数等方法,帮助读者更好地理解和应用负载均衡技术。
|
5天前
|
负载均衡 算法 Java
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
尼恩,一位资深架构师,分享了关于负载均衡及其策略的深入解析,特别是基于权重的负载均衡策略。文章不仅介绍了Nginx的五大负载均衡策略,如轮询、加权轮询、IP哈希、最少连接数等,还提供了手写加权轮询算法的Java实现示例。通过这些内容,尼恩帮助读者系统化理解负载均衡技术,提升面试竞争力,实现技术上的“肌肉展示”。此外,他还提供了丰富的技术资料和面试指导,助力求职者在大厂面试中脱颖而出。
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
|
9天前
|
机器学习/深度学习 调度
mmseg配置解析 Polynomial Decay 多项式衰减
Polynomial Decay(多项式衰减)是一种常用的学习率调度方法,通过多项式函数逐步减少学习率,帮助模型更好地收敛。公式为:\[ lr = (lr_{initial} - \eta_{min}) \times \left(1 - \frac{current\_iter}{max\_iters}\right)^{power} + \eta_{min} \]。参数包括初始学习率、最小学习率、当前迭代次数、总迭代次数和衰减指数。适用于需要平滑降低学习率的场景,特别在训练后期微调模型参数。
20 0
mmseg配置解析 Polynomial Decay 多项式衰减
|
11天前
|
网络协议 Docker 容器
docker中的DNS配置
【10月更文挑战第5天】
108 1
|
14天前
|
弹性计算 网络协议 Ubuntu
如何在阿里云国际版Linux云服务器中自定义配置DNS
如何在阿里云国际版Linux云服务器中自定义配置DNS
|
16天前
|
负载均衡 应用服务中间件 Apache
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
27 3
|
15天前
|
负载均衡 Java 应用服务中间件
Nginx负载均衡配置
Nginx负载均衡配置
|
5天前
|
JSON JavaScript 前端开发
深入解析ESLint配置:从入门到精通的全方位指南,精细调优你的代码质量保障工具
深入解析ESLint配置:从入门到精通的全方位指南,精细调优你的代码质量保障工具
15 0
|
9天前
|
编解码 计算机视觉
mmseg配置解析 align_corners=False
`align_corners=False` 是图像插值操作中的一个参数,影响输入和输出图像的角点对齐方式。`align_corners=True` 严格对齐角点,而 `align_corners=False` 均匀分布像素点,更适用于保持整体比例关系的任务,如语义分割。
18 0
|
9天前
|
机器学习/深度学习 编解码
mmseg配置解析 contract_dilation=True
`contract_dilation=True` 是 ResNetV1c 中的一种设置,用于解决多层膨胀卷积中的“栅格效应”。通过调整膨胀率,使卷积核在不同阶段更密集地覆盖输入特征图,避免信息丢失,提升特征提取质量,尤其在语义分割任务中效果显著。
21 0

推荐镜像

更多