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=?参数指定。
posted @ 2020-02-05 18:12  天宇轩-王  阅读(813)  评论(0编辑  收藏  举报