云计算虚拟化技术丛书 Service Mesh实战》—3.2.2服务发现:Consul

网友投稿 730 2022-05-30

3.2.2 服务发现:Consul

1. Consul简介

第2章我们谈到使用基于文件的服务发现方法,但是由于一些原因可能导致高CPU使用率,影响Linkerd的性能,因此不推荐在产线环境使用该方法。而本节我们将引入一个在产线被广泛使用的服务发现工具Consul,Consul同Vagrant一样也是Hashicorp公司旗下主要产品之一,集服务发现、服务健康监测、键值对数据库,支持跨数据中心服务发现的高可用分布式系统。

Consul Agent

Consul Agent是Consul集群中每个机器上长时间运行的守护进程,其运行模式可分为server模式或client模式运行,Consul Agent只能以一种模式运行,要么server模式,要么client模式。

Consul Client(client模式)

Consul Client接收请求方发起的请求并转发RPC请求到Consul Server(server模式),然后将Consul Server返回结果传递给请求方,此外,Consul Client加入局域网(LAN)Gossip池以提供成员关系管理、错误检测以及事件广播。

Consul Server(server模式)

Consul Server维护整个Consul集群的运行状态,选择leader,响应Consul Client的RPC请求,不同数据中心间万网(WAN)Gossip信息交换以及跨数据中心请求转发。

数据中心

每个Consul集群对应一个逻辑或者物理的数据中心。

Consul架构(如图3-2所示)

图3-2 Consul架构

由于本章重点介绍如何配置Linkerd,所以如果你需要了解更多关于Consul的知识,可参考Consul官方文档(https://www.consul.io/docs/index.html)。

2. 基于Docker部署Consul

根据上述内容,演示环境中只有三台虚拟机,为此我们约定在其中一台虚拟机部署Consul Server,另外两台部署Consul Client,为了方便后续讲解,我们约定linkerd01部署Consul Server,linkerd02和linkerd03部署Consul Client,部署命令为:

# 部署Consul Server到linkerd01

# BIND_ADDR=$(ip addr show|grep eth1|grep inet|awk ‘{print }’|cut -d’/’ -f1);\

docker run -d \

--net=host \

--name server \

consul:1.0.5 agent -server -bootstrap -client=0.0.0.0 -bind=$BIND_ADDR

# 部署Consul Client到linkerd02和linkerd03,192.168.1.11为linkerd01的地址,也是Consul Leader地址

# BIND_ADDR=$(ip addr show|grep eth1|grep inet|awk ‘{print }’|cut -d’/’ -f1);\

docker run -d \

--net=host \

--name client \

consul:1.0.5 agent -bind=$BIND_ADDR -join=192.168.1.11

完成部署后,可查看Consul集群信息:

# docker exec server consul members

Node       Address            Status  Type    Build  Protocol  DC   Segment

Linkerd01  192.168.1.11:8301  alive   server  1.0.5  2         dc1 

Linkerd02  192.168.1.12:8301  alive   client  1.0.5  2         dc1 

Linkerd03  192.168.1.13:8301  alive   client  1.0.5  2         dc1 

默认Consul数据中心为dc1,所有注册到Consul中服务DNS域为service.consul,比如注册服务booking到Consul,则其DNS记录为booking.service.consul。

注意

(1)演示环境中部署一台Consul Server以作演示之用,而实际产线环境中至少需要部署三台Consul Server以确保集群高可用。

(2)我们约定演示环境中Consul版本为1.0.5。

3. 部署Dnsmasq

《云计算与虚拟化技术丛书 Service Mesh实战》—3.2.2服务发现:Consul

另外,需要在每台机器部署Dnsmasq,用作Consul DNS缓存,使得所有Consul服务域名的DNS请求转发到本地Dnsmasq加速Consul服务域名解析。具体安装命令及配置参考provision.sh,并且在启动虚拟机时自动安装。

虚拟化 Go 云计算

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:偶发的el-select无法选择的问题
下一篇:不使用huaweicloud-sdk包获取IAM的token的方法_python语言实现
相关文章