上图是官网提供的一个事例系统图,图中的Server是consul服务端高可用集群,Client是consul客户端。consul客户端不保存数据,客户端将接收到的请求转发给响应的Server端。Server之间通过局域网或广域网通信实现数据一致性。每个Server或Client都是一个consul agent。Consul集群间使用了GOSSIP协议通信和raft一致性算法。上面这张图涉及到了很多术语:

  • Agent——agent是一直运行在Consul集群中每个成员上的守护进程。通过运行 consul agent 来启动。agent可以运行在client或者server模式。指定节点作为client或者server是非常简单的,除非有其他agent实例。所有的agent都能运行DNS或者HTTP接口,并负责运行时检查和保持服务同步。
  • Client——一个Client是一个转发所有RPC到server的代理。这个client是相对无状态的。client唯一执行的后台活动是加入LAN gossip池。这有一个最低的资源开销并且仅消耗少量的网络带宽。
  • Server——一个server是一个有一组扩展功能的代理,这些功能包括参与Raft选举,维护集群状态,响应RPC查询,与其他数据中心交互WAN gossip和转发查询给leader或者远程数据中心。
  • DataCenter——虽然数据中心的定义是显而易见的,但是有一些细微的细节必须考虑。例如,在EC2中,多个可用区域被认为组成一个数据中心?我们定义数据中心为一个私有的,低延迟和高带宽的一个网络环境。这不包括访问公共网络,但是对于我们而言,同一个EC2中的多个可用区域可以被认为是一个数据中心的一部分。
  • Consensus——在我们的文档中,我们使用Consensus来表明就leader选举和事务的顺序达成一致。由于这些事务都被应用到有限状态机上,Consensus暗示复制状态机的一致性。
  • Gossip——Consul建立在Serf的基础之上,它提供了一个用于多播目的的完整的gossip协议。Serf提供成员关系,故障检测和事件广播。更多的信息在gossip文档中描述。这足以知道gossip使用基于UDP的随机的点到点通信。
  • LAN Gossip——它包含所有位于同一个局域网或者数据中心的所有节点。
  • WAN Gossip——它只包含Server。这些server主要分布在不同的数据中心并且通常通过因特网或者广域网通信。
  • RPC——远程过程调用。这是一个允许client请求server的请求/响应机制。

在每个数据中心,client和server是混合的。一般建议有3-5台server。这是基于有故障情况下的可用性和性能之间的权衡结果,因为越多的机器加入达成共识越慢。然而,并不限制client的数量,它们可以很容易的扩展到数千或者数万台。

  同一个数据中心的所有节点都必须加入gossip协议。这意味着gossip协议包含一个给定数据中心的所有节点。这服务于几个目的:第一,不需要在client上配置server地址。发现都是自动完成的。第二,检测节点故障的工作不是放在server上,而是分布式的。这使得故障检测相比心跳机制有更高的可扩展性。第三:它用来作为一个消息层来通知事件,比如leader选举发生时。

  每个数据中心的server都是Raft节点集合的一部分。这意味着它们一起工作并选出一个leader,一个有额外工作的server。leader负责处理所有的查询和事务。作为一致性协议的一部分,事务也必须被复制到所有其他的节点。因为这一要求,当一个非leader的server收到一个RPC请求时,它会将请求转发给集群leader。

  server节点也作为WAN gossip Pool的一部分。这个Pool不同于LAN Pool,因为它是为了优化互联网更高的延迟,并且它只包含其他Consul server节点。这个Pool的目的是为了允许数据中心能够以low-touch的方式发现彼此。这使得一个新的数据中心可以很容易的加入到现存的WAN gossip。因为server都运行在这个pool中,它也支持跨数据中心请求。当一个server收到来自另一个数据中心的请求时,它随即转发给正确数据中心的一个server。该server再转发给本地leader。

  这使得数据中心之间只有一个很低的耦合,但是由于故障检测,连接缓存和复用,跨数据中心的请求都是相对快速和可靠的。

使用Consul也非常简单,基本可以做到开箱即用

这篇文章《使用C# 和Consul进行分布式系统协调 》是在单机上做的, 我们现在要搭建一个3节点的集群,本文就是介绍如何搭建一个3节点的Consul集群:

1.   准备工作

  a)      启动三台虚拟机

    s1:10.0.0.5

    s2:10..0.0.6

    s3:10..0.0.7

  b)      每台机器上在 /usr/local 新建文件夹    

mkdir –p /usr/local/consul/data

  c)      下载consul,并将其考入到/usr/local/consul中

    下载地址:https://www.consul.io/downloads.html

sudo wget https://releases.hashicorp.com/consul/0.7.2/consul_0.7.2_linux_amd64.zip

unzip consul_0.7.2_linux_amd64.zip

2.   启动server agent

   a)      进入consul目录中

b)      执行命令:

sudo ./consul agent -server -bootstrap-expect 2 -data-dir=data -node=n1 -bind=10.0.0.5 -client=0.0.0.0 &

注:
i.  server: 以server身份启动。
ii.  bootstrap-expect:集群要求的最少server数量,当低于这个数量,集群即失效。
iii.  data-dir:data存放的目录,更多信息请参阅consul数据同步机制
iv.  node:节点id,在同一集群不能重复。
v.   bind:监听的ip地址。
vi.  client 客户端的ip地址
vii.  &  :在后台运行,此为linux脚本语法
vii.  更多参数及配置说明见consul官方说明文档https://www.consul.io/docs/agent/options.html。

c)      修改node和bind信息,分别在另外两台机器中执行 上面命令。

sudo ./consul agent -server -bootstrap-expect 2 -data-dir=data -node=n2 -bind=10.0.0.6 -client=0.0.0.0 &

sudo ./consul agent -server -bootstrap-expect 2 -data-dir=data -node=n3 -bind=10.0.0.5 -client=0.0.0.0 &

  d)      在s2、s3中分别执行:

./consul join 10.0.0.7

到这里整个consul server 集群就算完成了,可以利用consul members查看集群中包含的node信息。使用consul info命令可以查看当前节点状态,包括是否在集群中,是否为leader(主)。

3.   搭建管理工具

consul自带的WEB UI,Web ui是consul提供的可视化的服务web界面,可以对key/value和服务、节点进行操作

  a)      下载consul web ui(包含一个html和一个static文件件),和本机中的consul放到同级目录。

  b)     在本机启动consul,需要设置-ui-dir ./webui

sudo ./consul agent -server -bootstrap-expect 2 -data-dir=data -node=n3 -bind=10.0.0.7 -ui-dir=webui -client 0.0.0.0 &
打开浏览器访问8500 端口:

搭建consul 集群相关推荐

  1. SpringCloud 多机搭建Consul集群

    搭建环境:linux + centos 7 + consul 1.8.6 一.在三台linux主机上分别上传并解压consul安装包 下载地址:https://www.consul.io/downlo ...

  2. 基于滴滴云服务器搭建 Consul 集群

    前言 Consul 是什么 Consul 是用 Go 开发的分布式服务协调管理的工具,它提供了服务发现,健康检查,Key/Value 存储等功能,并且支持跨数据中心的功能. Consul 基本概念 A ...

  3. 使用docker-compose搭建consul集群环境

    目录 环境 一.先装docker 部署docker 镜像加速 网络优化 二.配置 consul服务器 1.安装软件包 2.查看集群信息 3.通过httpd api 获取集群信息 三.容器服务自动加入群 ...

  4. 【微服务】搭建Consul集群服务和Consul配置中心

    文章目录 一.传统配置文件的弊端 二.微服务配置中心 三.主流的配置中心 四.Consul 配置操作 1.添加配置信息 2.获取配置信息 五.单点服务器Consul集群 一.传统配置文件的弊端 静态化 ...

  5. 微服务 - 搭建Consul集群服务,Consul配置中心

    传统配置文件的弊端 静态化配置,例如env文件 配置文件无法区分环境 配置文件过于分散 历史版本无法查看 配置中心如何解决的呢?配置中心的思路是把项目中的配置参数全部放在一个集中的地方来管理,并提供一 ...

  6. Docker-Compose搭建consul集群环境

    目录 一.Compose consul的概述 1.Compose是什么? 2.Docker Compose容器编排 3.Docker Compose配置常用字段 4.Docker Compose常用命 ...

  7. 使用Docker搭建Consul集群

    2019独角兽企业重金招聘Python工程师标准>>> 1. 做什么事情? consul作为一个服务发现的工具在国内外都收到欢迎, 它的多数据中心是其他如zookerper工具所不能 ...

  8. docker-Consul的概述及consul集群环境的搭建

    目录 一.概述 Consul的作用 二.搭建consul集群环境 1.安装Consul 2.配置容器服务自动加入nginx集群 (1)安装Gliderlabs/Registrator (2)测试服务 ...

  9. 微服务之:从零搭建ocelot网关和consul集群

    介绍 微服务中有关键的几项技术,其中网关和服务服务发现,服务注册相辅相成. 首先解释几个本次教程中需要的术语 网关 Gateway(API GW / API 网关),顾名思义,是企业 IT 在系统边界 ...

最新文章

  1. OpenCV人脸检测与三角剖分绘制
  2. linux的变量用法
  3. 交叉编译inetutils并配置telnet服务
  4. java运行环境变量及自定义变量
  5. CLR 与 C++的常用类型转换笔记
  6. 操作系统原理与实践-2操作系统的引导
  7. 通用企业网站源码 dedecms织梦模板 (带手机端)+PC+移动端+利于SEO优化
  8. vue添加滚动事件,解决简书Carol_笑一笑方案中vue移除滚动事件失效的问题
  9. Android lint工具 检查的常见问题
  10. 使用Python脚本将酷狗音乐的缓存文件修改为可播放
  11. html在div中数字时钟,在JS+CSS中如何实现滚动数字时钟
  12. python绘制饼图explode_python - 使用Python生成复合饼图或饼图饼图 - 堆栈内存溢出...
  13. 荆门市建设企业网站多少钱,荆门口碑好的网站建设多少钱
  14. 音乐app、app原型、音乐原型、云音乐、听歌、电台、本地音乐、点赞、收藏、歌单广场、动态、社区、评论、歌词、歌手、主播、视频、云村、下载、翻唱、歌曲播放、订阅、频道、引导页、登录注册、axure原型
  15. vba写的《志愿者排班表》
  16. 悠然乱弹:软件开发杂谈
  17. 南邮离散数学试卷2023(含答案)
  18. Duilib简明教程
  19. 全国各省市区数据sql格式(utf8)
  20. 最新设计工具最全讲解,设计大师一定要知道

热门文章

  1. iOS 延迟1.5s 执行方法
  2. python matplotlib模块——绘制三维图形、三维数据散点图
  3. 【PHPStorm使用手册】如何设置字体大小?
  4. elasticsearch Java API 索引API
  5. Centos 6.5 64位双网卡绑定
  6. Mongodb学习(安装篇): 在centos下的安装
  7. Javascript右键菜单类
  8. 动手敲10行代码读懂Python
  9. Matlab 图像分块(不重叠、重叠)
  10. grep、cut、awk、sed文本处理