《云计算与虚拟化技术丛书 Service Mesh实战》—3.2.2服务发现:Consul
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 $2}’|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 $2}’|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 <all>
Linkerd02 192.168.1.12:8301 alive client 1.0.5 2 dc1 <default>
Linkerd03 192.168.1.13:8301 alive client 1.0.5 2 dc1 <default>
默认Consul数据中心为dc1,所有注册到Consul中服务DNS域为service.consul,比如注册服务booking到Consul,则其DNS记录为booking.service.consul。
注意
(1)演示环境中部署一台Consul Server以作演示之用,而实际产线环境中至少需要部署三台Consul Server以确保集群高可用。
(2)我们约定演示环境中Consul版本为1.0.5。
3. 部署Dnsmasq
另外,需要在每台机器部署Dnsmasq,用作Consul DNS缓存,使得所有Consul服务域名的DNS请求转发到本地Dnsmasq加速Consul服务域名解析。具体安装命令及配置参考provision.sh,并且在启动虚拟机时自动安装。
- 点赞
- 收藏
- 关注作者
评论(0)