前面提到过的OpenResty/Nginx的负载均衡中,upstream中的上游服务器在服务器启动后就是一个固定的死机,不能进行动态更改。这里所说的变化实际上更多的是指增加了机器。由于upstream在上游服务器不可用的情况下自动摘除服务器,但在新增服务器的情况下upstream不能这样做。常规的负载均衡方法可以是修改配置,然后重新启动服务。以下是动态负载均衡的一种方法,即通过动态重启服务;另一种方法是通过代码动态拉动服务器列表。
Consul功能介绍
Consul是一种分布式的服务登记和发现系统。这样,Consul用于管理上游服务器,而当服务器启动时,它被注册为注册表,而当服务关闭时,它从注册表中删除。这里需要注意的是:当上游服务器关闭时,Consul本身并不会自动将其排除,而是在服务器关闭之前,需要主动将服务移出Consul。
Consul具有下列功能:
ServiceRegistry:服务提供者可以通过HTTP或DNS方式向Consul注册服务。
ServiceDiscovery:服务消费者可以通过HTTP或System的方式,获得服务的IP和PORT。
错误检测:支持TCP/HTTP等健康检查机制,在服务发生错误时将其排除。
K/V存储:使用key-valh实现配置中心,并使用HTTP长轮查询改变配置。
MiddleDataCenter:支持多个数据中心,可以根据数据中心注册和发现服务。可配套仅供本地机房使用的服务,多个机房可做到异地容灾。
Raft算法:一个Consul一致性算法。
使用Consul可以获得upstream中的上游服务器列表,接下来要做的是在upstream中生成模板。此处需要使用Consul-templee,它可以使用HTTP长轮询实现变更触发和配置变更。这样,您就可以动态地生成基于Consul服务器列表的配置文件,然后重新启动OpenResty/Nginx。