Docker 单节点部署 Consul

2023-12-13 07:50:56

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 提供强一致性,这意味着在进行读操作时,所有节点都能够返回相同的数据。

可用性(Availability)

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

健康检查: Consul 允许服务注册和进行健康检查,当服务出现故障时,Consul 能够将其标记为不可用。这有助于确保只有健康的服务被路由到,提高系统的可用性。

服务发现: 通过 Consul 的服务发现功能,应用程序能够自动发现和调用其他服务,提高了整个系统的可用性。

分区容忍性(Partition Tolerance)

分布式架构: Consul 的设计考虑了分布式系统的特性,它可以在面临网络分区的情况下继续运行。

Raft 协议: Raft 协议本身具有分区容忍性,即使在网络分区的情况下,Consul 仍然能够保持一致性。

总体而言,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

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'
端口作用
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 容器

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

文章来源:https://blog.csdn.net/qq_34814092/article/details/134534108
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。