简介

  • Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。
  • Consul的功能都很实用,其中包括:服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等特性。
  • Consul本身只是一个二进制的可执行文件,所以安装和部署都非常简单,只需要从官网下载后,在执行对应的启动脚本即可。
  • 官网下载地址: https://www.consul.io/downloads.html

特性

  • 基础特性

    1. 服务注册/发现
    2. 数据强一致型保证
    3. 多数据中心
    4. 健康检查
    5. Key/Value存储
  • 高级特性
    • HTTP API
    • ACL

工作模式

  • Consul中包括的3种不同的角色:Client、Server、Server-Leader。

  • 还有一个在图上没有标出来的角色Agent,一共4个角色。

  • Agent

    • 是一个守护线程

    • 跟随Consul应用启动而启动

    • 负责检查、维护节点同步

  • Client

    • 转发所有请求给Server
    • 无状态, 不持久化数据
    • 参与LAN Gossip的健康检查
  • Server

    • 持久化数据
    • 转发请求给Server-Leader
    • 参与Server-Leader选举
    • 通过WAN Gossip(流言算法协议, Cassandra和比特币的底层算法, 符合弱一致性), 与其他数据中心交换数据
  • Server-Leader

    • 响应RPC请求
    • 将服务列表数据同步给Server

工作原理

  • 服务注册的方式

    1. HTTP API

      http://{ip}:8500/v1/agent/service/register/:service
    2. JSON 配置文件

      {
      "services": [
      {
      "id": "serverId",
      "name": "serverName",
      "tags": [
      "primary"
      ],
      "address": "127.0.0.1",
      "port": 9003,
      "checks": [
      {
      "id": "api-servie",
      "name": "Service 'xx' check",
      "http": "http://127.0.0.1:9003/public/health",
      "method": "GET",
      "interval": "10s",
      "timeout": "1s"
      }
      ]
      }
      ]
      • 启动增加参数: -config-dir

        nohup ./consul agent -dev -config-dir=/consul-conf/service.json &
  • 服务发现的方式

    1. HTTP API

      • 获取某个service下健康的服务列表信息

        http://{ip}:8500/v1/health/service/:service
    2. DNS Agent

  • 工作流程

集群搭建

  • 这次我们以二进制包方式搭建, 其实还有docker的方式。

  • 我使用的系统为ubuntu18.04LTS

  • 集群规划:node01, node02, node03, node04, node05上都安装

  • 集群前置准备请参考: https://www.cnblogs.com/ronnieyuan/p/11461377.html

  • 上传二进制包并解压到指定目录

    unzip consul_1.6.2_linux_amd64.zip -d /usr/bin
  • 解压后直接就是一个可执行文件了

  • vim ~/.bashrc 修改环境变量

    # Consul
    export CONSUL_HOME=/usr/bin/consul
    export PATH=$PATH:CONSUL_HOME
  • 验证Consul安装是否成功

    root@node01:/home/ronnie/soft# consul version
    Consul v1.6.2
    Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)
    root@node01:/home/ronnie/soft# vim ~/.bashrc
  • 将二进制文件拷贝至其他几台虚拟机上, 记得修改配置文件

    cd /usr/bin/
    scp consul root@node02:`pwd`
    scp consul root@node03:`pwd`
    scp consul root@node04:`pwd`
    scp consul root@node05:`pwd`
  • 分别在五台虚拟机上输入以下对应的命令

    # node01
    consul agent -server -ui -bootstrap-expect=5 -data-dir=/data/consul -node=agent-1 -client=0.0.0.0 -bind=192.168.180.130 -datacenter=dc1 # node02
    consul agent -server -ui -bootstrap-expect=5 -data-dir=/data/consul -node=agent-2 -client=0.0.0.0 -bind=192.168.180.131 -datacenter=dc1 -join 192.168.180.130 # node03
    consul agent -server -ui -bootstrap-expect=5 -data-dir=/data/consul -node=agent-3 -client=0.0.0.0 -bind=192.168.180.132 -datacenter=dc1 -join 192.168.180.130 # node04
    consul agent -server -ui -bootstrap-expect=5 -data-dir=/data/consul -node=agent-4 -client=0.0.0.0 -bind=192.168.180.133 -datacenter=dc1 -join 192.168.180.130 # node05
    consul agent -server -ui -bootstrap-expect=5 -data-dir=/data/consul -node=agent-5 -client=0.0.0.0 -bind=192.168.180.134 -datacenter=dc1 -join 192.168.180.130
    • 命令解读:

      • -bootstrap-expect=5: 指定了集群有5台
      • -node=agent-x: 指定服务器
      • -client=0.0.0.0: 指定当前主机客户端侦听地址为0.0.0.0
      • -bind: 绑定当前主机的ip地址
      • -datacenter=dc: 指定了一个数据中心的名称
      • -join 192.168.180.130: 后几台服务器在启动的时候加入第一台代理服务器node01(PS, 比较坑的是即使已经改过hostname文件, 还是得敲ip)
      • -ui指定了启用每台服务器的内置 WebUI 服务器组件
      • 当五台服务器都正确运行起来以后,Consul 集群将自动选举 leader,自动进行集群事务,无需干预。
    • 启动成功案例

      ==> bind_addr cannot be empty
      root@node02:~# consul agent -server -ui -bootstrap-expect=5 -data-dir=/data/consul -node=agent-2 -client=0.0.0.0 -bind=192.168.180.131 -datacenter=dc1 -join 192.168.180.130
      bootstrap_expect > 0: expecting 5 servers
      ==> Starting Consul agent...
      Version: 'v1.6.2'
      Node ID: '304a1a5a-2987-e7ad-738d-7d21f9dbd887'
      Node name: 'agent-2'
      Datacenter: 'dc1' (Segment: '<all>')
      Server: true (Bootstrap: false)
      Client Addr: [0.0.0.0] (HTTP: 8500, HTTPS: -1, gRPC: -1, DNS: 8600)
      Cluster Addr: 192.168.180.131 (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: 2019/11/29 22:19:15 [INFO] raft: Initial configuration (index=0): []
      2019/11/29 22:19:15 [INFO] raft: Node at 192.168.180.131:8300 [Follower] entering Follower state (Leader: "")
      2019/11/29 22:19:15 [INFO] serf: EventMemberJoin: agent-2.dc1 192.168.180.131
      2019/11/29 22:19:15 [INFO] serf: EventMemberJoin: agent-2 192.168.180.131
      2019/11/29 22:19:15 [INFO] consul: Adding LAN server agent-2 (Addr: tcp/192.168.180.131:8300) (DC: dc1)
      2019/11/29 22:19:15 [INFO] agent: Started DNS server 0.0.0.0:8600 (udp)
      2019/11/29 22:19:15 [INFO] consul: Handled member-join event for server "agent-2.dc1" in area "wan"
      2019/11/29 22:19:15 [INFO] agent: Started DNS server 0.0.0.0:8600 (tcp)
      2019/11/29 22:19:15 [INFO] agent: Started HTTP server on [::]:8500 (tcp)
      ==> Joining cluster...
      2019/11/29 22:19:15 [INFO] agent: (LAN) joining: [192.168.180.130]
      2019/11/29 22:19:15 [INFO] serf: EventMemberJoin: agent-1 192.168.180.130
      2019/11/29 22:19:15 [INFO] agent: (LAN) joined: 1
      Join completed. Synced with 1 initial agents
      2019/11/29 22:19:15 [INFO] agent: started state syncer
      ==> Consul agent running!
      2019/11/29 22:19:15 [INFO] consul: Adding LAN server agent-1 (Addr: tcp/192.168.180.130:8300) (DC: dc1)
      2019/11/29 22:19:15 [INFO] serf: EventMemberJoin: agent-1.dc1 192.168.180.130
      2019/11/29 22:19:15 [INFO] consul: Handled member-join event for server "agent-1.dc1" in area "wan"
      2019/11/29 22:19:17 [INFO] serf: EventMemberJoin: agent-3.dc1 192.168.180.132
      2019/11/29 22:19:17 [INFO] consul: Handled member-join event for server "agent-3.dc1" in area "wan"
      2019/11/29 22:19:17 [INFO] serf: EventMemberJoin: agent-3 192.168.180.132
      2019/11/29 22:19:17 [INFO] consul: Adding LAN server agent-3 (Addr: tcp/192.168.180.132:8300) (DC: dc1)
      2019/11/29 22:19:17 [INFO] serf: EventMemberJoin: agent-4.dc1 192.168.180.133
      2019/11/29 22:19:17 [INFO] consul: Handled member-join event for server "agent-4.dc1" in area "wan"
      2019/11/29 22:19:18 [INFO] serf: EventMemberJoin: agent-4 192.168.180.133
      2019/11/29 22:19:18 [INFO] consul: Adding LAN server agent-4 (Addr: tcp/192.168.180.133:8300) (DC: dc1)
      2019/11/29 22:19:18 [INFO] serf: EventMemberJoin: agent-5 192.168.180.134
      2019/11/29 22:19:18 [INFO] consul: Adding LAN server agent-5 (Addr: tcp/192.168.180.134:8300) (DC: dc1)
      2019/11/29 22:19:18 [INFO] consul: Existing Raft peers reported by agent-5, disabling bootstrap mode
      2019/11/29 22:19:18 [INFO] serf: EventMemberJoin: agent-5.dc1 192.168.180.134
      2019/11/29 22:19:18 [INFO] consul: Handled member-join event for server "agent-5.dc1" in area "wan"
      2019/11/29 22:19:19 [WARN] raft: Failed to get previous log: 1 log not found (last: 0)
      2019/11/29 22:19:19 [INFO] agent: Synced node info
      2019/11/29 22:19:19 [INFO] consul: New leader elected: agent-1
      ==> Failed to check for updates: Get https://checkpoint-api.hashicorp.com/v1/check/consul?arch=amd64&os=linux&signature=6977bf57-e750-2607-d65d-fa3ab1444055&version=1.6.2: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
  • 在浏览器上访问node01节点的8500端口

  • 那么本次集群的安装就到此为止了

Consul 简介及集群安装的更多相关文章

  1. HBase简介及集群安装

    一.Hbase概述 Apache HBase™是Hadoop数据库,是一个分布式,可扩展的大数据存储. 当您需要对大数据进行随机,实时读/写访问时,请使用Apache HBase™.该项目的目标是托 ...

  2. etcd简介及集群安装部署使用

    目录 1. 简介 2. Linux下载安装 3. 单机模式启动 4. 指定各集群成员的方式配置集群 5. 使用discovery service的方式配置集群 6. 集群模式下客户端命令行 7. et ...

  3. centos7上consul的集群安装

    centos7上consul的安装 ###一 下载 下载文件 wget https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_a ...

  4. consul 集群安装

    上图是官网提供的一个事例系统图,图中的Server是consul服务端高可用集群,Client是consul客户端.consul客户端不保存数据,客户端将接收到的请求转发给响应的Server端.Ser ...

  5. Hadoop多节点集群安装配置

    目录: 1.集群部署介绍 1.1 Hadoop简介 1.2 环境说明 1.3 环境配置 1.4 所需软件 2.SSH无密码验证配置 2.1 SSH基本原理和用法 2.2 配置Master无密码登录所有 ...

  6. 一步步教你Hadoop多节点集群安装配置

    1.集群部署介绍 1.1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台.以Hadoop分布式文件系统HDFS(Hadoop Distributed Filesys ...

  7. spark集群安装配置

    spark集群安装配置 一. Spark简介 Spark是一个通用的并行计算框架,由UCBerkeley的AMP实验室开发.Spark基于map reduce 算法模式实现的分布式计算,拥有Hadoo ...

  8. kafka分布式消息队列介绍以及集群安装

    简介 首先简单说下对kafka的理解: 1.kafka是一个分布式的消息缓存系统: 2.kafka集群中的服务器节点都被称作broker 3.kafka的客户端分为:一是producer(消息生产者) ...

  9. CDH集群安装&测试总结

    0.绪论 之前完全没有接触过大数据相关的东西,都是书上啊,媒体上各种吹嘘啊,我对大数据,集群啊,分布式计算等等概念真是高山仰止,充满了仰望之情,觉得这些东西是这样的: 当我搭建的过程中,发现这些东西是 ...

随机推荐

  1. windows 以太坊开发框架Truffle环境搭建

    https://www.jianshu.com/p/f7a4de0cba9d 一.安装DApp开发环境 1.1 安装Node.js 我们使用官方长期支持的8.10.0LTS版本,下载64位包装包. 下 ...

  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:移除默认的列表样式

    <!DOCTYPE html> <html> <head> <title>菜鸟教程(runoob.com)</title> <meta ...

  3. Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。

    Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离.

  4. uniGUI之换肤(17)

    在MainModule里  Design 模式 1]RecallLastTheme 设为True 2]Theme选一个皮肤 总共有 classicgraycrispneptunetritontrito ...

  5. ubuntu14 安装Node.js

    @brief ubuntu  安装Node.js @date 2018-06-28 @see Ubuntu 上安装 Node.js(https://www.runoob.com/nodejs/node ...

  6. 阿里云CentOS安装图形化界面

    阿里云提供的linux系统是不含图形化界面的,如果您需要安装图形化界面, 请您参考为Linux实例安装图形化桌面环境和在CentOS系统中自动安装并运行VNC Server安装部署一下. 为Linux ...

  7. JAVA高级编程(数据源datasource)

    数据源:通过jdbc连接数据库,多建立几条连接放在数据源里面.可以设置数据源的最大连接数,同时活跃的连接数,最少空闲的连接数,能够同时接收处理的连接数等等. dbcp数据源 需要的jar包: comm ...

  8. keyup事件、keydown事件和input事件的区别

    keydown.keyup 属于键盘事件,input 属于文本事件 详细说明: keydown:当用户按下键盘上的任意按键时触发,如果按住不放,会重复触发此事件. keyup:当用户释放键盘上的按键时 ...

  9. myBatis 操作 mysql时,使用 like 关键进行模糊查询的方法

    参考:https://blog.csdn.net/rainbow702/article/details/50519424 like CONCAT('%', #{mkName}, '%')

  10. jQuery Validation Engine

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...