欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Consul-template的简单应用:配置中心,服务发现与健康监测 博客分类: Consul-templateConsul consulconsul template架构集群 

程序员文章站 2024-03-14 15:25:10
...

简介

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

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

假定场景

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

Consul-template的简单应用:配置中心,服务发现与健康监测
            
    
    博客分类: Consul-templateConsul consulconsul template架构集群 

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

Consul-template的简单应用:配置中心,服务发现与健康监测
            
    
    博客分类: Consul-templateConsul consulconsul template架构集群 
{
    "redis":{
      "servers": ["127.0.0.1:6378""127.0.0.1:6379"],
      "master": "127.0.0.1:6378"
    } 
}
Consul-template的简单应用:配置中心,服务发现与健康监测
            
    
    博客分类: Consul-templateConsul consulconsul template架构集群 

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

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

Consul-template的简单应用:配置中心,服务发现与健康监测
            
    
    博客分类: Consul-templateConsul consulconsul template架构集群 
{
   "services": [{
     "id":"redis1",
     "name":"redis",
     "tags":["redis1"],
     "address": "127.0.0.1",
     "port":6378,
     "checks": [
       {
         "Tcp": "127.0.0.1:6378",
         "interval": "3s"
       }
     ]
   },{
     "id":"redis2",
     "name":"redis",
     "tags":["redis2"],
     "address": "127.0.0.1",
     "port":6379,
     "checks": [
       {
         "Tcp": "127.0.0.1:6379",
         "interval": "3s"
       }
     ]
   }
   ]
} 
Consul-template的简单应用:配置中心,服务发现与健康监测
            
    
    博客分类: Consul-templateConsul consulconsul template架构集群 

  Redis正常运行的状态如下:

Consul-template的简单应用:配置中心,服务发现与健康监测
            
    
    博客分类: Consul-templateConsul consulconsul template架构集群 

 

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

Consul-template的简单应用:配置中心,服务发现与健康监测
            
    
    博客分类: Consul-templateConsul consulconsul template架构集群 

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

创建Consul-template模板并注册

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

Consul-template的简单应用:配置中心,服务发现与健康监测
            
    
    博客分类: Consul-templateConsul consulconsul template架构集群 
{
    "redis":{
      "servers": [{{range service "redis" "passing"}}"{{.Address}}:{{.Port}}"{{end}}],
      "master": "{{key "service/redis/master"}}"
    } 
}
Consul-template的简单应用:配置中心,服务发现与健康监测
            
    
    博客分类: Consul-templateConsul consulconsul template架构集群 

  然后进行注册(此处以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完成。