【问题标题】:Autoscale Magento in the cloud在云端自动缩放 Magento
【发布时间】:2014-03-09 10:46:19
【问题描述】:

我刚刚进入电子商务世界,我正在努力让我的 Magento 网站启动并运行。

我正在使用 AWS 云来托管我的网站。我正在尝试使用一种架构,我可以在其中运行连接到单个数据库服务器的多个服务器。具体来说,我想在高负载期间使用 AWS Auto Scaling 组和 ELB 来启动多个 EC2 实例。只有一个 Mutli AZ RDS 数据库实例。

作为最初的试验,我尝试创建 2 个 ec2 实例,并在它们上都安装了 magento。我对它们都使用了相同的 RDS 数据库。但事实证明,magento 将 webserver 的基本 url 存储在数据库本身中。这意味着,我只能存储运行一台特定服务器的 magento 网站的一个基本 url。

准确地说,magento 将基本 url 存储在表 core_config_data 中的“路径”列中,其中行值为“web/unsecure/base_url”和“web/secure/base_url”,对应行的“值”列指定 url Magento 安装的 Web 服务器的地址。 我的问题是,如果 magento 在基本 url 中只允许一个服务器地址,我如何使用 EC2 自动缩放来使用多个服务器。

这是有 2 行的表格的部分视图 -

config_id   scope     scope_id    path                      value   
5           default   0           web/unsecure/base_url     http://server1.com/magento/
6           default   0           web/secure/base_url       http://server1.com/magento/

是否有任何其他已知方法可以在 Magento 的重负载条件下以某种方式使用水平缩放。

【问题讨论】:

    标签: magento amazon-web-services magento-1.7 e-commerce autoscaling


    【解决方案1】:

    我不认为负载平衡是这样工作的。

    您需要一个负载均衡器来接收请求的 URL,然后将其传递给运行 Magento 的服务器之一 - 所以我认为无论如何您都会将相同的 url 传递给两个服务器,不是吗?我不知道该怎么做。

    您正在尝试建立一个非常复杂的系统。

    如果您想为安全和非安全 url 设置不同的值,您可以考虑重写一些函数。尝试阅读此代码以帮助您入门:

    //file app/code/core/Mage/Core/Model/Store.php
    //class Mage_Core_Model_Store
    //function getBaseUrl()
    //function getDistroServerVars()
    
    //file app/code/core/Mage/Core/Model/Url.php
    //class Mage_Core_Model_Url
    //function getBaseUrl()
    
    //file app/code/core/Mage/Core/Controller/Request/Http.php
    //class Mage_Core_Model_Http
    //function - I don't know, any of them, none of them
    

    并查看其中包含字符串“substDistroServerVars”的任何文件,或者 isDirectAccessFrontendName 可能会暴露一些东西。 getDistroServerVars 在此great article by the almighty Alan Storm 的末尾讨论。

    但我认为这不是真正的答案 - 对于真正的答案,请跳到这个乏味独白末尾的链接。

    如果这是您第一次涉足 Magento,并且您真的认为您将获得需要在两台服务器上进行负载平衡的商店的大量流量,那么您可以负担得起,*必须负担* *,第三方托管并获得具有多年跨多个服务器在重负载上运行 Magento 经验的专业人员。您还需要(至少)将图像移交给 CDN。

    *我的意思是,如果您的商店有这么高的销量,那么它就有很高的收入,您应该将这些收入用于保持您的商店运转:提供 24/7 支持的专业托管。否则停机时间会很昂贵,而且长期实施将意味着收入损失。

    *如果您只是为了好玩而尝试此操作并了解有关在多台服务器上设置 Magento 的知识,那么我建议您做两件事:

    1) 首先练习让 Magento 在一台服务器上运行 - 并优化那里的容量(缓存、编译器、数据库调优、日志文件分析、平面表、cron 作业、CDN、可能结合 JS 和 CSS、Web 服务器调优和获取正确的标题,可能是整页缓存和少量 Redis)-因为这不是一台服务器上的微不足道的列表,更不用说两个 + DB 服务器和 ELB。

    并且 2) 练习让 Apache 或 nginx 使用您的电子商务 SSL 证书来提供负载平衡的内容。只有这样,您才应该尝试加入这两个系统。准备好为此花费数月时间 - 包括找出 Seige、AB 或 jmeter 进行模拟负载测试。

    但是,如果您真的想在此处设置 AWS ELB,这里有一些很好的资源可以帮助您入门 - 特别是 Adrian Duke 的详细教程(第一个链接) - 请注意最后一节中的详细信息标题为“Magento”的文章,这可能是您问题的答案

    Getting and scaling Magento in the cloud 阿德里安·杜克

    Using AWS Auto Scaling with an Elastic Load Balancer cluster on EC2(实际上是 WordPress 安装,不是 Magento,但 Shroder 先生知道他的 Magento)

    Running Magento in an AWS Environment(万岁艾伦风暴)

    【讨论】:

      【解决方案2】:

      我在将 Magneto 修改为豆茎包方面取得了相当大的成功。步骤(松散)是:

      1. 在本地安装 GIT
      2. 安装 AWS 命令​​行工具
      3. 安装 AWS Beanstlalk 命令行
      4. 构建模块以在每次在 magento 中上传图像时将图像上传到 s3
      5. 利用 OnePica 的 Magneto 扩展程序
      6. 使用 Amazon 的 REDIS Cache 缓存数据
      7. 为数据库使用 RDS
      8. 使用 Route53 进行路由 &
      9. 将云端用于图像、js 和 CSS 发行版

      AWS 的几个缺点

      1. 自定义磁电机来寻找东西是一件很痛苦的事情。正如我们所说的,我正试图让它保持 EC2 实例之间的会话持续存在,因为负载均衡器将其切断。
      2. 每次您需要以任何方式修改 Magento 时, 都是 git 提交,(然后我们通过单独的 beanstalk 实例在本地进行测试),然后推送到生产环境。

      总之,它相当稳定。不过,我们还没有达到很高的数字。

      【讨论】:

        【解决方案3】:

        通常你会在节点前面放置一个负载均衡器来分配负载,并且每个节点都配置为使用相同的 base_url。如果您需要多个数据库服务器,可以使用 MySQL 复制,但我从未发现需要这样做。未将 amazon ec2 与 magento 一起使用,但在具有两个节点、一个数据库服务器、负载平衡器和共享媒体的专用服务器环境中具有类似的设置。

        这里的图表很有用,特别是对于媒体的共享存储,您需要做这样的事情。 http://www.severalnines.com/blog/how-cluster-magento-nginx-and-mysql-multiple-servers-high-availability

        另外,我发现亚马逊似乎提供了 Elastic Load Balancing,这是您的想法。 http://aws.amazon.com/documentation/elasticloadbalancing/

        【讨论】:

          猜你喜欢
          • 2013-04-20
          • 2017-09-24
          • 2016-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-07
          • 2019-02-24
          • 2016-06-14
          相关资源
          最近更新 更多