此文整理了Consul比较实用的高级功能:多数据中心,模板与维护模式 。
使用多数据中心
Consul提供了多数据中心联动的特性,目前看来多数据中心只是在查询阶段提现,各个数据中心的数据持久化和数据目录(k-v对)的更新不相干扰。也就是说,多数据中心的特性目前看来不能作为可用性的保障,当然 不排除可以手动热切换数据中心。
使用场景
最好判断是否使用多数据中心的情形是判断服务是否属于同一系统下,是否相同serviceId能提供相同的无状态服务,以下列举一些情景:
一个系统拥有多个域名的多套部署,提供版本一致的服务(建议使用多数据中心)
一个系统由多个服务器提供的不同服务提供(视服务具体情况,不建议使用多数据中心)
同一套服务的不同环境,如开发、测试、灰度、生产等(强烈建议使用多数据中心)
配置方法
应用多数据中心很简单,只需要关联既有的多个数据中心即可。应用多数据中心很简单,只需要关联既有的多个数据中心即可。
使用多数据中心的方式很简单,只需在json中新增一条配置:
"retry_join_wan":["10.0.0.1","10.0.0.2","10.0.0.3"],
在retry_join_wan中指定另一套数据中心的ip地址,在启动后即可假如另一个数据中心。在retry_join_wan中指定另一套数据中心的ip地址,在启动后即可加入另一个(或者多个)数据中心。
项目启动后既可以
使用consul-template映射nginx配置模板
Consul-template是一种模板映射服务组件,能够即时将consul中的信息变化反馈出来,每当模板涉及的kv发生变化,其映射的文件也会变化,并即时调用shell指令(可选),比如使用consul-template映射nginx的配置文件来进行基于nginx的负载均衡列表(upstream)的动态更新。
关于完整的模板语法可以参考hashicorp/consul-template-github
QuickStart
在确保搭建了可对外提供服务的consul服务后,下载相应的consul-template压缩包并解压,此处使用0.21.2版本:
wget https://releases.hashicorp.com/consul-template/0.21.2/consul-template_0.21.2_linux_amd64.zip unzip unzip consul-template_0.21.2_linux_amd64.zip
首先,可以创建一个模板文件nginx-template.tpl(文件后缀不固定),映射一个k-v:
{{ key "foo" }}
然后执行脚本映射到另一个文件,并可以选择性的配置模板变化触发的shell(注意这不是后台启动):
consul-template --consul-addr=10.0.0.1:8500 -template="/home/uftp/consul-template/test.ctmpl:/etc/nginx/conf.d/test.conf:nginx -s reload"
参数很简单,其中template中被":"分割为了三部分,第一部分是模板文件目录;第二部分为按模板文件生成的映射文件目录;第三部分可以留空,为触发模板内容变化执行的指令.
调用命令后,便会生成目标文件test.conf,还会在每次发生变化时重新写入配置并调用nginx的刷新指令,同理,该种配置也可适用于其他方式的配置式的路由系统,当然, 你要确保配置是能动态刷新的。
使用Ribbon负载均衡
基于Consul的服务列表,可使用Ribbon进行负载均衡,从而做到依托Consul,将服务间的调用转为负载均衡。