引言
传统的负载均衡,如果Upstream参数发生变化,每次都需要重新加载nginx.conf
文件,因此扩展性不是很高,所以我们可以采用动态负载均衡,实现Upstream可配置化、动态化,无需人工重新加载nginx.conf
,类似分布式的配置中心。
- Consul+Consul-template 每次发现配置更改需要raload nginx,重启Nginx。
- Consul+OpenResty 实现无需raload动态负载均衡
- Consul+upsync+Nginx 实现无需raload动态负载均衡
1.常用服务注册与发现框架
常见服务发现框架 Consul、Eureka、 ZooKeeper以及Etcd ZooKeeper是这种类型的项目中历史最悠久的之一,它起源于Hadoop。它非常成熟、可靠,被许多大公司(YouTube、eBay、雅虎等)使用。
etcd是一个采用HTTP协议的健/值对存储系统,它是一个分布式和功能层次配置系统,可用于构建服务发现系统。其很容易部署、安装和使用,提供了可靠的数据持久化特性。它是安全的并且文档也十分齐全。
知识补充:
在之前的《分布式电商项目》中有讲过Dubbo,可以参考下(或直接绕过这一部分):
另附一篇文章: 《为什么要用dubbo,dubbo和zookeeper关系,简单的dubbo搭建》
2.Consul快速入门
Consul是一款开源的分布式服务注册与发现系统,通过HTTP API可以使得服务注册、发现实现起来非常简单,它支持如下特性。
- 服务注册:服务实现者可以通过HTTP API或DNS方式,将服务注册到Consul。
- 服务发现:服务消费者可以通过HTTP API或DNS方式,从Consul获取服务的IP和PORT。
- 故障检测:支持如TCP、HTTP等方式的健康检查机制,从而当服务有故障时自动摘除。
- K/V存储:使用K/V存储实现动态配置中心,其使用HTTP长轮询实现变更触发和配置更改。
- 多数据中心:支持多数据中心,可以按照数据中心注册和发现服务,即支持只消费本地机房服务,使用多数据中心集群还可以避免单数据中心的单点故障。
- Raft算法:Consul使用Raft算法实现集群数据一致性。
通过Consul可以管理服务注册与发现,接下来需要有一个与Nginx部署在同一台机器的Agent来实现Nginx配置更改和Nginx重启功能。我们有Confd或者Consul-template两个选择,而Consul-template是Consul官方提供的,我们就选择它了。其使用HTTP长轮询实现变更触发和配置更改(使用Consul的watch命令实现)。也就是说,我们使用Consul-template实现配置模板,然后拉取Consul配置渲染模板来生成Nginx实际配置。
2.1 Consul环境搭建
1.下载consul_0.7.5_linux_amd64.zip
wget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip
2.解压consul_0.7.5_linux_amd64.zip
3. 执行以下 ./consul
出现以下信息就说明安装成功
4.启动consul(我的linux Ip地址192.168.162.130)
./consul agent -dev -ui -node=consul-dev -client=192.168.162.130
5.新开窗口,关闭防火墙(不知道如何关闭的可以百度:关闭防火墙)
systemctl stop firewalld
6.浏览器访问http://192.168.162.130:8500
2.2 注册与发现服务
1.使用PostMan 注册Http服务,请求参数如下:
{"Datacenter": "dc1", "Node":"tomcat", "Address":"192.168.5.165", "Service": { "Id" :"192.168.5.165:8080", "Service": "item_jd_tomcat", "tags": ["dev"], "Port": 8080 } }
2.发现服务,http://192.168.162.130:8500/v1/catalog/service/item_jd_tomcat
同时,我们也能在consul控制台可以看到页面有所改变,注册的服务多了一个。
总结