consul 入门

【服务治理中间件】consul介绍和基本原理 Consul是一个服务网格解决方案,提供了一个功能齐全的控制平面,具有服务发现、配置和分段功能。这些功能中的每一项都可以根据需要单独使用,也可以一起使用来构建一个完整的服务网格。Consul需要一个数据平面,并支持代理和原生集成模型。Consul提供了一个简单的内置代理,因此一切都可以开箱即用,但也支持第三方代理集成,如Envoy。Consul的主要功能有:服务发现: Consul的客户端可以注册一个服务,比如api或mysql,其他客户端可以使用Consul来发现特定服务的提供者。 阅读详情

1. 什么是consul?

是一个服务管理软件。

支持多数据中心下,分布式高可用的,服务发现和配置共享。

consul支持健康检查,允许存储键值对。

一致性协议采用 Raft 算法,用来保证服务的高可用.

成员管理和消息广播 采用GOSSIP协议,支持ACL访问控制。


ACL技术在路由器中被广泛采用,它是一种基于包过滤的流控制技术。控制列表通过把源地址、目的地址及端口号作为数据包检查的基本元素,并可以规定符合条件的数据包是否允许通过。

gossip就是p2p协议。他主要要做的事情是,去中心化。 

这个协议就是模拟人类中传播谣言的行为而来。首先要传播谣言就要有种子节点。种子节点每秒都会随机向其他节点发送自己所拥有的节点列表,以及需要传播的消息。任何新加入的节点,就在这种传播方式下很快地被全网所知道。


什么是服务注册?

一个服务将其位置信息在“中心注册节点”注册的过程。该服务一般会将它的主机IP地址以及端口号进行注册,有时也会有服务访问的认证信息,使用协议,版本号,以及关于环境的一些细节信息。


什么是服务发现?

服务发现可以让一个应用或者组件发现其运行环境以及其它应用或组件的信息。用户配置一个服务发现工具就可以将实际容器跟运行配置分离开。常见配置信息包括:ip、端口号、名称等。

当一项服务存在于多个主机节点上时,client端如何决策获取相应正确的IP和port。

在传统情况下,当出现服务存在于多个主机节点上时,都会使用静态配置的方法来实现服务信息的注册。

而当在一个复杂的系统里,需要较强的可扩展性时,服务被频繁替换时,为避免服务中断,动态的服务注册和发现就很重要。

相关开源项目:Zookeeper,Doozer,Etcd,强一致性的项目,这些项目主要用于服务间的协调,同时又可用于服务的注册。


什么是强一致性协议?

按照某一顺序串行执行存储对象读写操作, 更新存储对象之后, 后续访问总是读到最新值。 假如进程A先更新了存储对象,存储系统保证后续A,B,C进程的读取操作都将返回最新值。强一致性模型有几种常见实现方法, 主从同步复制, 以及quorum复制等。


http://blog.csdn.net/shlazww/article/details/38736511


2. consul的具体应用场景

1. docker、coreos 实例的注册与配置共享

2. vitess集群

3. SaaS应用的配置共享

4.与confd服务集成,动态生成nignx与haproxy配置文件


3. 优势

1. 使用 Raft 算法来保证一致性,比poxes算法更直接。zookeeper采用的时poxes算法。

Raft大概将整个过程分为三个阶段,leader election,log replication和commit(safety)。

每个server处于三个状态:leader,follower,candidate。正常情况下,所有server中只有一个是leader,其它的都是follower。server之间通过RPC消息通信。follower不会主动发起RPC消息。leader和candidate(选主的时候)会主动发起RPC消息。

首先选择一个leader全权负责管理日志复制,leader从客户端接收log entries,将它们复制给集群中的其它机器,然后负责告诉其它机器什么时候将日志应用于它们的状态机。举个例子,leader可以在无需询问其它server的情况下决定把新entries放在哪个位置,数据永远是从leader流向其它机器。一个leader可以fail或者与其他机器失去连接,这种情形下会有新的leader被选举出来。

http://www.jdon.com/artichect/raft.html

http://blog.csdn.net/cszhouwei/article/details/38374603


2. 支持多数据中心,内外网的服务采用不同的端口进行监听。这样可以避免单点故障。

zookeeper等不支持多数据中心功能的支持


3. 支持健康检查


4. 提供web界面


5. 支持http协议与dns协议接口


4. 安装

我的是mac os x

通过工具安装:

brew cask install consul


brew cask安装也很方便

http://brew.sh/#install


5. 测试 与 运行consul

测试

consul

以服务端形式运行consul

consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul

consul members

查看consul服务节点


将http请求发给consul server

$ curl localhost:8500/v1/catalog/nodes
[{"Node":"Armons-MacBook-Air","Address":"10.1.10.38"}]


6. 注册服务

1. 创建文件夹/etc/consul.d 

.d代表有许多配置文件在里面

2. 将服务配置文件写入文件夹内

如 $ echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}'  >/etc/consul.d/web.json

3. 重启consul,并将配置文件的路径给consul

$ consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul   -config-dir /etc/consul.d

4. 查询ip和端口

DNS方式:dig @127.0.0.1 -p 8600 web.service.consul SRV

Http方式:curl http://localhost:8500/v1/catalog/service/web

5. 更新

通过http api能对service配置文件增删改查,如果更新完成后,可以通过signup命令来生效

7. 组建集群

一个consul agent就是一个独立的程序。一个长时间运行的守护进程,运行在concul集群中的每个节点上。

启动一个consul agent ,只是启动一个孤立的node,如果想知道集群中的其他节点,应该将consul agent加入到集群中去 cluster。

agent有两种模式:server与client。server模式包含了一致性的工作:保证一致性和可用性(在部分失败的情况下),响应RPC,同步数据到其他节点代理。

client 模式用于与server进行通信,转发RPC到服务的代理agent,它仅保存自身的少量一些状态,是非常轻量化的东西。本身是相对无状态的。

agent除去设置server/client模式、数据路径之外,还最好设置node的名称和ip。

一张经典的consul架构图片:


LAN gossip pool包含了同一局域网内所有节点,包括server与client。这基本上是位于同一个数据中心DC。

WAN gossip pool一般仅包含server,将跨越多个DC数据中心,通过互联网或广域网进行通信。

Leader服务器负责所有的RPC请求,查询并相应。所以其他服务器收到client的RPC请求时,会转发到leader服务器。

第一,没有必要配置客户端与服务器的地址; 发现是自动完成的。 第二,检测节点故障的工作不放置在服务器上,但被分布。 这使得故障检测比天真的心跳方案更具扩展性。 第三,它是作为一个消息层通知时,重要事件,如leader选举举行。


安装vagrant, sudo vagrant init 初始化vagrant环境。

vagrant up 启动一个虚拟node节点

vagrant status 查看vm启动的状态,包括vm的名称

vagrant ssh vm_name 登陆到vm节点

bootstrap的模式,该模式node可以指定自己作为leader,而不用进行选举。然后再依次启动其他server,配置为非bootstrap的模式。最后把第一个serverbootstrap模式停止,重新以非bootstrap模式启动,这样server之间就可以自动选举leader。

分别在两个vm上配置consul agent,如

$ vagrant ssh n1

vagrant@n1:~$ consul agent -server -bootstrap-expect 1 \

    -data-dir /tmp/consul -node=agent-one -bind=172.20.20.10

$ vagrant ssh n2

vagrant@n2:~$ consul agent -data-dir /tmp/consul -node=agent-two \
    -bind=172.20.20.11

这个时候,应用consul members 进行查询,两个consul node分别是独立,没有什么关联。


将client加入到server 集群中

vagrant@n1:~$ consul join 172.20.20.11

再用consul members查询,就发现多了一个node节点。


这样手动

加入新节点太麻烦,而较好的方法就将节点配置成自动加入集群

 consul agent -atlas-join \
  -atlas=ATLAS_USERNAME/infrastructure \

  -atlas-token="YOUR_ATLAS_TOKEN"


离开集群

ctrl+c,或者 kill 指定的agent进程,就可以将相关的agent推出集群


让consul 运行起来。consul server推荐至少在3~5个之间,推荐的方法是一开始启动其中一台server,并且配置到bootstrap的模式,该模式node可以指定自己作为leader,而不用进行选举。然后再依次启动其他server,配置为非bootstrap的模式。最后把第一个serverbootstrap模式停止,重新以非bootstrap模式启动,这样server之间就可以自动选举leader。


http://www.bubuko.com/infodetail-800623.html


8. 查询健康状态

 curl http://localhost:8500/v1/health/state/critical    // 应用http接口查询失败的节点
对于失败的节点,应用DNS查询时,是无法拿到返回结果的
dig @127.0.0.1 -p 8600 web.service.consul

9. K/V存储

consul还提供了键/值存储的功能。
如 查询 所有K/V
curl -v http://localhost:8500/v1/kv/?recurse

保存键为web/key2, flags 为42, 值为true的记录。
curl -X PUT -d 'test' http://localhost:8500/v1/kv/web/key2?flags=42
true

删除记录:
curl -X DELETE http://localhost:8500/v1/kv/web/sub?recurse

更新值:
curl -X PUT -d 'newval' http://localhost:8500/v1/kv/web/key1?cas=97
true

更新index:
curl "http://localhost:8500/v1/kv/web/key2?index=101&wait=5s"

结果:[{"CreateIndex":98,"ModifyIndex":101,"Key":"web/key2","Flags":42,"Value":"dGVzdA=="}]


更详细的consul命令详解:

http://m.oschina.net/blog/353392

10. 断电恢复outage recover

当有一台服务器不可用时,处理的方法有:
1. 对服务器进恢复,然后重新上线
2. 用新服务器,替代旧的consul服务器
这两种方式都需要将服务器ip与原来的ip相同。

3. 添加新的服务器,而ip无需与原来的相同。步骤: 停掉所有的consul服务器,将损坏的服务器ip从raft/peer.json中移除,重启其他服务器,并将新的服务器加入集群。


11. 其他



========== 转载一小段别人的总结 ==========

服务发现是怎么工作呢?

每一个服务发现工具都会提供一套API,使得组件可以用其来设置或搜索数据。正是如此,对于每一个组件,服务发现的地址要么强制编码到程序或容器内部,要么在运行时以参数形式提供。通常来说,发现服务用键值对形式实现,采用标准http协议交互。

服务发现门户的工作方式是:当每一个服务启动上线之后,他们通过发现工具来注册自身信息。它记录了一个相关组件若想使用某服务时的全部必要信息。例如,一个MySQL数据库服务会在这注册它运行的ip和端口,如有必要,登录时的用户名和密码也会留下。

当一个服务的消费者上线时,它能够在预设的终端查询该服务的相关信息。然后它就可以基于查到的信息与其需要的组件进行交互。负载均衡就是一个很好的例子,它可以通过查询服务发现得到各个后端节点承受的流量数,然后根据这个信息来调整配置。

可将配置信息从容器内拿出。一个好处是可以让组件容器更加灵活,并不受限于特定的配置信息。另一个好处是使得组件与一个新的相关服务实例交互时变得简单,可以由管理工具动态进行调整配置

Consul 入门笔记 原文链接 http://ironxu.com/?p=321Consul [ˈkɑ:nsl] 是一个分布式的服务发现和配置管理工具,本文是根据consul 入门指南 整理的笔记。1. 安装系统是三台虚拟机: CentOS release 6.8 CentOS release 7 Ubuntu 16.04 LTS 前往 官网下载地址 下载相应系统最新的二进制包,复制consul_VERSION_linu 阅读详情

相关推荐

Palabos 并行计算与多物理场模拟实战指南

本文详细介绍了Palabos在并行计算与多物理场模拟中的实战应用。作为基于C++和LBM的开源CFD工具,Palabos通过MPI实现高效并行计算,特别适合处理复杂流体模拟问题。文章涵盖从基础安装、多物理场耦合技巧到性能优化策略,并分享工业级应用案例与调试经验,帮助开发者快速掌握这一强大工具。

4k5l6j7h8的博客 211

微服务Consul简介

微服务Consul简介 概述 Consul是一个服务管理软件。支持多数据中心下,分布式高可用的,服务发现和配置共享。采用 Raft 算法,用来保证服务的高可用。 Consul是一个服务网格(微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控)解决方案,它是一个一个分布式的,高度可用的系统,而且开发使用都很简便。它提供了一个功能齐全的控制平面,主要特点是:服务发现、健康检查、键值存储、安全服务通信、多数据中心。 服务注册/发现是微服务架构中不可或缺的重要组件,起初服务都是.

syjhct的博客 2706

SillyTavern本地AI聊天平台部署与调优全指南

大型语言模型(LLM)作为当前人工智能领域的核心技术,通过其强大的自然语言理解和生成能力,正在深刻改变人机交互方式。其工作原理基于Transformer架构,通过海量数据训练,学习语言的统计规律与语义关联。这项技术的核心价值在于,它能够作为通用基础,赋能于多样化的下游应用,实现个性化的智能对话与内容创作。在工程实践中,如何高效、灵活且低成本地部署和利用这些模型,成为开发者与爱好者的关键需求。本地化部署方案,特别是结合如Ollama、KoboldCPP等推理引擎,提供了数据隐私保障与可控的硬件成本。Silly

weixin_42520448的博客 397

5分钟让你看懂Consul特性及搭建

一、前言 虽然说牛逼的公司都有那么几个牛逼的运维团队,牛逼的运维团队都有着神秘黑科技般敲代码的姿势;本人虽然不是一个运维工程师,但是有幸自己比较爱倒腾这些东西,也会那么一点点运维知识,虽然不算专业,但是还是可以在linux平台下敲一敲代码。去年由于自己业余时间搞了一个app项目,当时自己兼任后端开发,又同时兼任运维,经过多少个夜晚才把后端API网关 搭建起来,当时技术选型主要使用微服务架构,说到微...

Jlion 技术博客 9万+

Consul详解

Spring Cloud 支持很多服务发现的软件,Eureka 只是其中之一,下面是 Spring Cloud 支持的服务发现软件以及特性对比:FeatureeuerkaConsulzookeeperetcd服务健康检查可配支持服务状态,内存,硬盘等(弱)长连接,keepalive连接心跳多数据中心—支持——kv 存储服务—支持支持支持一致性—raftpaxosraftcapapcacpcp使用接口(多语言能力)http(sidecar)支持 http 和 dns客户端htt...

qq_40652202的博客 4万+

Consul详细教程(SpringBoot案例)

consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。服务部署简单,只有一个可运行的二进制的包。每个节点都需要运行agent,他有两种运行模式server和client。每个数据中心官方建议需要3或5个server节点以保证数据安全,同时保证server-leader的选举能够正确的进行。👀️。

liuerpeng1904的博客 5791

Consul 注册中心介绍以及搭建

Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案相比,Consul的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其它工具(比如ZooKeeper等),使用起来也较为简单。Consul使用Go语言编写,因此具有天然可移植性(支持Linux,Windows和MacOS);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。......

怪咖@的博客 1万+

Consul 入门教程

Consul 入门教程 1. 项目目录结构及介绍 learn-consul-get-started-vms/ ├── assets/ │ └── templates/ ├── docs/ │ └── SeparateScripts.md ├── self-managed/ │ └── infrastructure/ │ └── aws/ │ └── co...

gitblog_00210的博客 1058

Consul入门实战:在虚拟机上配置Consul Agent

Consul入门实战:在虚拟机上配置Consul Agent 项目介绍 Consul是由HashiCorp公司开发的一款开源工具,用于实现分布式系统的服务发现与配置。 此项目"learn-consul-get-started-vMS"是专门为教育目的设计的,提供了脚本以帮助用户快速生成适用于虚拟机(VM)的Consul代理配置。它特别适合那些希望在教学环境或测试环境中设置Con...

gitblog_01026的博客 460

Spring Cloud consul入门

参考

斗战圣佛91的博客 163

consul(第一篇)consul 入门

consul 入门consul是什么consul包含多个组件,从整体上看可以理解为一个服务发现、配置的工具,包含一下几个特点: 服务发现(Service Discovery):客户端通过consul提供服务,其他客户端可以通过consul利用dns或者http发现依赖服务 健康检查(Health Checking): consul提供任务的健康检查,可以用来操作或者监控集群的健康,也可以在服务发现时

liaokailin的专栏 3万+

HashiCorp Consul 部署指南:从入门到生产环境实践

HashiCorp Consul 部署指南:从入门到生产环境实践 【免费下载链接】consul Consul is a distributed, highly available, and data center aware solution to connect and configure applications a...

gitblog_00435的博客 607

Consul使用入门

Consul 作为一种分布式服务工具,为了避免单点故障常常以集群的方式进行部署,在 Consul 集群的节点中分为 Server 和 Client 两种节点(所有的节点也被称为Agent),Server 节点保存数据,Client 节点负责健康检查及转发数据请求到 Server;Server 节点有一个 Leader 节点和多个 Follower 节点,Leader 节点会将数据同步到 Follower 节点,在 Leader 节点挂掉的时候会启动选举机制产生一个新的 Leader。

pku_allen的专栏 1539

consul入门

consul的安装: # 这里以 Linux系统为例: $ wget https://releases.hashicorp.com/consul/1.4.2/consul_1.4.2_linux_amd64.zip $ unzip consul_1.4.2_linux_amd64.zip $ mv consul /usr/local/bin/ 然后$consul 命令就可以看各种命令 ...

小豆角的博客 455

Consul入门

consul安装步骤: consul的安装过程需要在root用户下执行,所以首先用"su"命令将用户切换到root下,如果记得密码可直接切换到root下,若忘记密码请按下列步骤执行 step1:修改root密码,在命令框中输入"sudo passwd root"修改root密码,修改成功后输入"su"切换到root用户下 step2:接下来下载安装Consul,输入"apt-get

Nana_meng的博客 1093

微服务之Consul 注册中心介绍以及搭建

单体架构(monolithic structure):顾名思义,整个项目中所有功能模块都在一个工程中开发;项目部署时需要对所有模块一起编译、打包;项目的架构设计、开发模式都非常简单。当项目规模较小时,这种模式上手快,部署、运维也都很方便,因此早期很多小型项目都采用这种模式。团队协作成本高:试想一下,你们团队数十个人同时协作开发同一个项目,由于所有模块都在一个项目中,不同模块的代码之间物理边界越来越模糊。最终要把功能合并到一个分支,你绝对会陷入到解决冲突的泥潭之中。系统发布效率低。

qq_62377885的博客 6530

Consul的介绍和基本使用

一、Consul的简单介绍 Consul是一套开源的分布式服务发现和配置管理系统,由HasiCorp公司用go语言开发的。提供了微服务系统中服务助理、配置中心、控制总线等功能,这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构造全方位的服务网络,总之,Consul提供了完整的服务网格解决方案。 二、Consul的优点 它具有很多优点,包括:基于raft协议,比较简洁;支持健康检查,同时支持Http和DNS协议,支持跨数据中心WAN集群,提供图形界面,跨平台;支持linux、mac、windows

weixin_46258873的博客 8221

Consul的介绍、安装与使用

1.常用服务器注册与发现框架 常见服务发现框架 Consul、Eureka、 ZooKeeper以及Etcd ZooKeeper是这种类型的项目中历史最悠久的之一,它起源于Hadoop。它非常成熟、可靠,被许多大公司(YouTube、eBay、雅虎等)使用。其中consul并不需要专门的sdk集成到服务中,因此它不限制任何语言的使用。 2.为什么要使用consul服务发现 因为一套微服务架构中有很多个服务需要管理,也就是说会有很多对grpc。如果一一对应的进行管理会很繁琐所以我们需要有一个管理发现的机

hudeyong926的专栏 9638

consul简介与安装

Consul 是 HashiCorp 公司推出的开源产品,用于实现分布式系统的服务发现、服务隔离、服务配置,这些功能中的每一个都可以根据需要单独使用,也可以同时使用所有功能。Consul 官网目前主要推 Consul 在服务网格中的使用。与其它分布式服务注册与发现的方案相比,Consul 的方案更“一站式”——内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具。

javascript_good的博客 1988

雅江流域矢量数据集shp数据-雅鲁藏布江数据下载

该数据参考中国三级流域范围空间分布矢量数据和相关雅鲁藏布江流域等的研究论文整理而成。雅鲁藏布江流域:发源地:雅鲁藏布江发源于西喜马拉雅山脉北麓的杰马央宗冰川,流经西藏南部。流经地区:它流经日喀则市、拉萨市、山南地区和林芝地区,形成著名的雅鲁藏布大峡谷。主要支流:包括拉萨河、年楚河、多雄藏布等。流域面积:雅鲁藏布江流域面积约93.5万平方公里,是世界海拔最高的大河之一。

上一篇: http协议简介
下一篇: Raft一致性算法
viewcode
博客等级 码龄15年 993粉丝 108原创
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值