5

问题: 我在 Azure 上使用 ClearDB for MySQL 数据库设置了一个可扩展的 WordPress 实例(不是 VM,而是 Microsoft Azure 的预配置 WordPress Web 应用程序实例)。我已经测试了 Azure BLOB 存储 WordPress 插件,它可以显示来自我的 CDN 中的数据,我的 Azure 存储在其中设置。

我希望能够扩大我的 WordPress 实例以满足不同区域位置的需求。目前,我们的设置(不是在 Azure 中,而是使用由 Ultima 在不同地理数据中心托管的 4 个 VM)在欧盟、澳大利亚和美国有一个暂存服务器(在美国)和 3 个区域服务器。随着不同地区的需求增加(超过 3 个就可以了,如果我们可以深入到特定的国家,那就太好了)我希望我的 WordPress 网站的一个实例在该地区启动,并将发出请求的用户引导到最接近的服务器他们的地区。

  • 如何使用流量管理器来定义区域并告诉服务器实例在该区域中启动另一个实例节点(不是 VM)?

  • 如何确保该区域中的节点使用
    最接近该区域的 ClearDB 副本(我不希望所有 Web 前端都
    访问美国区域单个位置的数据库)

  • 我如何使用流量管理器来确保从 CDN(Azure 存储)中提取的数据来自最接近
    请求区域的节点)?

  • 如何设置登台服务器并发布到公共节点,
    然后根据区域特定位置的需求进行扩展?

如果您阅读我们目前如何进行全球 WordPress 故障转移设置,我的问题会更有意义。

当前配置和背景故事 目前,我将我们的 WordPress 站点设置在全球不同的 Ultima 托管 VM 上,这些 VM 托管在 3 个区域位置,如下所示。

4 台服务器

  • Staging - 我们在美国的办公室附近的本地临时服务器 VM
  • EU - 由 Ultima 在欧盟地区托管的欧洲服务器。它是登台服务器的 Hyper-V 实例
  • AU - 由 Ultima 在 AU 地区托管的澳大利亚服务器。它是登台服务器的 Hyper-V 实例
  • 美国- 由 Ultima 在美国地区托管的北美服务器。它是登台服务器的 Hyper-V 实例

WordPress:在所有版本上都安装了 4.0.1 版(不是 MULTISITE) 我编辑了 WordPress wp-config.php以根据请求 IP 检测请求的区域服务器(开关/案例),然后为每个服务器设置配置文件以定义下列的:

  • DB_NAME
  • DB_USER
  • DB_PASSWORD
  • 数据库主机
  • WP_HOME
  • WP_SITEURL

示例:对我们的欧盟服务器 IE eu.contoso.com 的请求将在匹配的 CASE 语句中包含这些值

switch ($ip) {
  case (strstr ($ip, '255.255.255.255') == true):   // EU server request, set to port 3306
$port = '3306';
break;
}
$host =  $ip . ':' . $port;
SWITCH ($hostname) {
     case 'eu.contoso.com':  //This is the EU server
          define('DB_NAME', 'main_wp_website');
         /** MySQL database username */
        define('DB_USER', 'main_website_user');
        /** MySQL database password */
        define('DB_PASSWORD', 'main_website_password');
        /** MySQL hostname */
        define('DB_HOST', $host);
        define('WP_HOME', 'http://eu.contoso.net');
        define('WP_SITEURL', 'http://eu.contoso.net');
        break;
}

原因:这允许用户从不同的请求点进入 WordPress 站点,并正确设置对该区域的数据库的数据库访问权限,并使用区域特定的根域重写 URL。所有案例的所有配置文件都存在于每个服务器的 wp-config.php 文件中,因此它们在服务器之间是相同的。

MySQL: 主/从复制中 MySQL 服务器设置的版本 6(在每个服务器上的 my.ini 中)从登台到全球区域服务器

  • 暂存- 设置为主服务器,使用 GTID 以一种方式复制同步到全局区域服务器
  • EU、AU、US - 所有设置为只读模式下的从站。他们接受来自登台服务器的复制更新,但不能将本地提交的数据发布回来

文件存储: 这是网站目录、WordPress 内容目录(插件、主题、上传等)

  • 我们正在使用名为 Syncovery 的产品来监控这些文件夹并检测更改并通过 FTP 自动将文件同步到其他服务器的类似文件夹

  • 当 Syncovery 检测到更改的时间过长时,我们使用 BeyondCompare 进行手动同步

流量路由: 我们使用名为EdgeDirector的 DNS 服务,该服务从请求 IP 检测区域并将请求用户路由到最接近其区域的服务器。

我要防止的事情 目前我们的文件存在同步问题(数据库复制很好,没有问题)。我们的同步程序必须不断扫描和同步数十万个文件,当检测到文件更改时,会启动扫描(这需要时间),然后复制检测到的文件差异(这也需要时间,具体取决于文件大小)。如果在启动扫描后,另一个文件或文件夹发生更改,我们必须等待第一次扫描/文件复制完成。这导致将发布的内容从我们的登台服务器推送到公共集群的时间很长。

我也不想维护 4 个不同的实例/服务器。我最多想要一个暂存实例和一个公共实例,我们发布到并根据区域特定位置的需求向上/向下扩展。

  • Azure 中的暂存/公共实例设置如何工作?
  • 如何配置暂存实例和公共实例?我认为除了服务器名称和数据库名称外,它们将完全相同。
  • 我将如何执行更改以从暂存发布到公开发布?

有没有一种更简单的方法可以根据我上面描述的需求在不同地区全球提供可扩展的 WordPress 网站? 我是 azure 新手,我发现旧方法不一定是新云环境中的最佳方法。

我很清楚如何让 WordPress 网站在 Azure 上运行,并且已经有了一个使用 ClearDB 和 Azure BLOB 存储的工作实例。我真的只是想知道如何像我们当前的设置一样在区域范围内扩展它,或者通过确保他们始终访问最近的服务器并在需要时自动配置和扩展来满足不同地区用户需求的新方法出现。

4

0 回答 0