我正在研究设计一个基于 Moodle 的教育网站的架构,它最初将为几千名用户提供服务,但需要能够发展到支持多个国家的数十万到数百万用户。
我正在考虑使用负载平衡器将请求分发到多个 Web 服务器。Web 服务器可以分为一些提供静态内容和一些提供动态内容的服务器。然后写入 mysql 主节点并从从属节点读取。
什么样的负载均衡器可以与 moodle 配合良好,我应该从某个供应商处获取硬件负载均衡器解决方案,还是使用 LVS 或反向代理等开源解决方案自己构建一个?
我最初计划使用 apache 服务器来提供网页服务,然后随着负载变高,将分为 lighttpd 网络服务器用于静态内容,apache 应用服务器用于动态内容。如果需要,还将部署 gzip 压缩、squid 缓存、memcache 等内容。
对于 Web 服务器硬件,我应该使用 1u 单插槽服务器还是刀片解决方案?哪一个最终运行和扩展起来更便宜?Supermicro 有一款有趣的产品,在 1u 机箱中配备双服务器,在 2U 机箱中配备 4 个服务器,并带有无限带宽。这里有人尝试过这些服务器吗?
对于存储,我应该使用 SAN 还是像 Sun unified storage 7000 这样的存储服务器就足够了。对于 mysql 集群设置,我应该有两个不同的存储系统吗?一个用于主节点写入访问,另一个用于从属节点读取?还是所有节点都应该有单独的存储?
由于该网站的读取操作可能会更多,因此应该考虑 mysql 集群和存储设置吗?
对于管理部分,我计划使用 dsh、ganglia、nagios、splunk、kickstart。
对于备份,我计划使用 LTO 磁带自动装载机。该站点主要用于亚洲地区,因此晚上会有几个小时的低流量。备份 mysql 集群的最佳方法是什么?我可以暂时禁用写入并取出主服务器来执行备份吗?
如果您有建立这种可扩展网站的经验,请告知,我的大部分经验都是使用大型 unix 机器或较小的独立 unix/linux 机器。因此,这种扩展实现对我来说还是第一次。
谢谢
罗伯特。
答案1
Robert,你显然是个聪明人,但恕我直言,请找一位具有相关领域知识的顾问,或者现在就开始构建一些小东西,看看它会带你走向何方。没有办法回答你的帖子;它有太多抽象概念,没有确切的数字。
一些想法:
最初将服务于几千名用户……然后逐渐支持数十万甚至数百万用户
首先证明您需要这种级别的规模。不要为了应对永远不会出现的用户而构建横向扩展架构。抱歉,如果我听起来很苛刻,但 99% 的网站都不会发展到规模的顶端。请参阅 Stack Overflow / Server Fault;他们每月通过少数几台相当传统的服务器为 100 万用户提供服务。
我应该从某个供应商那里获得硬件负载均衡器解决方案,还是自己用开源解决方案构建一个
取决于您的技能以及您的时间与金钱状况。一旦构建完成,开源产品和商业产品的工作原理几乎完全相同。商业解决方案往往具有更好的统计数据和更好的开箱即用管理界面。
对于 Web 服务器硬件,我应该使用 1-u 单插槽服务器还是刀片解决方案?
向服务器供应商询问价格。向数据中心询问功率密度,即它们希望在尺寸和功耗之间取得的平衡点——通常情况下,您会受到功率限制,因此像刀片服务器这样的高密度解决方案可能不会给您带来任何好处。
对于存储,我应该使用 SAN 还是像 Sun unified storage 7000 这样的存储服务器就足够了。
当您确实需要 SAN 时,请获取 SAN;这样您还将更好地了解 SAN 应该为您解决哪些需求。
由于该网站可能会更加重视读取操作,因此应该考虑 mysql 集群和存储设置吗?
创建一个真正好的缓存解决方案。要么是像 Squid (Varnish) 这样的全页面缓存,要么是像 Memcached 这样的应用程序数据缓存,或者两者结合。考虑缓存失效,您是否需要快速清除缓存中的内容以避免再次提供该内容?
备份 mysql 集群的最佳方法是什么?
意见各不相同,但一种常见的方法是使用专用的从属 MySQL 进行备份,并使用 InnoBackup 或 Maatkit 之类的自脚本备份解决方案。
编辑:如果你现在真的要从头开始构建它,那么请花点时间很好地了解云计算在承诺之前,请考虑一下。云计算不仅仅涉及可扩展性,即使可扩展性是一大优势。作为软件包一部分的某些服务确实有助于简化日常操作。以下是一些示例:
- Amazon EBS 卷的实时快照可以轻松实现数据库备份。
- 亚马逊将负载平衡作为一项设置后即可忘记的服务(当然,与优秀的自托管负载平衡器相比,其功能更加有限,但很容易上手)。
- Rightscale 在其图像中内置了广泛的服务器监控,可以轻松进行容量规划/应用程序自省。
答案2
虽然我不太了解 Moodle 的具体细节,但我可以提供一些有关常规可扩展性的技巧。
刀片和 SAN 经常被供应商误售。我怀疑一组商用 1U 服务器可能最适合您的需求。许多数据中心不会采用刀片系统,因为其功耗非常高,而且冷却要求也很高!
我非常喜欢格鲁斯特对于分布式/复制存储,您可能会发现研究大型供应商提供的 SAN 解决方案的替代方案很有趣。
一整套 HP DL360 也能达到同样的效果(或者更便宜的商品服务器(我强烈推荐 DNUK))。我非常怀疑您是否需要服务器之间的 Infiniband 互连(基础设施昂贵,并且对于 Web 服务目的而言基本上没有必要,如果您正在对基因组表达进行 HPC 建模,我的答案可能会有所不同!)
关于网络基础设施(如果您也必须考虑这一点...),我推荐使用 Cisco 路由器,搭配 Cisco Catalyst 交换机或 HP Procurves(在我看来,势均力敌,而且更便宜)
就负载平衡而言,运行 LVS 的专用 Linux 服务器可以轻松处理多个集群节点的流量。如果您有钱(30,000 美元以上),那么 citrix netscaler 可能是合适的缓存/加速/负载平衡平台,但请记住,您需要 2 个(最好是 3 个)来实现冗余。
您可能应该从一开始就尝试包含 memcache,它很容易增加可扩展性,并且大大提高了缓存性能,尤其是在从 MySQL 数据库集群读取时。您还可以做其他事情来调整 MySQL 性能,例如使用 InnoDB 而不是 MyISAM。
我认为使用反向代理缓存(例如 Varnish)比使用 Squid 更好,因为 Squid 更适合用作客户端缓存。
您可以轻松拥有几个专用的 Varnish 缓存节点,或者在与 Apache / lighttpd 服务器相同的服务器上运行 Varnish。
尽量避免陷入供应商锁定的状态,因为在许可问题上,这可能会非常昂贵。完全使用免费/开源软件构建可扩展的网站是完全有可能的。当然,软件负载平衡器的速度不会像使用专用 ASIC 的硬件负载平衡器那么快,但有了良好的网络基础设施,它可以非常接近。
对于管理部分,我计划使用 dsh、ganglia、nagios、splunk、kickstart。
只需将 puppet 添加到该列表中,您就是赢家。请注意 splunk 昂贵的许可(当您每天处理 10 GB 的日志时,它可能会对您造成影响)。
Munin 是一款出色的免费监控工具,并且比 Zabbix 等应用程序更具优势,因为它可以从插件脚本自动配置图表(因此您不必提前跟踪您正在监控的内容)。
答案3
虽然我从未管理过可以被认为大型的 Moodle 系统(最多有几千名活跃用户),并且我几乎可以肯定您比我拥有更多的 Linux 经验,但我可以提供一些观察结果。
拥有数百万用户的 Moodle 安装将比我听说过的任何其他安装都要大一个数量级。即使是学生遍布英国和世界各地的开放大学也只预计有 20 万用户。美国的大型大学往往只有数万名用户。要了解规模,请查看http://docs.moodle.org/en/Large_installations你会真的让数百万人使用该系统?他们是会一次性全部加入还是会分几年逐渐加入?如果第一年只吸引 10,000 名学生,则不需要能够处理数百万人的系统。此外,许多机构理论上会使用 Moodle 的学生人数,但实际上只有一小部分人使用该系统。简而言之,从小处着手,然后逐步扩大规模。
Linux 发行版将使管理 Moodle 变得简单。可用的在线社区帮助根本不面向 Windows!
如果您认真考虑这个问题,可以考虑招募当地的 Moodle 合作伙伴(抱歉,我是新手,所以无法发布第二个链接)。他们可以根据个人在设置和管理 Moodle 系统方面的经验提供建议。
Moodle 通常对系统资源的要求非常低。只需注意数据库,因为事务率可能非常高。您没有提到这一点,但请考虑将数据库服务器与 Web 服务器分开,并将资源集中在数据库集群上。使用缓存(eaccelerator 或 memcached)时,Web 访问可以忽略不计。文件存储通常也不密集,只需要链接到一个像样的 RAID 阵列(本地或单独的机器上)。如果您有 SAN,请使用它。如果没有,只需坚持使用简单的东西。
一如既往,备份,备份,备份!
祝你好运!