为生产而构建:网络应用程序 - 概述

简介

本教程分为6部分,将向您展示如何从头开始构建多服务器生产应用程序设置。最终设置将由备份、监视和集中日志记录系统提供支持,这些系统将帮助您确保能够检测问题并从中恢复。本系列的最终目标是构建独立的系统管理概念,并向您介绍创建生产服务器设置的一些实际注意事项。

如果您有兴趣复习本系列中将介绍的一些概念,请阅读以下教程:

虽然链接的文章提供了生产应用程序设置的一般指南,但本系列将演示如何从头到尾规划和设置示例应用程序。希望这将帮助您规划和实现自己的生产服务器环境,即使您正在完全不同的技术堆栈上运行不同的应用程序。由于本教程涵盖了许多不同的系统管理主题,因此通常会将详细的解释推迟到提供补充信息的外部支持文章中。

我们的目标

在本系列教程结束时,我们将为一个可通过https://www.example.com/.访问的php应用程序(出于演示目的)设置一个生产服务器我们还将包括支持生产应用程序服务器的服务器。最终设置如下所示(图中未显示专用DNS和远程备份):

生产Setup

在此设置中,应用程序 框中的服务器被认为是应用程序正常运行所必需的。除了恢复计划和远程备份服务器之外,还将添加其余组件(备份、监视和日志记录)以支持生产应用程序设置。每个组件都将安装在同一DigitalOcean区域内的一个单独的Ubuntu 14.04服务器上,在我们的示例中是NYC3,启用了私有网络。

组成应用程序的服务器集将称为以下主机名:

*lb1: HAProxy负载均衡器,可通过https://example.com/访问 *app1: Apache和PHP应用服务器 *app2: Apache和PHP应用服务器 *db1: MySQL数据库服务器

值得注意的是,选择这种类型设置是为了演示如何在多个服务器上构建应用程序的组件;您自己的设置应该根据自己的需要进行定制。这种特定的服务器设置有单点故障,可以通过添加另一个负载均衡器(和循环调度DNS)和数据库服务器replication或添加指向主动或被动负载均衡器的静态IP来消除),下面我们将简要介绍这一点。

支持应用程序服务器的组件将称为以下主机名:

  • 备份: bacula备份服务器
  • 监控: Nagios监控服务器
  • 日志: Elasticearch、Logstash、Kibana(ELK)堆栈,用于集中日志记录

此外,图表中没有显示以下三个支持组件:

*ns 1: 私有DNS的主BIND名称服务器 *ns 2: 专用DNS的辅助BIND名称服务器 *remotebacks: 位于不同区域的远程服务器,用于在生产数据中心发生物理灾难时存储Bacula备份的副本-=\

我们还将为应用程序的各个组件中的故障制定基本恢复计划。

当我们达到目标设置时,我们将拥有总共10台服务器。我们将一次性创建它们(这简化了诸如设置DNS之类的事情),但您可以根据需要自由地创建每个文件。如果您计划使用DigitalOcean备份作为备份解决方案,作为BAKULA的补充或替代,请确保在创建水滴时选择该选项。

高可用(可选)

单点故障是指基础设施的一个部分出现故障,可能导致整个站点或服务不可用。如果您希望解决此设置中的单点故障,可以通过添加另一个负载均衡器来使其高度可用。发生故障时,高度可用的服务会自动故障切换到备份或被动系统。在高可用性设置中有两个负载均衡器,可确保其中一个负载均衡器始终被动可用,以便在主动负载均衡器不可用时接受流量,从而避免停机。

有许多方法可以实现高可用性设置。要了解更多信息,请阅读如何使用保留的IPs.的此部分

私有网络(可选)

如果您想要保护服务器之间的网络通信,您可能需要考虑设置VPN。当数据通过Internet传输时,使用加密保护网络传输尤其重要。使用VPN的另一个好处是,主机的身份通过密钥身份验证过程进行验证,这将保护您的服务免受未经授权的来源的侵害。

如果您正在寻找开放源码的VPN解决方案,您可能需要考虑TINC或OpenVPN。在这种情况下,使用网状路由的TINC是更好的解决方案。有关这两种VPN解决方案的教程可在此处找到:

前提条件

每台Ubuntu14.04服务器都应该有一个非超级用户,可以按照本教程进行设置:使用Ubuntu 14.04.进行初始服务器设置所有命令都将在每台服务器上以此用户身份运行。

我们假设您对基本的Linux安全概念有一定的了解,我们不会详细介绍这些概念。如果你需要一个快速的linux安全入门,请阅读这篇文章:保护你的Servers.的7个安全措施

域名

我们将假设您的申请将通过域名提供,例如example.com。如果你还没有自己的域名,从域名注册商那里购买一个。

一旦您有了您选择的域名,您就可以按照本教程将其与DigitalOcean域名一起使用:如何从公共域Registrars.指向DigitalOcean域名服务器

除了使您的站点更易于访问(与IP地址相比)外,还需要域名来实现使用SSL证书的域和身份验证好处,该证书还为您的应用程序及其用户之间的通信提供加密。

SSL证书

TLS/SSL在您的应用程序及其用户之间提供加密和域验证,因此我们将在我们的设置中使用一个SSL证书。在我们的示例中,因为我们希望用户访问我们的站点)。证书将安装在HAProxy服务器lb1 上,因此为方便起见,您可能希望在那里生成证书密钥和CSR。

如果您需要提供身份验证的证书,您可以使用We‘s Encrypt免费获得一个SSL证书,或从商业证书颁发机构购买一个。有关让我们加密选项的详细信息,请阅读如何从商业证书Authority.安装SSL证书跳过在Web服务器上安装证书 部分。

或者,您也可以使用自签名的SSL证书,该证书可以使用以下命令生成:

1sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ~/www.example.com.key -out ~/www.example.com.crt

实现目标的步骤

既然我们已经概述了我们的生产应用程序设置,让我们创建一个总体计划来实现我们的目标。

组成应用程序的组件是最重要的,因此我们希望这些组件尽早启动并运行。但是,由于我们计划对我们的内网连接使用基于名称的地址解析,我们应该首先设置我们的DNS

一旦我们的DNS准备好,为了启动和运行,我们将设置组成应用程序的服务器。由于应用程序需要数据库,负载均衡器需要应用程序,因此我们将按如下顺序设置组件:

1.数据库服务器 2.应用服务器 3.负载均衡

一旦我们完成了设置应用程序的步骤,我们将能够针对各种场景设计恢复计划 。此计划将有助于确定我们的备份战略。

在我们有了各种恢复计划后,我们将希望通过设置备份 来支持它。之后,我们可以设置** 监控** ,以确保我们的服务器和服务处于正常状态。最后,我们将设置** 集中日志** ,这样我们就可以帮助我们查看日志、排查问题和识别趋势。

结论

准备好总体计划后,我们就可以实施生产应用程序设置了。请记住,尽管此设置功能完全正常,但您应该能够从中收集有用的信息,并使用您所学到的知识来改进您自己的应用程序设置。

继续学习下一教程,开始设置应用程序:为生产构建:Web应用程序-Deploying.

Published At
Categories with 技术
comments powered by Disqus