前言
我们已实现了服务的注册与发现。不过目前还存在的问题是:
负载均衡的业务逻辑跟应用层混在一起;
采用客服端实现的方式实现,如果采用java实现,那么还需要开发一套客户端的逻辑,与具体的语言耦合在一起
缓存中的服务列表无法共享,造成每个应用都需要去获取服务列表、监控服务列表的变化。
针对上述存在的问题,引入nginx服务发现机制,在不需要人工干预的情况下,实现nginx动态更新配置。
nginx服务发现机制
对基于Docker+Consul+Registrator+Nodejs实现服务治理(二)中的部署图改造成以下这样:
registrator来监控每个service web的状态。当有新的service web启动的时候,registrator会把它注册到consul这个注册中心上。由于consultemplate已经订阅了该注册中心上的服务消息,此时consul注册中心会将新的service web信息推送给consultemplate,consul_template则会去修改nginx.conf的配置文件,然后让nginx重新载入配置以达到自动修改负载均衡的目的。同样当一个service web挂了,registrator也能感知到,进而通知consul做出响应。
整个过程不需要运维人工的干预,自动完成。
Consul-template 说明
Consul-Template是基于Consul的自动替换配置文件的应用。在Consul-Template没出现之前,大家构建服务发现系统大多采用的是Zookeeper、Etcd+Confd这样类似的系统。
Consul-Template提供了一个便捷的方式从Consul中获取存储的值,Consul-Template守护进程会查询Consul实例来更新系统上指定的任何模板。当更新完成后,模板还可以选择运行一些任意的命令。
使用场景:可以查询Consul中的服务目录、Key、Key-values等。这种强大的抽象功能和查询语言模板可以使Consul-Template特别适合动态的创建配置文件。例如:创建Apache/Nginx Proxy Balancers、Haproxy Backends、Varnish Servers、Application Configurations等。
Consul-Template特性
Quiescence:Consul-Template内置静止平衡功能,可以智能的发现Consul实例中的更改信息。这个功能可以防止频繁的更新模板而引起系统的波动。
Dry Mode:不确定当前架构的状态,担心模板的变化会破坏子系统?无须担心。因为Consul-Template还有Dry模式。在Dry模式,Consul-Template会将结果呈现在STDOUT,所以操作员可以检查输出是否正常,以决定更换模板是否安全。
CLI and Config:Consul-Template同时支持命令行和配置文件。
Verbose Debugging:即使每件事你都做的近乎完美,但是有时候还是会有失败发生。Consul-Template可以提供更详细的Debug日志信息。
示例
对第二篇文章的 改造成以下这样:
新增了lb的docker image,详细配置见:nginx-consul-template。
定义 的负载均衡配置,配置是动态从consul cluster 取得,见nginx.conf。
一旦监听的服务列表发生变化,触发nginx重加载,见consul-template.service
下面让我们运行以下命令,启动服务:
可以看到相关服务已经运行起来了:
启动服务后,进入 的容器中,运行以下命令,查看当前app.conf(生成image时,把nginx.conf更名为app.conf,具体代码见Dockerfile)的配置。
发现定义在app.conf 中 由
变成了
upstream server ip与注册到consul的servic-web ip是一致的。说明nginx的动态配置功能是已经生效了。
验证功能
1.验证服务发现
由于 暴露了 的方法,在nginx中配置文件中定义了service-web的透传方式,所以运行以下命令来验证获取远程服务器ip的功能。
多次运行的结果为以下随机一个:
说明服务发现以及负载均衡的功能验证通过。
2. 验证服务下线情况
通过 的方式,下线ip为 的 的服务。
进入 的容器中,运行以下命令,查看当前app.conf的配置。
结果如下:
发现ip为 的service-web已经从服务列表中删除了。
验证服务下线通知功能通过。
总结 && 参考
相比client 端的服务发现,nginx实现服务治理对业务的无侵入性、对运维友好性、更符合架构的设计原则的优点。
参考:https://www.jianshu.com/p/a4c04a3eeb57
领取专属 10元无门槛券
私享最新 技术干货