consul 订阅
consul是一个英语单词,名词,意思是“领事;(古罗马的)两执政官之一”。 展开全文
consul是一个英语单词,名词,意思是“领事;(古罗马的)两执政官之一”。
信息
外文名
consul
词    性
名词
consul单词发音
英 [ˈkɒnsl] 美 [ˈkɑːnsl] [1] 
收起全文
精华内容
下载资源
问答
  • consul

    2021-01-24 11:58:36
    consul概念: consul是用来做注册中心的 他和eureka是一样的 注册中心一般都是集群的形式存在 保证高可用 consul像是一个nosql 存储着键值对 可以做存储 consul是c/s架构的 其客户端负责和用户进行通讯 没有实际的...

    consul概念:

    consul是用来做注册中心的 他和eureka是一样的 注册中心一般都是集群的形式存在
    保证高可用 consul像是一个nosql 存储着键值对 可以做存储
    consul是c/s架构的 其客户端负责和用户进行通讯 没有实际的意义 真正工作的是后端的服务端 存储数据也是在服务端存储

    环境:

    主机 ip
    consul-1 192.168.10.20
    consul-2 192.168.10.30
    consul-3 192.168.10.40
    client客户端 192.168.10.10

    在第一、二台consul主机和第四台client主机上安装jdk和maven环境
    安装jdk

    [root@localhost ~]# java -version
    openjdk version "1.8.0_102"
    OpenJDK Runtime Environment (build 1.8.0_102-b14)
    OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
    [root@localhost ~]# rm -rf /usr/bin/java #删除原本主机上的Java程序
    [root@localhost ~]# java -version
    -bash: /usr/bin/java: 没有那个文件或目录
    [root@localhost ~]# tar -zxf jdk-8u201-linux-x64.tar.gz 
    [root@localhost ~]# mv jdk1.8.0_201/ /usr/local/java
    

    添加环境变量(通常情况我们使用第二种方法)

    [root@localhost bin]# vim /etc/profile
    #末尾添加
    export JAVA_HOME=/usr/local/java
    export JRE_HOME=/usr/local/java/jre
    export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
    export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
    [root@localhost bin]# source /etc/profile
    [root@localhost bin]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin:/usr/local/java/jre/bin
    [root@localhost bin]# java -version
    java version "1.8.0_201"
    Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
    Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
    

    安装maven

    [root@localhost ~]# tar -zxf apache-maven-3.6.0-bin.tar.gz 
    [root@localhost ~]# mv apache-maven-3.6.0 /usr/local/maven
    [root@localhost ~]# vim /etc/profile
    export PATH=$PATH:/usr/local/maven/bin
    [root@localhost ~]# source /etc/profile
    [root@localhost ~]# mvn -v
    Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00)
    Maven home: /usr/local/maven
    Java version: 1.8.0_201, vendor: Oracle Corporation, runtime: /usr/local/java/jre
    Default locale: zh_CN, platform encoding: UTF-8
    OS name: "linux", version: "3.10.0-514.el7.x86_64", arch: "amd64", family: "unix"
    

    安装consul服务(四台都要安)

    [root@localhost ~]# unzip consul_1.4.0_linux_amd64.zip -d /usr/bin/
    Archive:  consul_1.4.0_linux_amd64.zip
      inflating: /usr/bin/consul         
    [root@localhost ~]# mkdir -p /opt/consul/{data,config,logs}
    

    参数释义:
    data:存放数据的目录
    config:存放配置信息的目录
    logs:存放日志

    consul没有配置文件,所以直接通过启动命令来配置称为集群

    consul-1

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# setenforce 0
    [root@localhost ~]# consul agent -server -node=consul1 -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.10.20 -client 0.0.0.0 -enable-script-checks=true  -datacenter=kgc -bootstrap-expect=2
    

    参数释义:
    consul 命令
    agent 启动一个代理
    -server 以服务端启动
    -node=consul1 当前节点在集群中名称
    -data-dir /opt/consul/data/ 数据文件的目录
    -config-dir /opt/consul/config/ 配置文件的目录
    -bind 192.168.2.10 监听的ip
    -client 0.0.0.0 指定的客户端 代表所有的客户端
    -enable-script-checks=true 开启心跳连接
    -datacenter=kgc 数据中心的名称
    -bootstrap-expect=2 至少两个节点形成集群

    consul-2

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# setenforce 0
    [root@localhost ~]# consul agent -server -ui -node=consul2 -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.10.30 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.10.20
    

    参数释义:
    -ui :图形化界面
    -join:加入集群

    consul-3

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# setenforce 0
    [root@localhost ~]# consul agent -server -ui -node=consul3 -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.10.40 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.10.20
    

    client客户端

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# setenforce 0
    [root@localhost ~]# consul agent  -node=client -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.10.10 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.10.20
    

    执行完后所有的主机都会阻塞终端,可以在第一台consul主机上另开一个终端去查看一下集群是否构建成功

    [root@localhost ~]# consul members
    Node     Address             Status  Type    Build  Protocol  DC   Segment
    consul1  192.168.10.20:8301  alive   server  1.4.0  2         kgc  <all>
    consul2  192.168.10.30:8301  alive   server  1.4.0  2         kgc  <all>
    consul3  192.168.10.40:8301  alive   server  1.4.0  2         kgc  <all>
    client   192.168.10.10:8301  alive   client  1.4.0  2         kgc  <default>
    
    [root@localhost ~]# curl http://192.168.10.20:8500/v1/status/leader
    "192.168.10.20:8300"
    [root@localhost ~]# curl http://192.168.10.20:8500/v1/status/peers
    ["192.168.10.20:8300","192.168.10.30:8300","192.168.10.40:8300"]
    
    [root@localhost ~]# consul info #查看集群的信息
    agent:
    	check_monitors = 0
    	check_ttls = 0
    	checks = 0
    	services = 0
    build:
    	prerelease = 
    	revision = 0bddfa23
    	version = 1.4.0
    consul:
    	acl = disabled
    	bootstrap = false
    	known_datacenters = 1
    	leader = true
    	leader_addr = 192.168.10.20:8300
    	server = true
    ……………………
    
    [root@localhost ~]# curl http://192.168.10.20:8500/v1/catalog/nodes?pretty #查看所有的节点,并且转换为json格式
    [
        {
            "ID": "e280d23d-58b1-72b4-1c93-5a240f0ee1cd",
            "Node": "client",
            "Address": "192.168.10.10",
            "Datacenter": "kgc",
            "TaggedAddresses": {
                "lan": "192.168.10.10",
                "wan": "192.168.10.10"
            },
            "Meta": {
                "consul-network-segment": ""
            },
            "CreateIndex": 23,
            "ModifyIndex": 24
        },
    ………………
    

    访问第二台consul-2的ip和端口(因为第一台是没有图形化界面的,只有第二台和第三台有,所以这儿我们可以去访问验证查看一下)
    在这里插入图片描述

    consul的基础命令

    nosql 存储数据 添加数据

    1、创建或者更新数据

    [root@localhost ~]# consul kv put redis/config/one 1 #添加数据到集群
    Success! Data written to: redis/config/one
    [root@localhost ~]# consul kv get redis/config/one  #查看
    1
    

    2、获取值

    [root@localhost ~]# consul kv get -detailed redis/config/one
    CreateIndex      379
    Flags            0
    Key              redis/config/one
    LockIndex        0
    ModifyIndex      379
    Session          -
    Value            1
    

    在这里插入图片描述
    3、查看详情

    [root@localhost ~]# consul kv get -detailed redis/config/one
    CreateIndex      379
    Flags            0
    Key              redis/config/one
    LockIndex        0
    ModifyIndex      379
    Session          -
    Value            1
    
    

    4、删除

    [root@localhost ~]# consul kv delete redis/config/one #删除
    Success! Deleted key: redis/config/one
    [root@localhost ~]# consul kv get redis/config/one
    Error! No key exists at: redis/config/one
    

    5、递归删除

    [root@localhost ~]# consul kv put redis/config/one 1
    Success! Data written to: redis/config/one
    [root@localhost ~]# consul kv put redis/config/two 2
    Success! Data written to: redis/config/two
    [root@localhost ~]# consul kv delete -recurse redis  
    Success! Deleted keys with prefix: redis
    [root@localhost ~]# consul kv get redis/two
    Error! No key exists at: redis/two
    

    6、列出指定前缀的内容

    [root@localhost ~]# consul kv put redis/config/one 1
    Success! Data written to: redis/config/one
    [root@localhost ~]# consul kv put redis/config/two 2
    Success! Data written to: redis/config/two
    [root@localhost ~]# consul kv get -keys redis/config/
    redis/config/one
    redis/config/two
    
    

    7、列出所有的键

    [root@localhost ~]# consul kv get -keys
    redis/
    

    consul作为注册中心的功能

    在这里插入图片描述

    consul-1、consul-2、client客户端
    注:另开终端执行

    root@localhost ~]# git clone https://github.com/luojunyong/spring-cloud-examples.git
    正克隆到 'spring-cloud-examples'...
    remote: Enumerating objects: 700, done.
    remote: Total 700 (delta 0), reused 0 (delta 0), pack-reused 700
    接收对象中: 100% (700/700), 66.07 KiB | 0 bytes/s, done.
    处理 delta 中: 100% (216/216), done.
    

    consul-1 生产者

    [root@localhost ~]# cd /root/spring-cloud-examples/spring-cloud-consul/spring-cloud-consul-producer
    [root@localhost spring-cloud-consul-producer]# vim src/main/resources/application.properties
     3 spring.cloud.consul.host=192.168.10.40 #这儿写的是第三台consul-3的ip(也就是没有安装maven的那台主机)
    [root@localhost spring-cloud-consul-producer]# source /etc/profile
    [root@localhost spring-cloud-consul-producer]# mvn spring-boot:run
    

    consul-2 生产者

    [root@localhost ~]# cd /root/spring-cloud-examples/spring-cloud-consul/spring-cloud-consul-producer-2/
    [root@localhost spring-cloud-consul-producer-2]# vim src/main/resources/application.properties
    3 spring.cloud.consul.host=192.168.10.40
    [root@localhost spring-cloud-consul-producer-2]# source /etc/profile
    [root@localhost spring-cloud-consul-producer-2]# mvn spring-boot:run
    

    client 消费者

    [root@localhost ~]# cd /root/spring-cloud-examples/spring-cloud-consul/spring-cloud-consul-consumer/
    [root@localhost spring-cloud-consul-consumer]# vim src/main/resources/application.properties 
    spring.cloud.consul.host=192.168.10.40
    [root@localhost spring-cloud-consul-consumer]# source /etc/profile
    [root@localhost spring-cloud-consul-consumer]# mvn spring-boot:run
    

    第四台client另开一个终端去访问

    [root@localhost ~]# curl 192.168.10.10:8503/call
    helle consul
    [root@localhost ~]# curl 192.168.10.10:8503/call
    helle consul two 
    

    再次去图形化界面查看验证
    在这里插入图片描述

    Consul和nginx结合 实现动态代理微服务

    在这里插入图片描述

    client客户端的consumer停止:
    安装nginx

    [root@localhost ~]# yum -y install pcre-devel zlib-devel openssl-devel pcre
    [root@localhost ~]# tar -zxf nginx-1.6.2.tar.gz -C /usr/src/
    [root@localhost ~]# useradd -M -s /sbin/nologin nginx
    [root@localhost ~]# cd /usr/src/nginx-1.6.2/
    [root@localhost nginx-1.6.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre && make && make install
    [root@localhost nginx-1.6.2]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
    
    [root@localhost ~]# tar -zxf consul-template_0.19.5_linux_amd64.tgz -C /usr/src/
    [root@localhost ~]# mkdir /usr/local/nginx/conf/vhost
    [root@localhost ~]# vim /opt/consul/config/nginx-consul.ctmpl
    upstream web1 {
            ip_hash;
            {{ range service "service-producer"}}
            server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=20s;
            {{end}}
    }
    
    server {
            listen 80;
            server_name web1.nginx.com;
    
            location / {
                    proxy_send_timeout 900s;
                    proxy_read_timeout 900s;
                    proxy_connect_timeout 900s;
                    proxy_buffer_size 32k;
                    proxy_buffers  4  32k;
                    proxy_busy_buffers_size 64k;
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header Referer $http_referer;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_pass http://web1;
            }
    }
    #参数释义
    ip_hash;   调度算法
    {{ range service "service-producer"}}   注册中心的名字
    proxy_send_timeout 900s;  代理服务器连接后端服务器的超时时间
    proxy_read_timeout 900s;  代理服务器发送到后端服务器的超时时间
    proxy_connect_timeout 900s;  后端服务器读取的超时时间
    proxy_buffer_size 32k;   指定缓存区的大小
    proxy_buffers  4  32k;  指定缓存区的个数和大小
    proxy_busy_buffers_size 64k;   指定缓存区返还给客户端数据最大的大小
    proxy_set_header Host $host;   客户端请求的houst
    proxy_set_header X-Real-IP $remote_addr;   记录此次请求是从哪个连接访问过来的
    proxy_set_header Referer $http_referer;   
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://web1;
    
    [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
    #添加
    34     include /usr/local/nginx/conf/vhost/*.conf;
    [root@localhost ~]# nginx 
    [root@localhost ~]# nohup consul-template --consul-addr=192.168.10.40:8500 -template /opt/consul/config/nginx-consul.ctmpl:/usr/local/nginx/conf/vhost/web.conf:"/usr/local/nginx/sbin/nginx -s reload" --log-level=info > /opt/consul/logs/nginx-consul.log 2>&1 &
    [1] 57413
    [root@localhost ~]# ps -elf | grep consul | grep -v grep
    [root@localhost ~]# cd /usr/local/nginx/conf/vhost/
    [root@localhost vhost]# cat web.conf 
    upstream web1 {
    	ip_hash;       
            server 192.168.10.10:8501 max_fails=3 fail_timeout=20s;        
            server 192.168.10.20:8502 max_fails=3 fail_timeout=20s;        
    }
    

    停止一个produce

    [root@localhost vhost]# cat web.conf 
    upstream web1 {
    	ip_hash;       
            server 192.168.10.20:8502 max_fails=3 fail_timeout=20s;        
    }
    [root@localhost vhost]# curl 192.168.10.30:80/hello
    helle consul two
    [root@localhost vhost]# curl 192.168.10.30:80/hello
    
    展开全文
  • Consul

    2020-08-20 11:04:17
    Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件, 由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源。 二、下载 到官网下载Consul,官网地址:...

    一、基本信息

    Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件, 由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源。

    二、下载

    1. 到官网下载Consul,官网地址:https://www.consul.io/
    2. 点击Download,跳转到下载页面,如下图
    3. 选择适用于自己系统的软件,点击Download下载

    三、启动(以windows为例)

    1. 下载下的一个压缩包,解压得到 consul.exe 文件
    2. 启动方式:
      1. 打开DOS命令窗口,切换到consul.exe文件所在的目录下,执行consul agent -dev命令
      2. 配置环境变量,在path下加上consul.exe 文件所在目录,如:C:\Users\admin\Desktop\consul,执行consul agent -dev命令
      3. 写一个bat文件,文件内容如下:
    3. 验证方式:consul 自带 UI 界面,打开网址:http://localhost:8500 ,可以看到当前注册的服务界面
    4. 注意:cmd 命令窗口执行:consul.exe agent -server ui -bootstrap -client 0.0.0.0 -data-dir="C:\Users\admin\Desktop\consul" -bind X.X.X.X

      其中X.X.X.X为服务器ip,即可使用http://X.X.X.X:8500 访问ui而不是只能使用localhost连接

    三、使用

    1. 基础环境,一个可以启动的springboot项目
    2.  
    展开全文
  • consul zookeeper 一致性协议 CP + AP 可切换 AP CP CP 健康检查 TCP/HTTP/MySQL/Client Beat Client Beat TCP/HTTP/gRPC/CMD Client Beat 负载均衡 权重/DSL/metadata/CMDB Ribbon Fabio

    注册中心特性对比

    一致性(Consistency)、 可用性(Availability)、分区容错性(Partition tolerance)

    比较 nacos eureka consul zookeeper
    一致性协议 CP + AP 可切换 AP CP CP
    健康检查 TCP/HTTP/MySQL/Client Beat Client Beat TCP/HTTP/gRPC/CMD Client Beat
    负载均衡 权重/DSL/metadata/CMDB Ribbon Fabio
    雪崩保护 支持 支持 不支持 不支持
    自动注销实例 支持 支持 不支持 支持
    访问协议 HTTP/DNS/UDP HTTP HTTP/DNS TCP
    监听支持 支持 支持 支持 支持
    多数据中心 支持 支持 支持 不支持
    跨注册中心 支持 不支持 支持 不支持
    SpringColud集成 支持 支持 支持 不支持
    Dubbo集成 支持 不支持 不支持 支持
    kubernates集成 支持 不支持 支持 不支持
    展开全文
  • Consul Website: https://www.consul.io Tutorials: HashiCorp Learn Forum: Discuss Consul is a distributed, highly available, and data center aware solution to connect and configure applications ...
  • Consul 注册中心介绍

    万次阅读 2019-07-08 20:46:32
    在 Spring Cloud 体系中,几乎每个角色都会有两个以上的产品提供选择,比如在注册中心有:Eureka、Consul、zookeeper、etcd 等;网关的产品有 Zuul、Spring Cloud Gateway 等。在注册中心产品中,最常使用的是 ...

    在 Spring Cloud 体系中,几乎每个角色都会有两个以上的产品提供选择,比如在注册中心有:Eureka、Consul、zookeeper、etcd 等;网关的产品有 Zuul、Spring Cloud Gateway 等。在注册中心产品中,最常使用的是 Eureka 和 Consul,两者各有特点,企业可以根据自述项目情况来选择。

    前面给大家详细介绍了 Eureka ,本节给大家介绍 Consul 的使用。

    什么是Consul

    Consul 是 HashiCorp 公司推出的开源产品,用于实现分布式系统的服务发现、服务隔离、服务配置,这些功能中的每一个都可以根据需要单独使用,也可以同时使用所有功能。Consul 官网目前主要推 Consul 在服务网格中的使用。

    与其它分布式服务注册与发现的方案相比,Consul 的方案更“一站式”——内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具。Consul 本身使用 go 语言开发,具有跨平台、运行高效等特点,也非常方便和 Docker 配合使用。

    Consul 的主要特点有:
    Service Discovery : 服务注册与发现,Consul 的客户端可以做为一个服务注册到 Consul,也可以通过 Consul 来查找特定的服务提供者,并且根据提供的信息进行调用。

    Health Checking: Consul 客户端会定期发送一些健康检查数据和服务端进行通讯,判断客户端的状态、内存使用情况是否正常,用来监控整个集群的状态,防止服务转发到故障的服务上面。

    KV Store: Consul 还提供了一个容易使用的键值存储。这可以用来保持动态配置,协助服务协调、建立 Leader 选举,以及开发者想构造的其它一些事务。

    Secure Service Communication: Consul 可以为服务生成分布式的 TLS 证书,以建立相互的 TLS 连接。 可以使用 intentions 定义允许哪些服务进行通信。 可以使用 intentions 轻松管理服务隔离,而不是使用复杂的网络拓扑和静态防火墙规则。

    Multi Datacenter: Consul 支持开箱即用的多数据中心,这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。

    Consul 角色
    Server: 服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其它数据中心通讯。 每个数据中心的 Server 数量推荐为 3 个或是 5 个。

    Client: 客户端, 无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群。

    Consul 旨在对 DevOps 社区和应用程序开发人员友好,使其成为现代、弹性基础架构的理想选择。

    使用Consul 的优势

    使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接。相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft。

    支持多数据中心,内外网的服务采用不同的端口进行监听。多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等。 zookeeper 和 etcd 均不提供多数据中心功能的支持。

    支持健康检查。 etcd 不提供此功能。

    支持 http 和 dns 协议接口。 zookeeper 的集成较为复杂, etcd 只支持 http 协议。

    官方提供 Web 管理界面, etcd 无此功能。

    Consul 保持了 CAP 中的 CP,保持了强一致性和分区容错性。

    Consul 支持 Http\gRPC\DNS 多种访问方式。

    Consul 的调用过程

    首先我们根据一张图来了解一下 Consul 服务调用过程:

    在这里插入图片描述

    1、当 Producer 启动的时候,会向 Consul 发送一个 post 请求,告诉 Consul 自己的 IP 和 Port;

    2、Consul 接收到 Producer 的注册后,每隔 10s(默认)会向 Producer 发送一个健康检查的请求,检验 Producer 是否健康;

    3、当 Consumer 发送 GET 方式请求 /api/address 到 Producer 时,会先从 Consul 中拿到一个存储服务 IP 和 Port 的临时表,从表中拿到 Producer 的 IP 和 Port 后再发送 GET 方式请求 /api/address;

    4、该临时表每隔 10s 会更新,只包含有通过了健康检查的 Producer。

    Spring Cloud Consul 项目是针对 Consul 的服务治理实现。Consul 是一个分布式高可用的系统,它包含多个组件,但是作为一个整体,在微服务架构中,为我们的基础设施提供服务发现和服务配置的工具。

    Consul 和 eureka的对比

    我们先来通过一个表格做简单对比

    Feature Euerka Consul
    服务健康检查 可配支持 服务状态,内存,硬盘等
    多数据中心 支持
    kv 存储服务 支持
    一致性 raft
    cap ap cp
    使用接口(多语言能力) http(sidecar) 支持 http 和 dns
    watch 支持 支持 long polling/大部分增量 全量/支持long polling
    自身监控 metrics metrics
    安全 acl /https
    编程语言 Java go
    Spring Cloud 集成 已支持 已支持

    通过对比可以得知, Consul 功能更强大,Euerka 更容易使用。

    Consul 强一致性©带来的是:

    服务注册相比 Eureka 会稍慢一些。因为 Consul 的 raft 协议要求必须过半数的节点都写入成功才认为注册成功,。Leader 挂掉时,重新选举期间整个 Consul 不可用。保证了强一致性但牺牲了可用性。

    Consul 强烈的一致性意味着它可以作为领导选举和集群协调的锁定服务。

    Eureka 保证高可用(A)和最终一致性:

    服务注册相对要快,因为不需要等注册信息 replicate 到其它节点,也不保证注册信息是否 replicate 成功。当数据出现不一致时,虽然 A, B 上的注册信息不完全相同,但每个 Eureka 节点依然能够正常对外提供服务,这会出现查询服务信息时如果请求 A 查不到,但请求 B 就能查到。如此保证了可用性但牺牲了一致性。

    安装Consul

    Consul 不同于 Eureka 是由 go 语言开发而成,因此需要我们单独来安装。

    打开 Consul官网根据不同的操作系统选择最新的 Consul 版本,我们这里以 Windows 64 操作系统为例,可以看出 Consul 目前的最新版本为 1.4.4

    在这里插入图片描述
    下载下来是一个 consul_1.4.4_windows_amd64.zip 的压缩包,解压是一个 consul.exe 的执行文件。

    在这里插入图片描述

    cd 到对应的目录下,使用 cmd 启动 Consul:

    cd D:\Common Files\consul
    #cmd启动: consul agent -dev # -dev表示开发模式运行,另外还有-server表示服务模式运行

    为了方便启动,可以在同级目录下创建一个 run.bat 脚本来启动,脚本内容如下:

    consul agent -dev pause

    下次启动的时候直接双击 run.bat 文件即可;当然也可以把 consul 的 exe 文件路径加入到本机的 path 路径下,这样后期只需要在 cmd 命令行下运行

    执行命令后,命令行会输出如下信息:

    在这里插入图片描述

    启动成功之后访问:localhost:8500,就可以看到Consul的管理界面

    在这里插入图片描述

    Consul 的 Web 管理界面有一些菜单,我们这里做一下简单的介绍:

    Services,管理界面的默认页面,用来展示注册到 Consul 的服务,启动后默认会有一个 consul 服务,也就是它本身。

    Nodes,在 Services 界面双击服务名就会来到 Services 对于的 Nodes 界面,Services 是按照服务的抽象来展示的,Nodes 展示的是此服务的具体节点信息。比如启动了两个订单服务实例,Services 界面会出现一个订单服务,Nodes 界面会展示两个订单服务的节点。

    Key/Value ,如果有用到 Key/Value 存储,可以在界面进行配置、查询。

    ACL,全称 Access Control List,为访问控制列表的展示信息。

    Intentions,可以在页面配置请求权限。

    当我们看到这个页面后,也就意味着 Consul 已经安装成功了。

    总结

    本节为大家介绍了注册中心的另外一个产品:Consul。介绍了 Consul 的特点、优势,以及和 Eureka 对比有什么不同的特性,最后为大家展示了如何在 Windows 下安装一个 Consul 服务。下节为大家介绍 Consul 的架构原理和实践。

    展开全文
  • crystal-consulConsul的Crystal客户端(http:www.consul.io)
  • consul 指南

    2018-12-19 22:59:55
    consul 实践指南,微服务开发必备,集成配置中心、服务中心于一体,强大的服务协调!
  • Consul1-window安装consul

    千次阅读 2018-07-08 17:23:23
    在spring cloud的可以使用eureka和consul,这篇简介下window下怎么安装consul consul下载地址:...安装consul:1,下载windows64位的consul安装包,解压到相应的目录下eg:D:\consul_1.2.0_windows_amd642...
  • consul怎么在windows下安装

    万次阅读 热门讨论 2017-04-15 23:37:54
    设置环境变量:计算机 右键 属性 高级属性设置环境变量设置在path下加上:E:\programfiles\consul;cmd启动: consul agent -dev 可以看到启动成功。打开网址:http://localhost:8500 ,可以看到界面,相关服务...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,466
精华内容 6,586
关键字:

consul