• Docker 单节点部署 Consul


    CAP 原则是由计算机科学家 Eric Brewer 提出的,用于描述分布式系统中的一致性、可用性和分区容忍性之间的权衡关系,CAP 是三个概念的首字母缩写。

    原则作用
    一致性(Consistency)所有节点在同一时刻具有相同的数据视图。在一个具有多个节点的分布式系统中,当一个节点对数据进行了更新,所有其他节点在后续的访问中都能够看到这个更新。
    可用性(Availability)每个非故障节点在有限时间内都能够返回有效的响应。即系统保证对每个请求都会收到一个非错误的响应,不保证是否包含最新的数据。
    分区容忍性(Partition Tolerance)系统在网络分区的情况下仍然能够正常运行。分区容忍性是指在分布式系统中,即使由于网络故障导致节点之间无法通信,系统仍能够继续运行。

    Consul 是一款由 HashiCorp 公司开发的开源工具,用于实现分布式系统的服务发现、健康检查、配置中心和分布式锁等功能。Consul 提供了一个简单而强大的界面,允许开发人员在分布式环境中轻松地注册和发现服务。

    Consul 是一个分布式系统的服务发现和配置工具,它在设计上遵循了 CAP 原则,即一致性(Consistency)、可用性(Availability)、分区容忍性(Partition Tolerance)。以下是 Consul 在 CAP 方面的实现:

    一致性(Consistency)

    一致性协议: Consul 使用 Raft 协议作为一致性协议。Raft 是一种强一致性的分布式一致性算法,确保在集群中的节点之间达成一致的状态。
    
    强一致性: Consul 的一致性保证是强一致性,即任何时刻对 Consul 集群的读写操作都能获得最新的、一致的状态。
    
    一致性级别: Consul 提供强一致性,这意味着在进行读操作时,所有节点都能够返回相同的数据。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    可用性(Availability)

    多数据中心支持: Consul 具有跨多个数据中心的支持,允许在全球范围内构建具有高可用性和弹性的系统。
    
    健康检查: Consul 允许服务注册和进行健康检查,当服务出现故障时,Consul 能够将其标记为不可用。这有助于确保只有健康的服务被路由到,提高系统的可用性。
    
    服务发现: 通过 Consul 的服务发现功能,应用程序能够自动发现和调用其他服务,提高了整个系统的可用性。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    分区容忍性(Partition Tolerance)

    分布式架构: Consul 的设计考虑了分布式系统的特性,它可以在面临网络分区的情况下继续运行。
    
    Raft 协议: Raft 协议本身具有分区容忍性,即使在网络分区的情况下,Consul 仍然能够保持一致性。
    
    • 1
    • 2
    • 3

    总体而言,Consul 在 CAP 方面的实现是一致性和可用性的权衡,通过使用 Raft 协议等技术实现了强一致性,并提供了多数据中心支持以增强可用性。在网络分区的情况下,Consul 通过分布式架构和一致性协议来维持系统的正常运行。需要注意的是,当发生网络分区时,可能会导致一些节点无法通信,但 Consul 会根据 Raft 协议维护尽可能多的一致性。

    以下是 Consul 的主要功能:

    服务发现: Consul 允许服务在注册时提供元数据,并使用 DNS 或 HTTP 接口进行服务发现。这使得服务能够在分布式环境中自动发现彼此。

    健康检查: Consul 支持对服务进行健康检查,通过定期的心跳检查服务的健康状态,并在服务出现故障时将其标记为不可用。这有助于确保只有健康的服务被路由到。

    分布式 KV 存储: Consul 提供了一个分布式键值存储(Key-Value Store),用于存储配置信息、控制开关等。这使得配置管理变得更加容易。

    多数据中心: Consul 具有跨多个数据中心的支持,允许在全球范围内构建具有高可用性和弹性的系统。

    事件: Consul 支持事件系统,允许应用程序对服务注册、健康状态变化等事件进行监听,从而执行相应的操作。

    Consul 优点:

    简单易用: Consul 提供简洁而直观的用户界面,容易上手。它的设计目标之一是提供一个易于使用的服务发现和配置管理工具。

    多功能性: Consul 不仅提供服务发现,还包括健康检查、配置中心和分布式锁等功能。这使得它成为构建和管理分布式系统的全面解决方案。

    灵活性: Consul 提供了多种配置选项和部署模式,可以根据特定需求进行灵活配置和定制。

    多数据中心支持: 对于需要在多个数据中心部署的大规模系统,Consul 提供了良好的支持,使得服务发现和管理更为简便。

    活跃社区和支持: 由于是由 HashiCorp 公司维护的开源项目,Consul 拥有一个活跃的社区,提供了广泛的文档和支持。

    Consul 缺点:

    Java 客户端相对不完善: 在 Java 生态系统中,Consul 的客户端相对较新,相比其他语言的客户端可能有一些不足之处。

    学习曲线: 尽管 Consul 设计简单,但在一些复杂的场景中,使用所有功能可能需要一些时间来学习。

    资源占用: Consul 的一些功能可能占用较多的系统资源,特别是对于较小的部署场景来说,可能会显得过于重量级。

    1 Docker 拉取 Consul 镜像

    docker pull consul
    
    • 1

    2 Docker 创建 Consul 容器

    docker run -d -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600 --restart=always --name=consul consul:latest agent -server -bootstrap -ui -node=1 -client='0.0.0.0'
    
    • 1
    端口作用
    8300TCP协议,用于Consul集群中各个节点相互连结通信的端口。
    8301TCP或者UDP协议,用于Consul节点之间相互使用Gossip协议健康检查等交互。
    8302TCP或者UDP协议,用于单个或多个数据中心之间的服务器节点的信息同步。
    8500HTTP协议,用于API接口或者我们上述的网页管理界面访问。
    8600TCP或者UDP协议,作为DNS服务器,用于通过节点名查询节点信息。
    参数作用
    agent表示启动一个Agent进程。
    -server表示该节点类型为Server节点(下面会讲解集群中的节点类型)
    -ui开启网页可视化管理界面。
    -node指定该节点名称,注意每个节点的名称必须唯一不能重复!上面指定了第一台服务器节点的名称为n1,那么别的节点就得用其它名称。
    -bootstrap-expect最少集群的Server节点数量,少于这个值则集群失效,这个选项必须指定,由于这里是单机部署,因此设定为1即可。
    -advertise这里要指定本节点外网地址,用于在集群时告诉其它节点自己的地址,如果是在自己电脑上或者是内网搭建单节点/集群则不需要带上这个参数。
    -client指定可以外部连接的地址,0.0.0.0表示外网全部可以连接。
    –restart=alwaysDocker启动的时候自动启动。

    3 启动 Consul 容器

    在这里插入图片描述在这里插入图片描述

  • 相关阅读:
    Java项目:20 基于SSM实现的支教管理系统
    Reka Core, Flash, and Edge: A Series of Powerful Multimodal Language Models
    Java设计模式之软件设计七大原则
    将表情存入数据库
    基于 HPSO 与多核 LSSVM 的网络入侵检测
    机器学习常识:初学者应该知道的10 大机器学习算法
    3D视觉基础整理 (一)
    Maven-依赖管理机制
    Java中如何通过路径表达式找值:XPath和JsonPath以及SpEL详解及对比
    函数指针知识点记录
  • 原文地址:https://blog.csdn.net/qq_34814092/article/details/134534108