介绍
这个6部分教程将向您展示如何从头开始构建多服务器生产应用程序设置。 最终设置将由备份,监控和集中日志记录系统支持,这将帮助您确保您能够检测问题并从中恢复。 本系列的最终目标是构建独立的系统管理概念,并介绍创建生产服务器设置的一些实际注意事项。
如果您有兴趣查看本系列将介绍的一些概念,请阅读这些教程:
虽然链接的文章提供了生产应用程序设置的一般准则,但本系列将演示如何从头到尾规划和设置示例应用程序。 希望这将帮助您规划和实现自己的生产服务器环境,即使您在完全不同的技术上运行不同的应用程序。 因为本教程涵盖了许多不同的系统管理主题,所以通常会将详细的解释推迟到提供补充信息的外部支持文章。
我们的目标
通过本套教程结束后,我们将有一个PHP应用程序生产服务器的设置,WordPress的用于演示目的,那就是通过访问https://www.example.com/ 。 我们还将包括将支持生产应用程序服务器的服务器。 最终的设置看起来像这样(私人DNS和远程备份没有图片):
在这种设置中,在应用程序框中的服务器被认为是应用程序正常运行是至关重要的。 除了恢复计划和远程备份服务器之外,还将添加其余组件 - 备份,监视和日志记录,以支持生产应用程序设置。 每个组件将安装在同一个DigitalOcean区域(我们的示例中为NYC3)上的单独的Ubuntu 14.04服务器上,并启用了专用网络。
组成应用程序的服务器集将被称为以下主机名:
- LB1:HAProxy的负载均衡器,通过访问https://example.com/
- APP1:Apache和PHP应用程序服务器
- APP2:Apache和PHP应用程序服务器
- DB1:MySQL数据库服务器
重要的是要注意,选择此类型设置来演示如何在多个服务器上构建应用程序的组件; 您自己的设置应根据您自己的需要定制。 这个特定的服务器设置具有单点故障,这可以通过添加其他负载平衡器(和被淘汰循环DNS )和数据库服务器复制或添加一个静态IP指向主动或被动负载平衡器被覆盖下面,我们将短暂覆盖。
将支持应用程序服务器的组件将被称为以下主机名:
- 备份:备份Bacula的服务器
- 监测:Nagios的监控服务器
- 日志记录:Elasticsearch,Logstash,Kibana(ELK)集中记录
此外,图中未示出以下三个支持组件:
- NS1:主域名服务器BIND私人DNS
- NS2:二级域名服务器BIND私人DNS
- remotebackups:远程服务器,分布在不同的区域,用于存储备份Bacula的副本在生产数据中心物理灾难的情况下- === \
我们还将为应用程序的各个组件中的故障制定基本恢复计划。
当我们达到我们的目标设置,我们将有10个服务器。 我们将一次创建它们(这简化了诸如设置DNS的功能),但是可以根据需要自由创建。 如果您计划使用DigitalOcean备份作为备份解决方案,除了或替代Bacula,请务必在创建Droplet时选择该选项。
高可用性(可选)
单点故障是指您的基础架构的一部分停机可能会导致整个站点或服务不可用。 如果要解决此设置的单点故障,您可以通过添加另一个负载平衡器使其高度可用。 高可用性服务在发生故障时自动故障转移到备份或被动系统。 在高可用性设置中具有两个负载平衡器通过确保一个负载平衡器总是被动地可用于接受流量(如果活动负载平衡器不可用)来防止停机时间。
有许多方法来实现高可用性设置。 要了解更多信息,请参阅如何使用浮动IP地址本节 。
虚拟专用网络(可选)
如果您想要确保服务器之间的网络通信安全,您可能需要考虑设置VPN。 当数据在互联网上传输时,通过加密保护网络传输尤其重要。 使用VPN的另一个好处是,主机的身份通过密钥身份验证过程验证,这将保护您的服务免受未经授权的源。
如果您正在寻找开源VPN解决方案,您可能需要考虑Tinc或OpenVPN。 在这种特殊情况下,使用网格路由的Tinc是更好的解决方案。 有关两种VPN解决方案的教程,请点击这里:
先决条件
每个Ubuntu的14.04服务器应该有一个非root超级用户,可以通过下面这个教程进行设置: 使用Ubuntu 14.04初始服务器设置 。 所有命令将作为此用户在每个服务器上运行。
我们假设你有一些基本的Linux安全概念的知识,我们不会详细介绍。 如果你需要一个快速的Linux安全底漆,请阅读这篇文章: 7安全措施来保护您的服务器 。
域名
我们假设您的申请将通过域名(如“example.com”)提供。 如果您还没有自己的网站,请从域名注册商处购买一个。
一旦你有你选择的域名,您可以按照本教程与DigitalOcean DNS使用它: 如何指向DigitalOcean域名服务器从常见的域名注册商 。
除了使您的网站更容易访问(与IP地址相比)外,还需要域名来实现使用SSL证书的域和身份验证优势,这还为应用程序与其用户之间的通信提供加密。
SSL证书
TLS / SSL在应用程序及其用户之间提供加密和域验证,因此我们将在设置中使用SSL证书。 在我们的例子,因为我们希望用户在“访问我们的网站www.example.com ”,这是我们会指定为证书的常用名(CN)。 证书将被安装在服务器HAProxy的,LB1,所以你可能要生成证书密钥和CSR那里方便。
如果您需要提供身份验证的证书,则可以使用Let's Encrypt获得SSL证书,或从商业证书颁发机构购买。 关于咱们的加密选项的详细信息,请参阅如何从商业证书颁发机构安装SSL证书 。 跳过Web服务器部分安装证书 。
或者,您也可以使用自签名SSL证书,可以使用此命令生成:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ~/www.example.com.key -out ~/www.example.com.crt
达到我们的目标的步骤
现在我们已经概述了我们的生产应用程序设置,让我们创建一个总体计划来实现我们的目标。
组成应用程序的组件是最重要的,所以我们希望这些组件尽早运行。 但是,由于我们正在使用我们的私人网络连接的基于域名的地址解析规划, 首先要建立我们的DNS。
一旦我们的DNS准备好了,为了让事情运行,我们将设置组成应用程序的服务器。 因为应用程序需要数据库,并且负载均衡器需要应用程序,所以我们将按此顺序设置组件:
- 数据库服务器
- 应用程序服务器
- 负载平衡器
一旦我们通过建立我们的应用程序的步骤之后,我们将能够设计出各种情景的恢复计划 。 此计划将有助于确定我们的备份策略。
之后,我们有我们的各种恢复计划,我们希望通过建立备份来支持它。 在此之后,我们可以设置监控 ,以确保我们的服务器和服务处于正常状态。 最后,我们将建立集中式日志记录 ,所以我们所能来帮助我们查看我们的日志,解决问题,并确定趋势。
结论
随着我们的总体计划准备就绪,我们准备实施我们的生产应用程序设置。 请记住,此设置虽然完全正常,但它是一个示例,您应该能够从中收集有用的信息,并使用您学习的内容来改进自己的应用程序设置。
继续下一个教程开始使用设置应用程序: 构建用于生产:Web应用程序-部署 。