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

在本文中,我们将看到如何利用一些由DigitalOcean全球云服务器/数据中心基础架构提供了真正优秀的和独特的无限潜能,为地理分布,高度可用的应用程序停机时间最短建立(因此dataloss )通过管理DNS响应。

介绍


尽管其中一个更有争议的技术,通过利用您的提供商的全球存在来地理分布您的应用程序的一个好方法是使用和管理DNS响应(即返回的IP地址列表)。 除非你愿意花费一点硬币的硬件和基础设施成本,使用DNS实现高可用性可能是一个很好的方法去。

在本文中,我们将了解如何利用DigitalOcean的全球云服务器/数据中心基础设施提供的一些真正优秀和独特的可能性,以具有地理分布,高可用性的应用程序设置,以最小化停机时间(因此dataloss )通过管理DNS响应。

词汇表


传统应用部署结构


2.高可用性


  1. 高可用性应用部署结构
  2. 如何使用DNS实现高可用性
  3. 概要

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


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

传统应用部署结构


传统和最常见的应用程序部署取决于所有相关组件位于相同位置的设置,原因有以下几个原因:

  • 供应商缺乏手段;

  • 高成本,和/或;

  • 复杂的工程工作。

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

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

高可用性


如果您的应用程序是您的业务,您需要保持其24/7访问,如果可能,几乎没有任何中断。 不幸的是,在一个位置水平扩展许多服务器并不总是解决方案,因为意外的数据中心问题。

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

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

由于DigitalOcean在两个大陆,分布在五个不同地点,您还可以在全球范围内推广应用程序。

您可以将浮动IP(可以映射到其中一个Droplet的可公开访问的静态IP地址)连接到冗余基础架构,并使用单个公共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实现高可用性


当用户通过一组定义的规则(即协议)键入网站的域名时,网络浏览器拨打Nameservers并且询问托管所述网站的机器的地址。 一旦它接收到IP地址,它将请求发送到该计算机,以及一些附加数据,并呈现响应。

由于DNS允许保留多个记录(甚至是同一种类),因此可以列出多个主机作为服务器。

因此,如上面的模式所示,如果列出位于两个不同位置的2个负载平衡器/反向代理的IP地址,每个集合用于平衡应用服务器之间的负载,再次位于至少两个不同的数据 - 中心,如果其中一个数据中心无法访问,客户端的Web浏览器将尝试DNS服务器返回的下一个IP地址记录,并重复该过程以获取网站。

这种负载平衡称为循环DNS负载平衡。

概要


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

  1. DNS可以保存同一域名的多个记录。

  2. DNS可以返回相同域名的IP地址列表。

  3. 当Web浏览器请求Web站点时,它将逐个尝试这些IP地址,直到它获得响应。

  4. 这些IP地址应该指向应用服务器,但在负载均衡/反向代理。

  5. 这些反向代理需要在多个位置的多个服务器之间平衡负载。

  6. 如果数据中心关闭,并且Web浏览器无法从IP地址(即负载均衡器)获取响应,它将尝试到达另一个的地址。

  7. 由于两个数据中心不可能同时不可达,因此第二个负载平衡器将返回响应。

  8. Web应用程序服务器应该是无状态的,以使负载平衡器的工作更容易。

  9. 数据库服务器应以复制方式设置。

如何部署高可用性应用程序


注:本教程是编程语言或Web服务器类型无关。 遵循这些说明,您可以实现高可用性,而不考虑您选择的框架,Web或HTTP服务器。

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


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

  1. 在两个位置实例化两个云服务器:

创建两个DigitalOceanDroplet。

如文章: 如何创建一个DO云服务器

  1. 在每个Droplet上设置负载平衡器/反向代理:

安装和配置Nginx,Apache或HAProxy。

如文章: Nginx的作为前端代理HAProxy的Ubuntu的负载均衡

  1. 获取您的负载均衡器的IP地址:

类型/sbin/ifconfig ,并找出你的Droplet的IP地址。

inet addr:107.170.40.112

设置DNS记录


DNS A记录域名转换(如www.digitalocean.com )机器无法访问的IP地址。

一旦您完成每个配置两个负载平衡逆向代理的Droplet,下一步包括通过DigitalOcean的DNS服务添加2 A记录,以将您的域名指向IP地址。

  1. 登录到您的DigitalOcean控制面板:

点击DNS左侧菜单中添加一个新的域名指向上一步骤中的负载均衡Droplet。

  1. 添加新A记录:

进入下一步后,单击上方的“添加记录”,创建一个新的A记录,其中包含另一个负载平衡器Droplet的IP地址。

设置应用程序服务器


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

要使全局分布正常工作,就像您创建的第一个负载平衡服务器,您需要两个新的Droplet来托管应用程序服务器。

注意:您还可以运行每个同一台计算机负载均衡您的应用程序服务器; 然而,这不会推荐。

在两个位置部署或复制应用程序服务器Droplet。 例如:

  • 纽约12 NY;

  • AMS 12 AMS;

  • SF 12纽约

回到第一步,并在负载平衡器设置文章之后,配置它们以代理到这两个应用程序服务Droplet的传入连接。

设置数据库


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

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

看到:

  • 对于MySQL主/从复制:

如何在MySQL中设置主从复制

  • 对于MySQL主/复制:

如何设置MySQL主 - 主复制

  • 对于PostgreSQL主/从复制:

如何在PostgreSQL上设置主从复制

一旦完成创建复制数据库结构,指向您的应用程序以使用其地址,在教程中作为DB服务器进行交互。

:提交OS Tezer