免责声明:我对负载平衡是完全陌生的,对于nginx的使用经验极less。
我将在几个月内推出一个网站,我想确保它保持和响应。 我相信负载平衡是解决这个问题的方法。
不过,我想我可以一箭双雕。 我的目标受众将分散在北美和英国,所以我想要做的就是购买两到三台服务器,将它们分散到不同地域,然后进行负载平衡。
我不想做简单的基于循环的平衡; 我认为将用户引导到最接近的服务器以获得更快的响应时间会更有益, 除非它已closures或负载很重。
我看到有一个叫做ip_hash指令的东西,但是这听起来像只能确保用户被发送到同一个服务器,但不一定是最近的服务器。 有没有办法做我想要的?
向多个服务器添加多个服务器可以实现多个服务器之间的负载平衡,但通常是服务器位于相同位置的情况。
当用户访问您的网站时,他们会查找您网站的域名的IP地址。 一个IP地址对应于互联网上的一个位置,所以必然地,网关服务器位于一个位置。 这意味着如果服务器不在同一个位置,实际上会起反作用,因为所有的网站数据传输都将通过运行nginx的网关服务器。
要在地理上进行负载平衡,您需要多个域或子域。 每个域/子域对应于一个地理区域(尽pipe一个地理区域可以有多个域)。 您更新域/子域的Alogging以指向正确的服务器,并正常进行configuration。
最后,你可以设置一个基于IP地址的redirect到合适的子域来获得最近的服务器。
请注意,如果您是按国家/地区进行操作,则会得到合理的结果,但不一定是最接近的服务器。
您可能会在每台服务器上运行nginx,configuration根据其处理的IP地址块而不同。
用户将能够看到他们已被redirect到不同的网站(域/子域)来处理他们的请求。 这是google.com所做的,取决于您访问的位置,它将redirect到特定于国家的TLD。
注意这不是一个简单的configuration。 如果您希望在服务器出现故障时进行故障安全保护,则必须在每个位置都有多个服务器。 您还将拥有许多configuration稍有不同的服务器,您将不得不进行pipe理。 在nginx中设置地理redirect可能也不一定是最简单的,但是您可以改为在应用程序服务器中进行redirect。
如果你需要监视真实服务器的状态,你会喜欢使用keepalived。 keepalived可以testing你设置的页面,并且在服务器closures之后,服务器将会改变。