我正在为一家小型金融公司担任Web应用程序开发人员。 我们公司有一个以PHP编码并运行在Apache上的interal网站。 最近我们的服务器出现故障,网站停机了好几天,造成严重的问题。
我被要求设置两台服务器来为网站提供服务。 所以我们需要三台Apache Web / App服务器在三台不同的机器上运行。 当用户login网站时,必须根据负载情况由三台服务器中的一台进行encryption。 另外,如果一台或两台服务器出现故障,服务器处于closures状态必须处理网站请求。
我只是知道在PHP中创build一个网站,并将其托pipe在Apache服务器上。 我没有任何networking知识。 请告诉我为创build上述系统需要学习什么。
我不希望被喂食。 只需要一个指向我必须学会实现我的目标。 我同时使用谷歌search,但在这里问了这个问题,因为我急于执行它。
一个常见的方法是开发知道群集的Web应用程序。 您可能需要重新制作与数据库,会话,共享和dynamic数据相关的网站基础知识。 我相信我的问题会让你感兴趣: 可扩展networking服务的云/集群解决scheme 。 要使网站“可扩展”,您需要创build一个可扩展的devise。 唉,没有button“写得更快”写在下面:)
一个简单的方法是在这些服务器之间复制所有的数据(你可以使用GlusterFS作为文件,并且复制你的MySQL /这些服务器之间的任何东西),并确保所有的会话都可用。 这不是最好的build议,但是你不需要重做你的代码:)
使用Round-Robin DNS可以轻松实现负载平衡:只需添加指向不同服务器的多个“A”logging,然后由客户端随机选取。 例如,Google有这个function:
$ host -ta google.com google.com有地址74.125.87.147 google.com有地址74.125.87.103 google.com有地址74.125.87.104 google.com有地址74.125.87.99 google.com有地址74.125.87.105
虽然最简单的负载均衡方法就像o_O Tync的答案中所说的循环DNS一样,但您需要知道,如果其中一台服务器发生故障,并且您删除了其DNSlogging,则会有一部分用户被定向到closures服务器,直到其DNSlogging上的TTL过期,或手动更改IP。 根据正常运行时间的重要性,这可能是不可接受的。 另外,任何正在与服务器断开连接的用户,他们都将失去该会话。
RRDNS对于负载平衡是很好的,但并不是高可用性的关键。
要实现真正的高可用性负载平衡,最简单的方法(也就是最简单,不一定是最便宜的方法)就是使用位于Internet连接和Web服务器之间的硬件负载保护networking设备。 这样的设备可以用来拆分系统间的负载,也可以在出现问题时自动(或手动)从服务器中删除服务器。 此外,它还会处理TCP连接,以便在原始设备停机的情况下,用户可以自动连接到另一台服务器。 这个解决scheme的另一个优点是它通常只需要很less或者不需要修改应用程序。 请注意, 真正的 “高可用性”configuration通常会使用两个负载平衡器来减less单点故障。
另一种select是使用常规服务器来实现高可用性负载均衡场景。 以下是关于configuration高可用性负载均衡Apache群集的一些信息。 Linux-HA站点是Linux负载平衡信息的重要来源。
另外一个select就像Linux虚拟服务器项目。 LVS将Linux用于所有组件,包括服务器和负载平衡器,并且通常提供一个无缝的解决scheme(一旦configuration完成)。
总而言之:我的一般build议是,对于像您这样的情况,在这种情况下要求缺乏经验的pipe理员设置负载平衡,硬件负载平衡器设备是最容易实现的方式。 这显然要花一些钱,但可以节省很多时间。 当然,确定权衡点是个人的决定。
我要做的就是坐下来看看服务器上正在运行的服务。
我现在假设你正在运行linux,尽pipe你没有明确地说过。 你想看的是清漆。 这是一个高性能的反向代理和负载均衡器。 你可以按照这里的在线示例进行设置,这应该是直接的工作。
如果在3个服务器中有2个清漆节点,请将1/3的stream量指向每个服务器,并将其排列为循环分配。 这两台服务器需要唯一的公有IP地址,您可以在DNS中设置多个Alogging来执行RoundRobin DNS(RRDNS)。
如果你的服务对业务至关重要,而且你的最后一次中断成本很高,那么你可能需要争取一个更加复杂和冗余的networking。 假设您目前只有一台服务器,在一个供应商提供的一个IP上,如果您之前的中断与networking有关,那么您可能会发现增加networking弹性可以延长正常运行时间。
还要严格监控你的监控,确保你在服务器上监控可能导致服务器closures的事情,硬盘上的SMART数据,可用交换空间,可用内存,空闲/磁盘空间。 让Nagios和Munin成立 Nagios在关键监测条件得到满足时提醒,Munin将这些数据绘制成图。
您可能还需要进行一些应用程序级别的更改。 假设您的应用程序是基于会话的,您将需要某种方式来处理用户的请求,而不是总是进入同一台服务器。 你可以让他们客户端,或服务器端和粘性。 你可能会发现memcached将在这里帮助你很大。 至于应用程序级别的变化,你可能想要问StackOverflow,因为他们更多的代码,更less的服务器。