我计划复制一个 Web 服务器以实现高可用性。该服务器在 Hyper-V 中作为 Ubuntu 15.04 虚拟机运行,并安装了 MariaDB 10.0、Apache 2.4 和 PHP-FPM 5.6。
第二台虚拟机将作为该虚拟机的直接副本启动,但位于美国。第一台虚拟机位于欧洲。(延迟约为 80-120 毫秒)
我想保持服务器同步,以便它们都可以为我的客户提供相同的内容,并且客户端将使用最近的服务器(为此我将使用 Route 53)
重要的是,服务器之间的数据交换是安全的,以保护数据库中的联系方式和其他信息,并防止更改 /var/www 目录中的文件。
我考虑过使用以下选项来实现这一点:
- 开放VPN
- SSH 隧道
SSL(传输层安全协议)
- 我的问题是哪种方法最可靠、最快(延迟、吞吐量)和最安全?易于维护也很好 ;)
我考虑过使用 SSH 进行数据库和文件复制。但是我不确定文件复制部分要使用哪个应用程序。
- 我应该如何设置文件的复制以及应该使用哪个应用程序来实现这一点?
SSL 可用于数据库复制,但它需要生成证书,而证书需要时不时地更换,而且可能会花费一些钱。
我的最后一个选择是使用 openvpn,但我不确定是否可以将其设置为附加网络,而不是将所有流量路由到它。此方法似乎还需要生成证书文件。
- 我希望能够在稍后向复制过程中添加额外的服务器,可能是 Windows 服务器。
答案1
您不需要为自己的私人通信购买付费的 TLS 证书。您可以设置自己的 CA(证书有效期很长,如果出现问题,只需丢弃整个 CA)并让您的服务器信任它,然后您就可以为不同的服务颁发任意数量的证书。仅当您无法可靠地让远程主机(例如您的网站访问者)信任您的 CA 时,才需要付费证书。
如果您只需要使用单一服务并且它支持 TLS(例如 MySQL),那么请选择它并通过在防火墙级别仅允许来自服务器 IP 的连接来添加额外的安全性。
如果您需要多个服务,最好使用 VPN 解决方案。不要在 OpenVPN 上浪费时间,您的内核具有内置的 IPSec 支持,您可以使用它。此外,它在 Windows 上开箱即用,因此如果您部署此类服务器,设置起来会很容易。
这是最简单的部分。真正困难的部分是保持应用程序文件同步,如果您的应用程序仅使用数据库,这很容易,但如果它是一个通用 CMS,那么它很有可能还会出于某种原因(例如插件更新)修改自己的文件或创建新文件(用户上传的内容等),我不知道有什么可靠的方法可以保持它们同步。我想到的唯一解决方案是 NFS(并且只有一个服务器托管文件,但这违背了您的 HA 要求)或 GlusterFS,这两种方法在这种延迟下的性能都会很差。
答案2
rsync
是一款出色的文件同步工具。我会将它与 SSH(和公钥)结合使用,如下所示:
rsync -az -e ssh --delete /var/www otherserver:/var/www
对于多台服务器,多次使用rsync
可能是最佳选择。另一个选择是pdcp -r
,但这需要每次复制所有文件,而不是进行增量传输。换句话说,它更适合少量数据和多台服务器。
如何最好地进行数据库复制很大程度上取决于您的应用程序的用途。MariaDB 文档和其他问题中有很多很好的建议。
答案3
您没有提到,但我假设您使用的是多主设置。这排除了主从数据库设置。
我相信,使用哪种技术来保障安全是你最不用担心的问题。
1. 数据库
保持多主数据库设置同步是件棘手的事。您可以使用多主(主动/主动)数据库设置,如 MariaDB w/Galera Cluster,但考虑到地理距离,我不太确定这是否是个好主意。所有写入都将同步到所有数据库节点。延迟将极大地影响数据库性能。Galera 等数据库集群通常被描述为单个 LAN 中的良好候选者。然而,从性能的角度来看,当涉及到“真正的”高可用性设置时,多主数据库集群通常被描述为更差,其中数据库节点分布在 WAN 中的多个物理位置。在进入多主数据库设置之前,请先阅读该主题。首先查看Scale-Out 博客。
您还可以采用另一种方法,研究 SymmetricDS,它允许您保持数据库同步。它使用触发器来捕获数据库 CRUD 操作。它不会复制架构更改、用户或纯数据以外的任何其他内容。但是,这将是异步复制,并且它不会像 MariaDB Galera 集群那样处理自动递增的主键。
2. 文件
您可以使用中央 NFS 服务器,但这会违背多主服务器(以及无单点故障)的目的。我使用 csync2(带 lsyncd)来保持 Web 节点与 succes(后台 rsync)同步。
一般建议
您这样做是为了提高性能还是为了提高可用性?如果是为了提高性能,那么单一位置和前面的 Varnish 服务器将使您走得更远。我知道您仍然会有延迟,但您可以通过缓存“削减”服务器开销。您甚至可以在其他位置添加 Varnish 服务器。复杂性将大大降低(永远不要低估这一点;保持简单)。再加上用于资产(CSS、js、图像等)的 CDN,您很可能能够为美国用户提供与欧洲用户一样好的用户体验(如果您的服务位于欧洲)。
如果为了实现高可用性而这样做,则必须通过引入复制来增加复杂性。