简介
尽管这是一种更具争议性的技术,但利用和管理 DNS 响应(即返回的 IP 地址列表)来地理分布您的应用程序,以利用您的提供商的全球存在是一个很好的方法。除非您愿意在硬件和基础设施成本上花费一小笔财富,否则使用 DNS 来实现高可用性可能是一个很好的选择。
在本文中,我们将看到如何利用 DigitalOcean 的全球云服务器/数据中心基础设施所提供的一些真正出色和独特的可能性,通过管理 DNS 响应来实现地理分布、高可用的应用程序设置,以实现最小的停机时间(因此最小的数据丢失)。
术语表
1. 传统应用部署结构
2. 高可用性
- 高可用性应用部署结构
- 如何利用 DNS 实现高可用性
- 总结
3. 如何部署高可用性应用
- 设置负载均衡器/反向代理
- 设置 DNS 记录
- 设置应用服务器
- 设置数据库
传统应用部署结构
传统和最常见的应用部署依赖于所有相关组件位于同一位置的设置,原因有很多,比如:
- 提供商缺乏手段;
- 高成本,和/或;
- 复杂的工程工作。
即使应用程序是由多台位于负载均衡器(或反向代理)后面的机器提供服务,即使数据库也设置了可靠性以防止数据丢失,这种安排也容易出现不同级别的错误,有时会导致停机时间。
为了防止这种情况,必须依赖并使用更可靠的系统架构。其中数据和服务器在不同地区(例如旧金山和纽约)全球分布。
高可用性
如果您的应用程序就是您的业务,您需要保持其在可能的情况下全天候可访问,几乎没有任何中断。不幸的是,在一个地点横向扩展到许多服务器并不总是解决方案,因为会出现意外的数据中心问题。
然而,在不同地理中心全球分布您的虚拟服务器可以为您提供所需的稳定性,从而使应用程序的正常运行时间尽可能高。
在 IT 系统设计方面,这种结构被称为高可用性。
由于 DigitalOcean 在两个大洲的五个不同位置都有存在,您也可以全球分布您的应用程序堆栈。
高可用性应用部署结构
简而言之,高可用性应用部署结构取决于从不同数据中心向客户端交付和响应。
尽管有许多可能的方法可以获得这种结构,但可能最简单和最经济的方法是利用 DNS 的工作原理。
一个基本的示例设置可以考虑如下:
如何使用 DNS 实现高可用性
当用户输入网站的域名时,通过一组定义好的规则(即协议),Web 浏览器会拨号到域名服务器,并询问托管该网站的机器的地址。一旦收到 IP 地址,它就会将请求发送到该计算机,同时附带一些额外的数据,并呈现响应。
由于 DNS 允许保留多个记录(甚至是相同类型的记录),因此可以将多个主机列为服务器。
因此,如上图所示,如果您在 DNS 服务器中列出了 2 个位于不同位置的负载均衡器/反向代理的 IP 地址,每个负载均衡器都设置为在至少两个不同的数据中心之间平衡负载,如果其中一个数据中心不可访问,客户端的 Web 浏览器将尝试 DNS 服务器返回的下一个 IP 地址记录,并重复获取网站的过程。
这种负载均衡称为轮询 DNS 负载均衡。
总结
乍一看,事情可能看起来有点复杂。让我们使用逐步说明来总结它们:
- DNS 可以为相同的域名保存多个记录。
- DNS 可以返回相同域名的 IP 地址列表。
- 当 Web 浏览器请求网站时,它将依次尝试这些 IP 地址,直到获得响应。
- 这些 IP 地址应该指向负载均衡器/反向代理而不是应用服务器。
- 这些反向代理需要在多个位置平衡多个服务器的负载。
- 如果一个数据中心宕机,Web 浏览器无法从 IP 地址(即负载均衡器)获取响应,它将尝试访问另一个地址。
- 由于两个数据中心同时不可访问的可能性非常小,第二个负载均衡器将返回响应。
- Web 应用服务器应该是无状态的,以便使负载均衡器的工作更加容易。
- 数据库服务器应该以复制的方式设置。
如何部署高可用性应用
注意: 本教程与编程语言或 Web 服务器类型无关。遵循这些说明,无论您选择的框架、Web 或 HTTP 服务器如何,都可以实现高可用性。
设置负载均衡器/反向代理
实现高可用性的第一步是设置两个或更多个负载均衡反向代理,它们将在应用服务器之间进行通信。
- 在两个位置实例化两个云服务器:
创建两个 DigitalOcean droplets。
例如:文章:如何创建 DO 云服务器 - 在每个 droplet 上设置负载均衡器/反向代理:
安装和配置 Nginx、Apache 或 HAProxy。
例如:文章:Nginx 作为前端代理,Ubuntu 上的 HAProxy 负载均衡 - 获取负载均衡器的 IP 地址:
输入/sbin/ifconfig
并找出 droplets 的 IP 地址。
例如:inet addr:107.170.40.112
设置 DNS 记录
DNS A 记录将域名(例如 www.digitalocean.com
)转换为可访问的 IP 地址。
一旦您完成了在每个 droplet 上配置负载均衡反向代理的步骤,下一步是通过 DigitalOcean 的 DNS 服务添加 2 个 A 记录,将您的域名指向 IP 地址。
- 登录到您的 DigitalOcean 控制面板:
单击左侧菜单上的DNS
,并添加一个新的域名,将其指向上一步中的负载均衡器 droplet。 - 添加新的 A 记录:
一旦您进入下一步,点击上方的“添加记录”,创建一个新的 A 记录,使用另一个负载均衡器 droplet 的 IP 地址。
设置应用服务器
下一步是设置应用服务器。
为了使全球分发起作用,就像您创建的第一个负载均衡服务器一样,您需要在两个新的 droplet 上托管您的应用服务器。
注意: 您也可以在与负载均衡器相同的机器上运行每个应用服务器;但是,这并不被推荐。
在两个位置部署或复制您的应用服务器 droplet。例如:
- 在 NY 1 和 NY 2;
- 在 AMS 1 和 AMS 2;
- 在 SF 1 和 NY 2 等。
回到第一步,并按照负载均衡器设置文章的说明,将它们配置为代理传入连接到这两个应用服务器 droplet。
设置数据库
很难想象一个没有数据库的 Web 应用程序。在将应用程序分布到多个服务器上时,最困难的部分可能是处理数据库。
根据您选择的数据库服务器,创建一个跨多个位置的重复配置。
参见:
- 对于 MySQL 主/从复制:
如何在 MySQL 中设置主从复制
- 对于 MySQL 主/主复制:
如何设置 MySQL 主-主复制
- 对于 PostgreSQL 主/从复制:
如何在 PostgreSQL 上设置主从复制
完成创建复制数据库结构后,将您的应用程序指向使用它们的地址,如在教程中与 DB 服务器交互的方式。