介绍
尽管是更具争议性的技术之一,但利用提供商的全球影响力在地理上分发应用程序的一种好方法是使用和管理 DNS 响应(即 返回的 IP 地址列表)。 除非您愿意在硬件和基础设施成本上花一点钱,否则使用 DNS 来实现高可用性可能是一个很好的方法。
在本文中,我们将看到如何利用 DigitalOcean 的全球云服务器/数据中心基础设施提供的一些真正优秀和独特的可能性,以建立一个地理分布的、高可用性的应用程序设置,以最大限度地减少停机时间(从而减少数据丢失) 通过管理 DNS 响应。
词汇表
1. 传统应用部署结构
2. 高可用性
- 高可用应用部署结构
- 如何使用 DNS 实现高可用性
- 概括
3. 如何部署高可用应用程序
- 设置负载均衡器/反向代理
- 设置 DNS 记录
- 设置应用程序服务器
- 设置数据库
传统应用部署结构
由于多种原因,传统和最常见的应用程序部署依赖于所有相关组件位于同一位置的设置,例如:
- 提供者缺乏手段;
- 高成本,和/或;
- 复杂的工程工作。
即使应用程序由位于负载均衡器(或反向代理)后面的多台机器提供服务,即使数据库也以提供可靠性和防止数据丢失的方式设置,这些安排也容易出现不同的情况错误级别,有时会导致您停机。
为了防止这种情况发生,必须依赖和使用更可靠的系统架构。 一种数据和服务器在全球范围内分布在不同区域(例如 旧金山和纽约)。
高可用性
如果您的应用程序是您的业务,您需要尽可能保持 24/7 全天候访问,几乎没有任何中断。 不幸的是,由于意外的数据中心问题,在一个位置的多台服务器上水平扩展并不总是解决方案。
然而,将您的虚拟服务器全球分布在不同的地理中心可以为您提供所需的稳定性,从而尽可能地保持应用程序的正常运行时间水平。
在IT系统设计方面,这种结构称为高可用。
由于 DigitalOcean 在两大洲、五个不同地点的存在,您还可以在全球范围内传播您的应用程序堆栈。
您可以将浮动 IP(一个可公开访问的静态 IP 地址,可以映射到您的一个 Droplet)连接到您的冗余基础设施,并使用单个公共 IP 启动您的站点或服务。 这个浮动 IP 可以立即重新映射到一个新的 droplet,从而为您的基础架构提供灵活性和响应能力。 在此处 阅读有关此新功能的更多信息 。
高可用应用部署结构
简而言之,正如我们刚刚介绍的那样,高度可用的应用程序部署结构取决于对来自不同数据中心的客户端的交付和响应。
虽然有许多可能的方法来获得这种结构,但可能最简单和最实惠的方法是利用 DNS 的工作原理。
一个基本的示例设置可以考虑如下:
________________ | | | CLIENT | | WEB BROWSER | |________________| || || _______\/_______ | | | DNS SERVER | |________________| || || _______/ \_______ / \ / \ ____________________ ____________________ | | | | | SAN FRANCISCO | | SAN FRANCISCO | |____________________| |____________________| | ______________ | | ______________ | | | | | | | | | | | WEB SERVER | | | | WEB SERVER | | | | LOAD BALANCE | | | | LOAD BALANCE | | | | PROXY | | | | PROXY | | | |_____ _____| | | |_____ _____| | |________| |________| |________| |________| || __ __ || ||<=====||==================||=====>|| \/ \/ \/ \/ ____________________ ____________________ | | | | | SAN FRANCISCO | | NEW YORK | |____________________| |____________________| | ______________ | | ______________ | | | | | | | | | | | APP SERVER | | | | APP SERVER | | | |______ ______| | | |______ ______| | | ______||______ | | ______||______ | | | | | | | | | | | DATABASE |<==================>| DATABASE | | | |______________| | | |______________| | |____________________| |____________________|
如何使用 DNS 实现高可用性
当用户键入网站的域名时,通过一组定义的规则(即 协议),网络浏览器拨打名称服务器并询问他们托管所述网站的机器的地址。 一旦它接收到 IP 地址,它就会将请求连同一些附加数据一起发送到该计算机,并呈现响应。
由于 DNS 允许保存多条记录(甚至是相同的记录),因此可以将多个主机列为服务器。
因此,如上述架构所示,如果您列出 2 个负载平衡器/反向代理的 IP 地址,它们位于两个不同的位置,每个设置用于平衡应用程序服务器之间的负载,同样位于至少两个不同的数据 -中心,如果其中一个数据中心变得无法访问,客户端的网络浏览器将尝试 DNS 服务器返回的下一个 IP 地址记录,并重复该过程以获取网站。
这种负载平衡称为循环 DNS 负载平衡。
概括
乍一看,事情可能看起来有点复杂。 让我们使用分步说明来总结它们:
- DNS 可以为同一个域名保存多条记录。
- DNS 可以返回相同域名的 IP 地址列表。
- 当网络浏览器请求一个网站时,它会一个接一个地尝试这些 IP 地址,直到它得到响应。
- 这些 IP 地址应指向 而不是 应用程序服务器,而是指向负载平衡器/反向代理。
- 这些反向代理需要在多个位置的多个服务器之间平衡负载。
- 如果数据中心关闭并且网络浏览器无法从 IP 地址获得响应(即 负载均衡器),它将尝试到达另一个的地址。
- 由于两个数据中心不太可能同时无法访问,因此第二个负载均衡器将返回响应。
- Web 应用程序服务器应该是无状态的,以使负载平衡器的工作更容易。
- 应以复制方式设置数据库服务器。
如何部署高可用应用程序
注意: 本教程与编程语言或网络服务器类型无关。 按照这些说明,无论您选择何种框架、Web 或 HTTP 服务器,您都可以实现高可用性。
设置负载均衡器/反向代理
实现高可用性的第一步是设置两个或多个负载平衡反向代理,它们将在您的应用程序服务器之间进行通信。
在两个位置实例化两个云服务器:
创建两个 DigitalOcean 液滴。
例如 文章:如何创建DO云服务器
在每个 Droplet 上设置负载均衡器/反向代理:
安装和配置 Nginx、Apache 或 HAProxy。
获取负载均衡器的 IP 地址:
输入
/sbin/ifconfig
并找出您的水滴的 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 主/主复制:
- 对于 PostgreSQL 主/从复制:
完成创建复制数据库结构后,将应用程序指定为使用它们的地址,就像教程中与数据库服务器一样交互。