正如我们过去所做的那样,我希望为每个转向负载均衡的人收集有用的信息,因为您的代码必须知道的问题。

我们从一个apache服务器迁移到squid作为反向代理/负载均衡器,后面有三个apache服务器。

我们正在使用PHP / MySQL,因此问题可能有所不同。

我们必须解决的问题:

会话

我们从“默认”移动了php会话(文件)到分布式memcached-sessions。简单的解决方案,必须要做。这样,您也不需要“粘性会话”。在你的负载均衡器上。

缓存

对于每个网络服务器的非分布式apc-cache,我们为分布式对象缓存添加了anoter memcached-layer,并用它替换了所有旧的/过时的文件缓存系统。

上传

上传转到共享(nfs)文件夹。

我们针对速度优化的事情:

静态文件

我们的主NFS运行lighttpd,提供(也是用户上传的)图像。 Squid意识到这一点,并且永远不会在我们的apache-nodes中查询图像,从而提供了良好的性能提升。 Squid还配置为在ram中缓存这些文件。

您做了什么来让您的代码/项目为负载均衡做好准备,让人们考虑这一举措的任何其他问题以及您使用的是哪种平台/语言?

有帮助吗?

解决方案

这样做时:

对于http节点,我努力推动单个系统映像(ocfs2对此有利),并使用磅或十字路口作为负载均衡器,具体取决于方案。节点应该有一个小的本地磁盘用于交换,并避免大多数(但不是全部)CDSL的头痛。

然后我将Xen带入混音中。如果您在Xenbus上放置一小部分时间信息(即Linux实际承诺为每个VM处理的虚拟内存量(又称为Committed_AS)),您可以快速检测到脑静载负载平衡器并对其进行调整。 Oracle也抓住了这个......现在正在努力改进Linux中的气球驱动程序。

之后,我看看跨越sqlite3拆分任何给定应用程序的数据库使用量的成本以及应用程序本身想要的任何数据库,同时意识到我需要拆分数据库,因此posix_fadvise()可以完成其工作而不会污染内核不必要的缓冲。由于大多数DBMS服务都希望自己进行缓冲,因此您还必须让它们进行自己的群集。这确实决定了我使用的数据库集群的类型以及我对气球驱动程序所做的工作。

然后,当特权域监视其内存和CPU使用时,Memcache服务器再次从瘦的initrd启动,因此它知道何时启动更多。

心跳/接管的选择实际上取决于给定的网络和群集的预期用途。很难概括那一个。

最终结果通常是5或6个物理节点,并且在连接到镜像存储时,会有相当多的内存启动虚拟机监视器+来宾。

存储也很难用一般术语描述。有时我使用集群LVM,有时候不使用集群LVM。当LVM2最终离开其当前基于字符串的API时,not将会改变。

最后,所有这些协调都会导致 Augeas 根据通过以下方式传达的事件动态更新配置Xenbus。这包括ocfs2本身,或配置不能驻留在单个系统映像上的任何其他服务。

这是一个特定于应用程序的问题..你举个例子吗?我喜欢memcache,但并不是每个人都可以从中受益,例如。我们是在审核您的配置还是谈论一般的最佳做法?

修改

很抱歉以Linux为中心......这通常是我在设计群集时所使用的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top