Consul介绍及运行
Eureka闭源影响
在Euraka的GitHub上,宣布Eureka 2.x闭源。近这意味着如果开发者继续使用作为 2.x 分支上现有工作
repo 一部分发布的代码库和工件,则将自负风险。
Eureka的替换方案
Zookeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实
现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包
括:配置维护、域名服务、分布式同步、组服务等。
Consul
consul是近几年比较流行的服务发现工具,工作中用到,简单了解一下。consul的三个主要应用场景:
服务发现、服务隔离、服务配置。
Nacos
Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管
理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性
集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地
构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原
生范式) 的服务基础设施
Consul 概述
Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服
务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实
现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。
使用起来也较 为简单。Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、windows和
Mac OS X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。
Consul 的优势:
- 使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接. 相比较而言, zookeeper 采用的是Paxos, 而 etcd 使用的则是 Raft。
- 支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等。 zookeeper 和 etcd 均不提供多数据中心功能的支持。
- 支持健康检查。 etcd 不提供此功能。
- 支持 http 和 dns 协议接口。 zookeeper 的集成较为复杂, etcd 只支持 http 协议。
- 官方提供 web 管理界面, etcd 无此功能。
综合比较, Consul 作为服务注册和配置管理的新星, 比较值得关注和研究。
特性:
- 服务发现
- 健康检查
- Key/Value 存储
- 多数据中心
consul与Eureka的区别
(1)一致性
Consul强一致性(CP)
服务注册相比Eureka会稍慢一些。因为Consul的raft协议要求必须过半数的节点都写入成功才认为注册成功
Leader挂掉时,重新选举期间整个consul不可用。保证了强一致性但牺牲了可用性。
Eureka保证高可用和最终一致性(AP)
服务注册相对要快,因为不需要等注册信息replicate到其他节点,也不保证注册信息是否replicate成功
当数据出现不一致时,虽然A, B上的注册信息不完全相同,但每个Eureka节点依然能够正常对外提
供服务,这会出现查询服务信息时如果请求A查不到,但请求B就能查到。如此保证了可用性但牺牲了一致性。
(2)开发语言和使用
eureka就是个servlet程序,跑在servlet容器中
Consul则是go编写而成,安装启动即可
consul的下载与安装
Consul 不同于 Eureka 需要单独安装,访问 Consul 官网下载 Consul 的最新版本,我这里是
consul1.5x。根据不同的系统类型选择不同的安装包,从下图也可以看出 Consul 支持所有主流系统。
解压并运行:
[root@iZbp143t3oxhfc3ar7jey0Z ~]# unzip consul_1.5.3_linux_amd64.zip Archive: consul_1.5.3_linux_amd64.zip inflating: consul [root@iZbp143t3oxhfc3ar7jey0Z ~]# ll total 143244 -rwxr-xr-x 1 root root 107008760 Jul 26 2019 consul -rw-r--r-- 1 root root 39668461 Feb 5 16:48 consul_1.5.3_linux_amd64.zip [root@iZbp143t3oxhfc3ar7jey0Z ~]# cd consul -bash: cd: consul: Not a directory [root@iZbp143t3oxhfc3ar7jey0Z ~]# ll total 143244 -rwxr-xr-x 1 root root 107008760 Jul 26 2019 consul -rw-r--r-- 1 root root 39668461 Feb 5 16:48 consul_1.5.3_linux_amd64.zip [root@iZbp143t3oxhfc3ar7jey0Z ~]# cp consul /usr/local/bin [root@iZbp143t3oxhfc3ar7jey0Z ~]# cons consoletype consul [root@iZbp143t3oxhfc3ar7jey0Z ~]# cons consoletype consul [root@iZbp143t3oxhfc3ar7jey0Z ~]# consul Usage: consul [--version] [--help] <command> [<args>] Available commands are: acl Interact with Consul's ACLs agent Runs a Consul agent catalog Interact with the catalog config Interact with Consul's Centralized Configurations connect Interact with Consul Connect debug Records a debugging archive for operators event Fire a new event exec Executes a command on Consul nodes force-leave Forces a member of the cluster to enter the "left" state info Provides debugging information for operators. intention Interact with Connect service intentions join Tell Consul agent to join cluster keygen Generates a new encryption key keyring Manages gossip layer encryption keys kv Interact with the key-value store leave Gracefully leaves the Consul cluster and shuts down lock Execute a command holding a lock login Login to Consul using an auth method logout Destroy a Consul token created with login maint Controls node or service maintenance mode members Lists the members of a Consul cluster monitor Stream logs from a Consul agent operator Provides cluster-level tools for Consul operators reload Triggers the agent to reload configuration files rtt Estimates network round trip time between nodes services Interact with services snapshot Saves, restores and inspects snapshots of Consul server state tls Builtin helpers for creating CAs and certificates validate Validate config files/directories version Prints the Consul version watch Watch for changes in Consul [root@iZbp143t3oxhfc3ar7jey0Z ~]# consul agent -dev -client=0.0.0.0 ==> Starting Consul agent... Version: 'v1.5.3' Node ID: '6546e5d3-50c2-6b66-4137-e232315817f4' Node name: 'iZbp143t3oxhfc3ar7jey0Z' Datacenter: 'dc1' (Segment: '<all>') Server: true (Bootstrap: false) Client Addr: [0.0.0.0] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600) Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302) Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false ==> Log data will now stream in as it occurs: 2020/02/05 16:53:21 [DEBUG] agent: Using random ID "6546e5d3-50c2-6b66-4137-e232315817f4" as node ID
Consul的基本使用
Consul 支持健康检查,并提供了 HTTP 和 DNS 调用的 API接口完成服务注册,服务发现,以及K/V存储
这些功能。接下来通过发送HTTP请求的形式来了解一下Consul
服务注册与发现
(1)注册服务
通过postman发送put请求到 http://192.168.74.101:8500/v1/catalog/register地址可以完成服务注册
{ "Datacenter": "dc1", "Node": "node01", "Address": "192.168.74.102", "Service": { "ID": "mysql-01", "Service": "mysql", "tags": [ "master", "v1" ], "Address": "192.168.74.102", "Port": 3306 } }
(2)服务查询
通过postman发送get请求到http://192.168.74.101:8500/v1/catalog/services查看所有的服务列表
通过postman发送get请求到http://192.168.74.101:8500/v1/catalog/service/服务名查看具体的服务详
情
(3)服务删除
通过postman发送put请求到http://192.168.74.101:8500/v1/catalog/deregister删除服务
Consul的KV存储
可以参照Consul提供的KV存储的 API完成基于Consul的数据存储
- key值中可以带/, 可以看做是不同的目录结构。
- value的值经过了base64_encode,获取到数据后base64_decode才能获取到原始值。数据不能大于512Kb
- 不同数据中心的kv存储系统是独立的,使用dc=?参数指定。