聆雨亭

道听途说nginx系列2 - 群集配置

2014-12-29

阅读:

字数:4200


“test-jb-setup”

现在我们已经可以运行nginx,并让nginx来提供一些能力。

负载均衡

通常而言,对于大型系统而言,大并发,大用户量请求,由1台服务器来处理是不现实的,单台服务器的硬件资源有限,很容易就会出现瓶颈。这个时候我们就希望能通过不同的服务器,提供相同的功能,来分担压力,均衡负载。 负载均衡更多的是分担计算能力。

失效转移

现实情况下,对于分布式系统而言,服务器异常是很正常的事情。和负载均衡类似。所以我们需要在服务器失效的时候,能够快速恢复对外服务。负载均衡意味着相同功能的服务器一直处于活动状态。而失效转移更多的是指几台功能相同的服务器,当一台出现故障时,能快速切换到另外一台服务器。而这台服务器可能只是处于等待状态,原来并不提供功能。

总而言之,为了区分功能相同的服务器,就有了cluster的概念,即群集。群集中的服务器功能一致,统一管理。

配置样例

就配置而言,nginx提供了很简单的方式,提供一个关键字 upstream

 
  upstream  cluster01
  # 定义一个cluster01的集群
  {
  	server 192.168.1.12:80 weight = 3;
  	server 192.168.1.13:80 weight = 3;
  	server 192.168.1.14:80 weight = 3;
  	# 这个集群里面有3个服务器,
  }
  
  server {
  	listen  80;
  	server_name test;
  	location /{
  		proxy_pass http://cluster01
  		# 请求会分发到集群去
  	}
  }
  

参数详解

如果某个服务器配置较好,优先处理如何配置?

可以通过weight来设置权重,默认是1,数字大的优先级高

如果某个服务器一直连不上,如何废弃?

可以通过max_fails和fail_timeout配置,如

  
  server 192.168.1.13:80  max_fails=3 fail_timeout=30s;
  
  • max_fails表示nginx和这个服务器尝试失败的次数和超时时间
  • 如果超过次数,这个服务器就从集群中剔除,下次不再分发
  • 如果为0,就表示一直认为服务器可用

如果某个服务器平时闲置,当主服务器不行了才启用?

可以增加backup关键字,如

 
  server 192.168.0.2  backup
  

如何保障用户请求一直在某台服务器上?

可以增加ip_hash参数,nginx会把ip地址hash,形成一个唯一的散列值,用来和后台服务器匹配。

   
upstream cluster01 {
   ip_hash;

   server 192.168.1.12:80 weight = 3;
   server 192.168.1.13:80 weight = 3;
   server 192.168.1.14:80 weight = 3;
}   

如果临时移除某个服务器,但是老的客户端请求继续

接ip_hash问题,如果已经有客户端连到某个服务器了,但是需要临时移除,这个时候可以加一个参数down,表示这个服务器不再接受新的请求,但是老的请求继续处理。

  
upstream cluster01 {
   ip_hash;

   server 192.168.1.12:80 weight = 3;
   server 192.168.1.13:80 weight = 3 down;
   server 192.168.1.14:80 weight = 3;
}  

负载算法

ip_hash只是一种负载均衡方法,还有几种其他的方法,有机会再更新


root和alias的区别

Similar Posts

Comments