提供:ZStack云计算
系列教程
本教程为生产环境构建指南:Web应用系列六篇中的第一篇。
内容介绍
在本系列六篇教程中,我们将探讨如何从零开始构建一套多服务器生产应用设置。作为最终效果,其将支持备份、监控以及集中化日志处理系统,帮助大家确保了解其中可能存在的问题并实现恢复。
如果大家对本文中提及的各概念抱有兴趣,也可参阅以下教程:
以上教程提供了生产应用设置中的部分基本准则,而本系列文章则演示如何规划并设置一套示例应用。希望本教程能帮助大家规划并实现自己的生产服务器环境。由于本教程涵盖多种不同系统管理议题,因此我们会在各篇文章中有针对性地进行详细说明。
我们的目标
到本教程结束时,我们将拥有一套面向PHP应用的生产服务器设置,本示例将选择WordPress,且可通过https://www.example.com/访问。我们还将引入生产应用服务器。最终设置成果如下所示(图片中未显示专有DNS与远程备份):
在本设置中,Application框中的服务器负责承载所运行的应用。另外其还包含恢复规划与远程备份服务器,并利用组件备份、监控与日志记录机制以支持生产性应用设置。各组件都将安装在同一DigitalOcean服务区内的一套独立Ubuntu 14.04服务器之上,在本示例中使用NYC3,同时启用Private Netwroking。
构成应用的各服务器分别使用以下主机名称:
- lb1: HAProxy负载均衡,通过https://example.com/进行访问
- app1: Apache与PHP应用服务器
- app2: Apache与PHP应用服务器
- db1: MySQL数据库服务器
需要强调的是,本教程的主要作用在于展示如何在多套服务器上构建应用,并根据需求进行定制。此特定服务器设置中存在单点故障,我们可以引入其它负载均衡器(以及round-robin DNS)与数据库服务器副本,或者添加指向主动或被动负载均衡器的静态IP消除这一问题。
支持应用服务器的各组件将采用以下主机名称:
- backups: Bacula备份服务器
- monitoring: Nagios监控服务器
- logging: Elasticsearch、Logstash与Kibana(简称ELK)堆栈以实现集中日志处理
另外,还有以下三种未体现在示意图中的支持组件:
- ns1: 面向专有DNS的主BIND域名服务器
- ns2: 面向专有DNS的二级BIND域名服务器
- remotebackups: 远程服务器,位于不同服务区,用于存储Bacula备份副本以实现生产数据中心内的物理灾难恢复机制
我们还针对多种应用组件开发出基础恢复规划。
在完成设置后,我们将拥有10套服务器。这里我们会一次性创建全部服务器,但大家也可以根据需要随意创建。
高可用性(可选)
单点故障意味着基础设施中的单一组成部分故障会导致整体网站或者服务不再可用。如果大家要解决这一问题,可以添加其它负载均衡机制以实现高可用性。高可用性服务能够在发生故障时自动切换至备份或被动系统。
要了解更多与高可用性设置相关的内容,请参阅如何利用Floating IP一文。
虚拟专有网络(可选)
如果大家希望保护各服务器间的网络通信内容,则需要设置一套VPN。利用加密机制保护网络流量非常重要,特别是在利用互联网进行数据传输的情况之下。另外,使用VPN还能够帮助我们使用密钥认证机制,保证业务免受未授权来源的访问。
如果大家希望选择一套开源VPN解决方案,则可以考虑Tinc或者OpenVPN。在本示例中,我们将使用Tinc。这两套VPN方案的教程可参阅以下内容:
先决条件
每套Ubuntu 14.04服务器应当拥有一个非root超级用户,设置方式可参阅Ubuntu 14.04初始服务器设置。所有命令在各服务器上皆由此用户进行操作。
我们还假定大家了解Linux安全概念,因此文中不再对其进行详细探讨。如果大家对此并不熟悉,请参阅七种安全举措保护服务器。
域名
我们假定大家的应用可通过域名进行交付,例如example.com。如果大家还不具备域名,则可从域名注册商处进行购买。
在选定了域名后,大家可以参阅如何将域名注册商指向DigitalOcean域名服务器使用DigitalOcean DNS。
除了简化站点访问方式之外,域名还能够帮助我们使用SSL证书完成身份验证,同时对应用与用户间的通信进行加密。
SSL证书
TLS/SSL为应用与用户间提供加密与域名验证机制,因此我们将在设置中使用SSL证书。在本示例中,由于我们希望用户通过www.example.com访问站点,因此我们将指定该证书的常用名称(简称CN)。该证书将被安装在HAProxy服务器lb1上,从而便于生成证书密钥与CSR。
如果大家需要利用证书提供身份验证功能,则需要购买一份SSL证书。具体方式可参阅如何从商用认证中心处获取并安装SSL证书一文。
如果大家不想付费购买证书,也可以考虑使用StartSSL的免费证书:
另外,大家也可以使用以下命令生成自签名SSL证书:
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ~/www.example.com.key -out ~/www.example.com.crt
一步步达成目标
现在我们已经拥有了生产应用设置的总体轮廓,接下来为其设计出构建规划。
构成应用的各组件无疑最为重要,因此我们需要保证其优先上线运行。不过由于我们打算利用基于名称的专有网络连接地址解析机制,所以DNS必须首先准备就绪。
DNS完成后,为了让各组件开始运行,我们还需要设置支撑应用的服务器。应用需要配合数据库与负载均衡机制方可起效,因此我们将采取以下设置顺序:
- 数据库服务器
- 应用服务器
- 负载均衡服务器
此后,我们还要制定一套面向各类场景的恢复规划。另外,我们要利用监控方案确保自己的服务器与服务处于正常状态。最后,我们以集中化日志记录方式实现日志查看、故障排查以及趋势识别。
总结
在总体规划就绪之后,我们的生产应用设置即可开始进行。请记住,在这套设置中,我们的主要目标在于收集有用信息、汇总实现经验以改进未来的各类应用实现效果。
概述部分就到这里结束,感兴趣的朋友请继续关注本教程的下一部分,生产环境构建指南:Web应用——部署。
本文来源自DigitalOcean Community。英文原文:Building for Production: Web Applications — Overview By Mitchell Anicas
翻译:diradw