Nginx系列教程(11) - HTTP动态负载均衡(一)

引言

传统的负载均衡,如果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

<span style="color:#000000"><code class="language-shell"><span style="color:#795da3">wget</span> https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip
</code></span>

 

在这里插入图片描述
2.解压consul_0.7.5_linux_amd64.zip
在这里插入图片描述
3. 执行以下 ./consul出现以下信息就说明安装成功
在这里插入图片描述
4.启动consul(我的linux Ip地址192.168.162.130)

<span style="color:#000000"><code class="language-shell">./consul agent -dev -ui -node<span style="color:#df5000">=</span>consul-dev -client<span style="color:#df5000">=</span>192.168.162.130
</code></span>

 

在这里插入图片描述
5.新开窗口,关闭防火墙(不知道如何关闭的可以百度:关闭防火墙

<span style="color:#000000"><code class="language-shell">systemctl stop firewalld
</code></span>

 

6.浏览器访问http://192.168.162.130:8500
在这里插入图片描述

2.2 注册与发现服务

1.使用PostMan 注册Http服务,请求参数如下:

<span style="color:#000000"><code class="language-json"><span style="color:#969896">{</span><span style="color:#df5000">"Datacenter"</span><span style="color:#969896">:</span> <span style="color:#df5000">"dc1"</span><span style="color:#969896">,</span>
 <span style="color:#df5000">"Node"</span><span style="color:#969896">:</span><span style="color:#df5000">"tomcat"</span><span style="color:#969896">,</span> 
 <span style="color:#df5000">"Address"</span><span style="color:#969896">:</span><span style="color:#df5000">"192.168.5.165"</span><span style="color:#969896">,</span>
 <span style="color:#df5000">"Service"</span><span style="color:#969896">:</span> <span style="color:#969896">{</span>
	<span style="color:#df5000">"Id"</span> <span style="color:#969896">:</span><span style="color:#df5000">"192.168.5.165:8080"</span><span style="color:#969896">,</span> 
	<span style="color:#df5000">"Service"</span><span style="color:#969896">:</span> <span style="color:#df5000">"item_jd_tomcat"</span><span style="color:#969896">,</span>
	<span style="color:#df5000">"tags"</span><span style="color:#969896">:</span> <span style="color:#969896">[</span><span style="color:#df5000">"dev"</span><span style="color:#969896">]</span><span style="color:#969896">,</span> 
	<span style="color:#df5000">"Port"</span><span style="color:#969896">:</span> <span style="color:#c76b29">8080</span>
  <span style="color:#969896">}</span>
<span style="color:#969896">}</span>
</code></span>

在这里插入图片描述
2.发现服务,http://192.168.162.130:8500/v1/catalog/service/item_jd_tomcat
在这里插入图片描述
同时,我们也能在consul控制台可以看到页面有所改变,注册的服务多了一个。
在这里插入图片描述

总结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值