简介

Consul-template是Consul的一个方扩展工具,通过监听Consul中的数据可以动态修改一些配置文件,大家比较热衷于应用在Nginx,HAProxy上动态配置健康状态下的客户端反向代理信息。GitHub上的文档比较详细,这里简单做个入门介绍。

  关于配置中心不做过多介绍了。简单描述就是项目多了,管理起来就会比较复杂,比如在海量应用中要修改一部分应用中的某些配置,由于大家变得越来越懒了,为了保证灵活稳定及时等,配置中心的重要性也就体现出来了。

假定场景

  此处假定一个高可用redis集群读写分离的场景,存在一个业务服务BusinessService.Sample,通过对配置文件XXX.BusinessService.Sample.Redis.json中Redis的集群信息的读取来维持Redis客户端的正常读写,配置文件中的数据发生变化时。Redis客户端会进行更新(假定场景- -只表达大致意思,勿喷)。

XXX.BusinessService.Sample.Redis.json中的配置信息假定为

{
"redis":{
"servers": ["127.0.0.1:6378""127.0.0.1:6379"],
"master": "127.0.0.1:6378"
}
}

注册Redis健康监测及配置中心维护Redis的Master节点信息

  将Redis的所有节点注册到Consul,并应用Consul进行健康监测。

{
"services": [{
"id":"redis1",
"name":"redis",
"tags":["redis1"],
"address": "127.0.0.1",
"port":,
"checks": [
{
"Tcp": "127.0.0.1:6378",
"interval": "3s"
}
]
},{
"id":"redis2",
"name":"redis",
"tags":["redis2"],
"address": "127.0.0.1",
"port":,
"checks": [
{
"Tcp": "127.0.0.1:6379",
"interval": "3s"
}
]
}
]
}

  Redis正常运行的状态如下:

  对于Master的节点信息,这里采用配置中心进程存储

到这里基本工作算是完成了

创建Consul-template模板并注册

  consul-template会通过Http请求从Consul中读取集群中的数据,数据发生变更时 consul-template会触发更新指定配置文件的操作。此处根据XXX.BusinessService.Sample.Redis.json的数据格式创建.ctmpl模板文件,内容如下(配置格式参考 Consul-template文档):

{
"redis":{
"servers": [{{range service "redis" "passing"}}"{{.Address}}:{{.Port}}"{{end}}],
"master": "{{key "service/redis/master"}}"
}
}

  然后进行注册(此处以windows作为实例,Linux操作一样)

consul-template.exe -consul "127.0.0.1:8500" -template="C:\Users\admin\Desktop\consul064\consul-temp\templates\XXX.BusinessService.Sample.Redis.json.ctmpl:C:\Users\admin\Desktop\BusinessService.Sample\BusinessService.Sample\BusinessService.Sample\XXX.BusinessService.Sample.Redis.json">> C:\Users\admin\Desktop\consul064\consul-temp\templates\logs\consul.log 2>&1

  -consul后是consul的webui接口 ,用web管理consul就用的8500端口。

  -template 后面是模板参数 第一个是模板地址 。冒号后的第二个参数是输出位置。

  >> 后为日志输出路径

  注册完成后即可动态触发XXX.BusinessService.Sample.Redis.json文件的动态修改了,比如关闭一个Redis实例或者Master节点发生变更时即可及时完成更新。

Redis的Master节点更新

  master节点的更新此处可以通过监听redis哨兵的+switch-master事件监听,触发修改Consul配置中心中指定Redis Key完成。

对于Consul的应用国内的圈子表象上比较小,出于工作原因平时研究也不是很深入,希望大家一起学习交流。群号:234939415

Consul-template的简单应用:配置中心,服务发现与健康监测的更多相关文章

  1. 服务发现与健康监测框架Consul-DNS转发的应用

    关于Consul Consul是一个提供服务注册与发现,健康监测,Key/Value存储以及多数据中心存储的分布式框架.官网地址是https://www.consul.io/,公司初步应用后我们老大觉 ...

  2. Spring Cloud 入门教程 - 搭建配置中心服务

    简介 Spring Cloud 提供了一个部署微服务的平台,包括了微服务中常见的组件:配置中心服务, API网关,断路器,服务注册与发现,分布式追溯,OAuth2,消费者驱动合约等.我们不必先知道每个 ...

  3. ZooKeeper系列(2)--基于ZooKeeper实现简单的配置中心

    ZooKeeper节点的类型分为以下几类:  1. 持久节点:节点创建后就一直存在,直到有删除操作来主动删除该节点 2. 临时节点:临时节点的生命周期和创建该节点的客户端会话绑定,即如果客户端会话失效 ...

  4. ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心

    作者:Grey 原文地址:ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 很多程序往 ...

  5. 创建配置中心服务端(Spring Cloud Config)

    创建配置中心服务端 创建好项目后添加配置文件内容 server.port=9004 spring.application.name=spring-cloud-config-server-01 #git ...

  6. spring-boot 2.5.4,nacos 作为配置、服务发现中心,Cloud Native Buildpacks 打包镜像,GitLab CI/CD

    spring-boot 2.5.4,nacos 作为配置.服务发现中心,Cloud Native Buildpacks 打包镜像,GitLab CI/CD 本文主要介绍 Java 通过 Cloud N ...

  7. 携程apollo配置中心服务端如何感知配置更新?

    引言 前面有写过一篇<分布式配置中心apollo是如何实时感知配置被修改>,也就是客户端client是如何知道配置被修改了,有不少读者私信我你既然说了client端是如何感知的,那服务端又 ...

  8. Consul Template的简单使用

    Consul Template的使用 1安装 地址 https://github.com/hashicorp/consul-template/releases wget https://release ...

  9. nginx动态配置及服务发现那些事

    Reference: http://xiaorui.cc/2016/10/16/nginx%E5%8A%A8%E6%80%81%E9%85%8D%E7%BD%AE%E5%8F%8A%E6%9C%8D% ...

随机推荐

  1. [BOT] 一种android中实现“圆角矩形”的方法

    内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...

  2. static,你还敢用吗?(二)

    为了压系统,昨天小组在测试环境模拟了一大批订单数据.今天上午查看记录的账单计息日志,发现了一大堆的MySqlException MySql.Data.MySqlClient.MySqlExceptio ...

  3. C#多线程之线程池篇3

    在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...

  4. python通过protobuf实现rpc

    由于项目组现在用的rpc是基于google protobuf rpc协议实现的,所以花了点时间了解下protobuf rpc.rpc对于做分布式系统的人来说肯定不陌生,对于rpc不了解的童鞋可以自行g ...

  5. 玩转spring boot——MVC应用

    如何快速搭建一个MCV程序? 参照spring官方例子:https://spring.io/guides/gs/serving-web-content/ 一.spring mvc结合thymeleaf ...

  6. 用WebRequest +HtmlAgilityPack 从外网抓取数据到本地

    相信大家对于WebRequest 并不陌生,我们在C#中发请求的方式,就是创建一个WebRequest .那么如果我们想发一个请求到外网,比如国内上不了的一些网站,那么该怎么做呢? 其实WebRequ ...

  7. Struts2实现ajax的两种方式

    基于Struts2框架下实现Ajax有两种方式,第一种是原声的方式,另外一种是struts2自带的一个插件. js部分调用方式是一样的: JS代码: function testAjax() { var ...

  8. mount报错: you must specify the filesystem type

    在linux mount /dev/vdb 到 /home 分区时报错: # mount /dev/vdb /homemount: you must specify the filesystem ty ...

  9. windows下的命令行工具babun

    什么是babun babun是windows上的一个第三方shell,在这个shell上面你可以使用几乎所有linux,unix上面的命令,他几乎可以取代windows的shell.用官方的题目说就是 ...

  10. Xamarin.Android活动的生命周期

    一.前言 用过Android手机的人一定会发现一种现象,当你把一个应用置于后台后,一段时间之后在打开就会发现应用重新打开了,但是之前的相关的数据却没有丢失.可以看出app的“生命”是掌握在系统手上的, ...