介绍
虽然其中一个更有争议的技术,但通过利用您的提供商的全球存在来地理分布您的应用程序的一个好方法是使用和管理 DNS 响应(即返回的 IP 地址列表)。
在本文中,我们将看到如何利用DigitalOcean的全球云服务器 / 数据中心基础设施提供的一些真正出色的和独特的可能性,通过管理DNS响应来实现地理分布,高度可用的应用程序设置,以实现最小停机时间(因此数据丢失)。
词汇
1 传统应用部署结构
2、高可用性
- 高可用性应用部署结构 2. 如何使用 DNS 实现高可用性 3. 总结
3 如何部署高可用性应用程序
- 设置负载平衡器 / 反向代理程序 2. 设置 DNS 记录 3. 设置应用服务器 4. 设置数据库
传统应用部署结构
传统和最常见的应用部署取决于设置,所有相关组件都位于同一个位置,原因包括:
- 供应商的资源不足; * 高成本,和/或; * 复杂的工程工作。
即使一个应用程序由多台坐在负载平衡器(或反向代理)后面的机器提供服务,即使数据库也以一种提供可靠性和防止数据丢失的方式设置,这些类型的安排容易导致不同级别的错误,有时会导致停机。
为了防止这种情况发生,必须依靠并使用更可靠的系统架构,其中数据和服务器在全球范围内分布在不同的地区(例如旧金山和纽约)。
高可用性
如果你的应用程序是你的业务,你需要让它可访问 24/7,如果可能的话,几乎没有任何中断. 不幸的是,由于意外的数据中心问题,在一个位置横向扩展多个服务器并不总是解决方案。
然而,在不同地理中心全球部署虚拟服务器可以为您提供所需的稳定性,从而保持应用程序的可用性水平尽可能高。
在IT系统设计方面,这种结构被称为高可用性。
多亏了DigitalOcean在两大洲的存在,在五个不同的地点,您也可以在全球范围内传播您的应用程序堆栈。
您可以将保留的 IP 连接到您的多余基础设施,并使用单个公共 IP 启动您的网站或服务,这是一种可公开访问的静态 IP 地址,以便在您的基础设施中提供灵活性和响应性。
高可用性应用部署结构
简单地说,正如我们刚刚提到的,高度可用的应用部署结构取决于来自不同数据中心的客户的交付和响应。
虽然有许多可能的方式来获得这种结构,但最简单和最实惠的可能是利用DNS的运作方式。
一个基本设置的例子可以被视为如下:
1________________
2 | |
3 | CLIENT |
4 | WEB BROWSER |
5 |________________|
6 ||
7 ||
8 _______\/_______
9 | |
10 | DNS SERVER |
11 |________________|
12 ||
13 ||
14 _______/ \_______
15 / \
16 / \
17 ____________________ ____________________
18 | | | |
19 | SAN FRANCISCO | | SAN FRANCISCO |
20 |____________________| |____________________|
21 | ______________ | | ______________ |
22 | | | | | | | |
23 | | WEB SERVER | | | | WEB SERVER | |
24 | | LOAD BALANCE | | | | LOAD BALANCE | |
25 | | PROXY | | | | PROXY | |
26 | |_____ _____| | | |_____ _____| |
27 |________| |________| |________| |________|
28 || __ __ ||
29 ||<=====||==================||=====>||
30 \/ \/ \/ \/
31 ____________________ ____________________
32 | | | |
33 | SAN FRANCISCO | | NEW YORK |
34 |____________________| |____________________|
35 | ______________ | | ______________ |
36 | | | | | | | |
37 | | APP SERVER | | | | APP SERVER | |
38 | |______ ______| | | |______ ______| |
39 | ______||______ | | ______||______ |
40 | | | | | | | |
41 | | DATABASE |<==================>| DATABASE | |
42 | |______________| | | |______________| |
43 |____________________| |____________________|
如何使用 DNS 实现高可用性
当用户通过一组定义的规则(即协议)键入网站的域名时,网页浏览器会拨打名称服务器并询问该网站托管的机器的地址。
由于DNS允许存储多个记录(即使是相同的类型),因此可以列出多个主机作为服务器。
因此,如上图所示,如果列出2个负载平衡器/反向代理的IP地址,位于两个不同的位置,每一个都设定在应用服务器之间平衡负载,再次位于至少两个不同的数据中心,如果其中一个数据中心变得无法到达,客户端的Web浏览器将尝试接下来的IP地址记录返回DNS服务器并重复过程来获取网站。
这种类型的负载平衡被称为Round Robin DNS负载平衡。
总结
事情可能看起来有点复杂在第一眼. 让我们用一步一步的指示总结它们:
- 联合国 DNS可以持有多个相同域名的记录.
- DNS可以返回相同域名的IP地址列表. 3个 当一个网页浏览器请求网站时,它会逐一尝试这些IP地址,直到得到回复. 4.四. 这些 IP 地址应该指向_ not_ 应用程序服务器,而是指向负载- 平衡器 / 逆向- 代理 。 5 (韩语). 这些倒置代号需要平衡多个地点多服务器之间的负载.
- 国家 如果一个数据中心倒闭,而网页浏览器无法从一个IP地址(即负载-平衡器)得到响应,它将尝试到达另一个地址.
- 联合国 由于两个数据中心都不可能同时无法到达,因此第二个负载平衡器将返回一个响应.
- 联合国 网络应用服务器应无国籍,以方便负载平衡器的工作.
- 国家 数据库服务器应当以复制方式设置. .
如何部署高度可用的应用程序
** 注意: ** 本教程是编程语言或Web服务器类型的无知。 按照这些指示,您可以实现高可用性,无论您选择的框架,Web或HTTP服务器。
设置负载平衡器 / 反向代理
实现高可用性的第一步是设置两个或多个负载平衡的反向代理,这些代理将在应用程序服务器之间进行通信。
- 联合国 ** 在两个地点安装两个云服务器:** 创建两个数字海洋液滴。 文章: [如何创建 DO Cloud 服务器] (https://www.digitalocean.com/community/articles/how-to-create-your-first-digitalocean-droplet-virtual-server)
- 联合国 ** 在每个液滴上设置负载平衡器/倒置代用:**
安装并配置 Nginx, Apache 或 HAProxy. e. 条款:[Nginx作为前端代理 (https://www.digitalocean.com/community/articles/how-to-configure-nginx-as-a-front-end-proxy-for-apache),[HAProxy 负载平衡在Ubuntu (https://www.digitalocean.com/community/articles/how-to-use-haproxy-to-set-up-http-load-balancing-on-an-ubuntu-vps)
3个 ** 获取您的负载平衡器的 IP 地址: **
键入
/ sbin/ ifconfig
并查找您的滴数 。 IP地址,例如`净添加器:107.170.40.112'
设置 DNS 记录
DNS A 记录将域名(例如www.digitalocean.com
)转换为机器可访问的 IP 地址。
一旦你完成了配置两个滴滴,每个都有负荷平衡的反向代理,下一步是通过DigitalOcean的DNS服务添加2个A记录,以便将你的域名指向IP地址。
- ** 登录到您的 DigitalOcean 控制面板:** 点击左侧菜单上的
DNS
并添加一个新的域名,指向上一步的负荷平衡器滴。
设置应用服务器
下一步是设置应用服务器。
要让全球分布工作,就像您创建的第一个负载平衡服务器一样,您需要两个新的滴滴来托管您的应用程序服务器。
** 注意:** 您也可以在同一台机器上运行每个应用程序服务器,但不建议这样做。
在两个位置部署或重复应用程序服务器滴滴,例如:
- In NY 1 and ** NY 2** ;
- In AMS 1 and ** AMS 2** ;
- In SF 1 and ** NY 2** etc.
回到第一个步骤,然后按照负载平衡器设置文章,将其配置为向这两个应用程序提供的滴滴的接入代理连接。
创建数据库
很难想象没有数据库的Web应用程序,在多个服务器上分发应用程序的最困难部分可能是处理数据库。
根据您选择的数据库服务器,创建重复配置,但跨多个位置。
看:
- 对于 MySQL 主/奴隶复制:**
- ** 对于 MySQL 主/主复制:**
- 对于 PostgreSQL 主/奴隶复制:**
一旦您完成创建复制数据库结构,请指示您的应用程序使用他们的地址,如在教程中作为DB服务器进行交互。