zoukankan      html  css  js  c++  java
  • Consul 学习笔记(一)之初识

    Github仓库:https://github.com/sunweisheng/spring-cloud-example

    https://www.cnblogs.com/bluersw/p/11610711.html

    https://spring.io/projects/spring-cloud-consul

    https://learn.hashicorp.com/consul/getting-started/agent

    https://www.cnblogs.com/cuishuai/p/8194345.html

    https://www.consul.io/docs/internals

    一、概念介绍

    1、consul 用途

        cosnul 维护服务状态,在项目中运行的所有服务都需要注册到 consul 中,当服务要调用另外一个服务的接口时,需要从consul 查询目标服务所有实例地址,从中进行负载均衡选择某个服务实例,进行接口调用。 总而言之,consul 主要能力是为远程调用时寻址服务提供支持。

    2、consul 总体部署结构

    (1) 数据中心(DataCenter)

        当consul 部署在不同的区域管理不同的服务时,每个区域形成各自私有的局域网,此时称这个区域为数据中心,在同个数据中心中部署了多个 consul server 就形成了 consul集群,每个consul server 称之为一个 consul 实例。

    (2) consul client

    • 数据中心有多个服务对外提供了能力,需要使用服务提供能力的调用方(也是一个服务)通过RPC进行接口调用,此时对外提供能力的服务必须将自己注册到 consul server 中,声明自己的 IP、端口、服务名。
    • 服务所在服务器/虚拟机上可以部署一个consul client (一个机器上部署一个);
    • 服务将自己注册到 consul client 上;
    • consul client 将注册信息注册到consul server上;
    • consul client 始终 和 服务保持心跳,用以记录服务是否正常运行;若不正常,consul client 告知 consul server;
    • 服务通过consul client 寻址另个服务所有实例访问地址,consul client 将查询请求转发给 consul server;

        为了保证 consul server 的 高可靠性 和 高可用性,consul server 需要在数据中心中组成集群,以此保证一个consul server 异常,其他 consul server 仍正常工作,对于服务无故障感知。具体组成集群要求 见 《Consul 学习笔记(二)之 高可靠性》

    二、实操进行搭建

    1、下载

    (1) 下载地址为:https://learn.hashicorp.com/consul

     在图中的 download 提供的页面中选择合适的 consul 包进行下载,本次要安装在Linux 服务器上,所以选择下载的版本为:consul_1.8.0_linux_amd64.zip

    2、安装

    (1) 上传到linux服务器上

    (2) 解压: unzip -d consul consul_1.8.0_linux_amd64.zip  将 zip包解压到当前目录下的consul 子目录中

    (3) 添加环境变量(可选操作,不做这个也行)

      本示例将其添加到所有用户可见的环境变量中,因此直接编辑了 /etc/profile文件

    • vim /etc/profile  

            在末尾添加  ;

    • source /etc/profile   重新加载 profile 文件,让添加的环境变量生效
    • echo $PATH    查看当前环境变量

    •  consul     校验是否安装成功

    3、运行

        consul 所有节点 均是运行在 agent上的,在启动时分为 server 模式 和 client 模式。 本次示例中 consul 被解压到了 /opt/consul/consul/bin 下,在不将 consul 写入到环境变量的情况下,可以直接进入 该目录下 使用 #./consul xxx 的方式启动 consul。

       通过 cd /opt/consul/consul/bin 的方式切换命令。

       本次以开发模式运行,体验 consul 的功能,该安装模式在生产环境中不能采用。

    (1) server 模式

        执行命令 ./consul agent -dev   ----- 表示在开发模式下运行,其属于 server 模式,不需要进行任何其他配置。

     

     

     从以上的输出可以看到

    • 数据中心默认为 dc1;
    • 该集群中仅有一个结点为:192.168.149.128;且结点名称就是这个IP
    • 该集群经过选举 leader 为 192.168.149.128;
    • 该结点模式为 server;

    (2) 使用

    a) Http API 通过 http 发送请求进行结点查询或注册等。

       使用  curl localhost:8500/v1/catalog/nodes

    示例:

         consul 安装在 192.168.149.128 上面,若要通过 192.168.149.129 上访问 128 上面的 consul,需要检查 128 服务器上的 防火墙是否开启,在开启的情况下,需要将consul用到的几个端口进行开发,有:8500/tcp 8301/tcp 8302/tcp 8600/tcp.

    问题:

       1) 使用命令 ./consul agent -dev -advertise=192.168.149.128 -bind=192.168.149.128   开启安装在 128上面的consul ,此时在129上使用上述命令进行查询,此时返回结果为:

        解决办法:

           除了128上面要开放必要的端口外,启动 consul 的命令中必须指定 -client

          在 129 上输入以下查询命令,此时才能够正常访问通。

        但是此时 在 128上面使用127.0.0.1 或 localhost 进行查询却访问不通

     由此可见:-client 是用来申明 访问 HTTP API 和 DNS INTTERFACE 接口时的IP。在 consul 1.0 之后的版本可以给该参数配置多个 IP,格式为 -client="127.0.0.1 192.168.149.128"

     这样在 128上通过 127.0.0.1 和 192.168.149.128 都可以访问 HTTP 接口

     b) 除了使用 Http API来访问 consul,也可使用 DNS interface。

    从上面的启动日志可以看到 DNS 服务是开启的。

     请求发送到 DNS 上,其 会将请求发送给 consul server。

     在 128 上服务器执行以下命令

     说明:

    •     黄色区域也可以修改成:192.168.149.128 上。
    •     红色区域为要查询的 192.168.149.128 node 的结果,返回了其对应的IP
    •     DNS Interface 查询结点命令格式为:dig @x.x.x.x -p <port> <nodeName>.node.[dataCenter.]consul 其中 x.x.x.x 为 DNS Server IP;<port> 为 DNS Server port;<nodeName> 为要查询的 consul 结点名称;[dataCenter] 可选项,表示要查询的node结点所属的数据中心名称,若该项不填,在使用 与 DNS Server 相同的 数据中心。
  • 相关阅读:
    隔离模式-常用的架构设计原则
    代理模式-常用的架构设计原则
    重试模式-常用的架构设计原则
    断路器模式-常用的架构设计原则
    磁盘IOPS(每秒读写次数)的计算方法与测量
    Spring深入浅出(七),自动装配,byName/byType
    Spring深入浅出(六),依赖注入,注入集合(含注入 Bean 引用)
    Spring深入浅出(五),依赖注入,构造函数/设值/注入内部Bean
    Spring深入浅出(四),Spring Bean定义继承
    【算法】算法的艺术(四)
  • 原文地址:https://www.cnblogs.com/sandyflower/p/12930681.html
Copyright © 2011-2022 走看看