我需要为大量并发用户运行 Linux-Apache-PHP-MySQL 应用程序(Moodle 电子学习平台)——我的目标是 5000 名用户。并发是指 5000 人应该能够同时使用该应用程序。“工作”不仅意味着读取数据库,还意味着写入数据库。
该应用程序不太典型,因为它在数据库上执行大量插入/更新,因此缓存技术没有太大帮助。我们使用 InnoDB 存储引擎。此外,编写应用程序时并未考虑性能。例如,一个 Apache 线程通常占用大约 30-50 MB 的 RAM。
我将非常感激能够了解构建能够处理这种负载的可扩展配置所需的硬件信息。
我们现在使用的是两台 HP DLG 380,配有两个 4 核处理器,能够处理低得多的负载(通常为 300-500 个并发用户)。投资这种设备并使用它们构建集群是否合理,还是最好使用一些更高端的硬件?
我特别好奇
- 需要多少台服务器以及多强大的服务器(处理器/核心的数量、RAM 的大小)
- 应该使用什么网络设备(什么样的交换机、网卡)
- 任何其他硬件,如特定的磁盘存储解决方案等,都需要
另一件事是如何把所有东西组合在一起,这就是最优架构。使用 MySQL 进行集群相当困难(人们抱怨 MySQL Cluster,甚至在 Stackoverflow 上也是如此)。
答案1
光盘。合适的 RAID 控制器后面有大量快速光盘。我个人使用 SuperMicro 2 机架单元笼,可容纳 24 张 2.5 英寸光盘,以及 WD Velociraptor 10k RPM 光盘 - 对我来说足够了。您可以轻松堆叠这些盒子以处理更多光盘 - 我使用的 Raid 控制器(Adaptec 5805)可以处理大约 190 张光盘。当谈到高端数据库、插入和更新时,光盘将是您的问题。
获取其中的 X(x >1)以实现冗余,并按数据库方式对它们进行主/从控制(这里没有 mySQL 专家)。
网络:集群内部可能为 1gbit。在使用 10gbit 之前,请先查看 Infiniband (12gbit)。使用合适的主板,这比使用 10gbit 以太网更便宜,并且延迟更低。
然后使用更小的/其他的盒子作为前端。Supermicro 和 Tyan 都有多节点机箱 - 您可以获得一个 2 机架单元系统,即 4 台独立的计算机,每台计算机有 2 个处理器。集群前端 ;) 感谢上帝,现代处理器可以处理大量 RAM,因此从那方面来说 50mb / apache 进程并不是那么糟糕。习惯使用具有 32 或 64 GB RAM 的机器 ;)
另外,您可能想要寻找用于前端的 nito 刀片,但我从来无法从它们中获得经济效益(太贵了,再加上笼子 - 你好?)。
答案2
忘记集群吧——当每个人都需要写入数据库时,它就无法正常工作。
也许你可以使用多个数据库来划分数据。例如,连接到服务器上的数据库的用户连接substring(md5sum(username) for 1)="0"
到databasename_0
服务器上的数据库。databaseserver_0
substring(md5sum(username) for 1)="2"
databasename_2
databaseserver_2
您可以通过这种方式从 1 台服务器扩展到 16 台。例如,对于 2 台服务器 - DNS 名称指向databaseserver_0
,指向。如果一台服务器比另一台服务器更强大,您可以让它运行更多数据库。databaseserver_7
server1
databaseserver_8
databaseserver_f
server2
这样,您就可以轻松且低成本地扩展。