需要有关为 Moodle 构建可扩展架构的建议

Rob*_*ert 5 mysql scalability moodle architecture apache-2.2

我正在研究为基于 Moodle 的教育网站设计一个架构,它最初将为数千名用户提供服务,但需要能够发展以支持多个国家/地区的数十万到数百万用户。

我正在考虑使用负载平衡器将请求分发到多个 Web 服务器。网络服务器可以被一些服务静态内容和一些服务动态内容分开。然后就是写入一个mysql master节点,从slave节点读取。

什么样的负载均衡器适合moodle,我应该从其中一家供应商那里获得硬件负载均衡器解决方案,还是自己使用LVS或反向代理等开源解决方案构建一个?

我最初计划使用 apache 服务器来为网页提供服务,然后随着负载的增加,分为用于静态内容的 lighttpd 网络服务器和用于动态内容的 apache 应用程序服务器。如果需要,也将部署 gzip 压缩、squid 缓存、memcache 等内容。

对于 web 服务器硬件,我应该使用 one-u 单插槽服务器还是刀片解决方案?哪一个最终的运行和扩展成本更低?Supermicro 有一个有趣的产品,1u 机箱中的双服务器和 2U 机箱中的 4 个服务器和 infiniband。这里有人试过这些服务器吗?

对于存储,我应该使用 SAN 或 Sun 统一存储 7000 之类的存储服务器就足够了。对于 mysql 集群设置,我应该有两个不同的存储系统,一个用于主节点写入访问,另一个用于从节点读取?还是所有节点都应该有单独的存储?

由于这个网站可能会比较重读操作,那么mysql集群和存储设置应该考虑什么?

对于管理部分,我计划使用 dsh、ganglia、nagios、splunk、kickstart。

对于备份,我计划使用 LTO 磁带自动加载机。该站点将主要用于亚洲地区,因此夜间会有几个小时的低流量。备份 mysql 集群的最佳方法是什么?我可以暂时禁用写入并取出 master 来执行备份吗?

请告知您是否有建立这种可扩展网站的经验,我的大部分经验都是在使用大型 unix 机器或较小的独立 unix/linux 机器方面。所以这种横向扩展的实现对我来说是第一次。

谢谢

罗伯特。

小智 4

罗伯特,你显然是一个聪明的人,但尊敬的,请找一位具有先前领域知识的顾问,或者现在开始构建一些小东西,看看它会带你去哪里。没有办法回复你的帖子;它有太多抽象概念,没有硬性数字。

一些想法:

最初将为数千名用户提供服务……逐渐发展到支持数十万至数百万用户

首先证明您需要这种规模水平。不要构建横向扩展架构以应对永远不会出现的用户。抱歉,如果我听起来很刺耳,但 99% 的网站都没有发展到规模最大的程度。请参阅堆栈溢出/服务器故障;他们每月通过少数相当传统的服务器为一百万用户提供服务。

我应该从供应商之一获得硬件负载平衡器解决方案,还是使用开源解决方案自己构建一个

取决于您的技能以及您在时间与金钱方面的情况。一旦构建完成,开源和商业产品的工作方式几乎完全相同。商业解决方案往往具有更好的统计数据和更好的开箱即用的管理界面。

对于Web服务器硬件,我应该使用one-u单路服务器还是刀片解决方案?

向您的服务器供应商询问价格。询问您的数据中心有关功率密度的信息,即他们在尺寸和功耗之间的首选平衡 - 通常您会受到功率限制,因此像刀片式服务器这样的密集解决方案可能不会为您带来任何好处。

对于存储,我应该使用SAN或像Sun Unified Storage 7000这样的存储服务器就足够了。

当您确实需要 SAN 时,请使用 SAN;那么您还将更好地了解 SAN 应该为您解决哪些需求。

由于该网站的读操作可能会比较繁重,那么mysql集群和存储设置应该考虑什么?

Create a really good caching solution. Either full page caching like Squid (Varnish), or application data caching like Memcached, or a combination of both. Consider cache invalidation, could you need to quickly purge content from your caches to avoid it being served again?

What is the best way to back up up a mysql cluster?

Opinions vary, but one common approach is to have a dedicated slave MySQL just for backups, and use something like InnoBackup or Maatkit for a self-scripted backup solution.

Edit: If you're really going to build this from scratch now, then please take a good look at cloud computing before committing. Cloud computing isn't just about scalability, even if scalability is a great strenght. Certain services that come as part of the package can really help in making day to day operations easier. Some examples:

  • Live snapshots of Amazon EBS volumes make for easy database backups.
  • Amazon has load balancing as a set and forget service (of course more feature limited than good self-hosted load balancer, but easy to get started with).
  • Rightscale has extensive server monitoring built into their images, which makes for easy capacity planning / application introspection.