linkerd实战(5)consul服务发现

本文介绍了如何使用Consul进行服务注册与发现的过程,包括Consul的安装与配置、服务注册的不同方法,以及如何在Namerd中配置Consul作为服务发现组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述
前面我们把服务发现和dtab规则从linkerd放到了namerd中。然而在namerd中我们所用的服务发现都是基于文件系统的io.l5d.fs。接下来我们把服务注册和发现放到consul中,实现动态服务注册和发现机制。

安装consul
1、下载对应操作系统的consul版本

2、解压

3、添加可执行权限
$ chomod u+x consul

4、启动consul,作为示例,我们以agent方式启动
$ ./consul agent -dev -ui -node=consul-dev -client=127.0.0.1

5、访问consul admin控制台
打开浏览器,访问:http://127.0.0.1:8500

在consul中注册服务
还记得我们之前用ngnix搭建了一个基本的服务提供者,接下来我们要把这个服务注册到consul中。在consul中注册服务有多种方式,可以使用配置文件,也可以使用http api。注册的内容格式如下:
{"service":{"id": "test","name": "test","address": "127.0.0.1","port": 80,"tags": ["dev"]}}

上述json描述了我们要注册一个id为test,名字为test的服务,提供了它的ip地址和端口。并且为这个服务打了tag “dev”。

在consul里面我们可以注册多个同名的服务,但是id要确保是唯一的,否则配置将会被覆盖。

1、配置文件方式注册服务,先关闭之前启动的consul
$ ./consul leave
2、创建配置文件目录
$ mkdir consul.d
3、创建服务注册配置
$ vi test.json
        {"service":{"id": "test","name": "test","address": "127.0.0.1","port": 80,"tags": ["dev"]}}
4、指定参数:-config-dir 方式启动consul
$ ./consul agent -dev -ui -node=consul-dev -client=127.0.0.1 -config-dir consul.d

5、查看consul admin
我们看到test服务成功注册到了consul。
我们还可以直接使用consul 提供的http api,通过curl快捷的注册服务。
$ curl -X PUT -d '{"id": "test2","name": "test","address": "127.0.0.1","port": 80,

同样可以把服务注册到consul。

Namerd配置consul服务发现
修改namerd.yaml配置文件,将之前的namers配置io.l5d.fs改为io.l5d.consul
$ vi config\namerd.yaml
namers:
- kind: io.l5d.consul
host: 127.0.0.1
port: 8500

然后重启namerd服务,并使用namerctl添加dtab规则:
/svc => /#/io.l5d.consul/dc1;
其中dc1为consul默认的数据中心名称,只要跟consul保持一致即可。具体操作如下:
1、创建配置文件
$ vi config/dtab-consul-config
/svc => /#/io.l5d.consul/dc1;

2、将规则配置到namerd
$./namerctl dtab create web config/dtab-consul-config --base-url http://127.0.0.1:4180
Created web

3、通过namerd 控制台看到,规则被添加了。


执行
最后我们访问服务:
$ curl -H "Host:test" http://127.0.0.1:4140
It works!

consul服务发现配置详解
基本配置
namers:- kind: io.l5d.consul host: 127.0.0.1 port: 8500 includeTag: true useHealthCheck: false healthStatuses: - "passing" - "warning" setHost: true consistencyMode: stale
配置属性说明:
属性
默认值
说明
prefix
io.l5d.consul
解析前缀 /#/<prefix>.
host
localhost
consul 主机名
port
8500
consul 端口
includeTag
false
如设置true,会从path中读取tag信息
useHealthCheck
false
如设置true,healthStatuses不满足的服务会过滤。
healthStatuses
passing
consul用来过滤服务的状态,可选 passing, warning, critical, maintenance.
如果配置多个,则按最优先级(maintenance > critical > warning > passing).
如 useHealthCheck 为 false 则不起效。
token
no authentication
请求consul api的token
setHost
false
如设置 true, 由Consul 解析的HTTP 请求头Host为${serviceName}.service.${datacenter}.${domain}。
 $domain 获取自 Consul.
consistencyMode
default
可选 default, stale and consistent.
failFast
false
如设置 false,禁用failfast,增加Consul Client的错误。在agent模式下设置 false,直接访问高可用集群API设置 true 
preferServiceAddress
true
如设置 true 则优先使用service定义的地址,其次使用node地址。
如设置false默认使用node地址
weights
none
tag权重列表, 当一个node匹配了多个tag将取最大的权重。默认为1.0
tls
no tls
使用tls链接consul。 see  Consul Encryption  and  TLS .

Consul Path 参数
includeTag : false 时的Dtab Path模板
/#/<prefix>/<datacenter>/<serviceName>
includeTag : true时的Dtab Path模板
/#/<prefix>/<datacenter>/<tag>/<serviceName>
占位符
是否必须
说明
prefix
yes
标识让linkerd使用consul解析的前缀,默认io.l5d.consul
datacenter
yes
consul dc的名称
tag
yes if includeTag is  true
请求中的consul tag信息
serviceName
yes
consul服务名

在快手服务治理平台中,实现高效的服务发现配置管理是确保服务高可用性动态扩展性的关键。服务发现机制允许服务间相互查找通信,而配置管理则保证了服务能够按照预定的配置运行。具体实现这些机制,快手可能采用了一系列的技术策略。 参考资源链接:[快手服务治理平台:架构设计与实战解析](https://wenku.csdn.net/doc/4yka5tpr6m?spm=1055.2569.3001.10343) 首先,服务发现通常依赖于服务注册与发现系统,例如Eureka或Consul。这些系统允许服务实例在启动时注册自己,并在关闭或失效时进行注销。服务消费者可以通过这些服务发现系统查询服务提供者的地址,并建立连接。在快手的案例中,服务发现可能涉及对不同环境(如开发、测试、生产)的配置管理,确保服务能够快速适应各种场景。 其次,配置管理是一个动态更新服务配置而不中断服务的过程。在快手的架构中,可能通过配置服务器如Spring Cloud Config来集中管理配置,服务在启动或运行时可以从配置服务器获取配置信息。同时,考虑到服务可能需要在不同数据中心或混合云环境中运行,配置管理需要具备跨平台兼容性灵活性。 在实践中,快手可能还采取了以下策略: - 使用服务网格(如Istio或Linkerd)来管理监控服务间的通信,提供服务发现、负载均衡、故障处理等能力。 - 实施蓝绿部署或金丝雀发布策略,以减少服务更新带来的风险。 - 对服务进行健康检查服务级别的监控,确保服务状态透明且易于管理。 为了深入了解快手服务治理平台的具体实现细节实战应用,推荐阅读《快手服务治理平台:架构设计与实战解析》。此书由快手的基础平台架构师技术培训资深讲师曹福祥撰写,详细介绍了快手如何通过服务治理平台提升其服务能力,以及在面对大规模服务时所采取的架构策略最佳实践。通过这本书,读者不仅可以学习到服务发现配置管理的技术细节,还能获得构建优化复杂分布式系统架构的全面视角。 参考资源链接:[快手服务治理平台:架构设计与实战解析](https://wenku.csdn.net/doc/4yka5tpr6m?spm=1055.2569.3001.10343)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值