Docker 单节点部署 Consul

Docker 单节点部署Consul

  • 1 Docker 拉取 Consul 镜像
  • 2 Docker 创建 Consul 容器
  • 3 启动 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 提供强一致性,这意味着在进行读操作时,所有节点都能够返回相同的数据。

可用性(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 容器

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/157660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数独·12中解法·anroid 数独小游戏·休闲益智小游戏

标题数独12中解法anroid 数独小游戏休闲益智小游戏(继续更新中……) 一款经典数独训练app 资源下载 (0积分)https://download.csdn.net/download/qq_38355313/88544810 —— —— 数独(sh d)是源自18世纪…

ESP32网络开发实例-Web服务器显示图片

Web服务器显示图片 文章目录 Web服务器显示图片1、软件准备2、硬件准备3、代码实现3.1 在Web页面中嵌入图像链接3.2 在SPIFFS文件系统中储存图像 在本文中,将介绍在ESP32单片机中如何构建 Web 服务器以显示格式为 .png 或 .jpg 的图像。在示例中,我们将构…

【C++】泛型编程 ⑪ ( 类模板的运算符重载 - 函数实现 写在类外部的不同的 .h 头文件和 .cpp 代码中 )

文章目录 一、类模板的运算符重载 - 函数实现 写在类外部的不同的 .h 头文件和 .cpp 代码中1、分离代码 后的 友元函数报错信息 - 错误示例Student.h 头文件内容Student.cpp 代码文件内容Test.cpp 代码文件内容执行报错信息 2、问题分析 二、代码示例 - 函数实现 写在类外部的不…

docker小技能:部署mysql

文章目录 引言I Docker安装MySQL1.1 安装mysql1.2 配置容器自动重启参数1.3 查看版本II 配置MySQL2.1 设置为开机自启动2.2 执行MySQL安全性操作并设置密码2.3 配置文件2.4 创建数据库用户dmsTest,并授予远程连接权限。2.5 用户相关命令III 用户权限3.1 权限层级3.2 权限分类3.…

python运行hhsearch二进制命令的包装器类

hhsearch 是 HMM-HMM(Hidden Markov Model to Hidden Markov Model)比对方法的一部分,属于 HMMER 软件套件。它用于进行蛋白质序列的高效比对,特别适用于检测远缘同源性。 以下是 hhsearch 的一些主要特点和用途: HMM…

vue2.0中使用v-if/v-show切换后echarts不显示和宽高问题

vue2.0中使用v-if/v-show切换后echarts不显示和宽高问题 需求描述问题描述问题解析 解决方案使用v-show替代(不推荐)v-if使用$nextTick(推荐) 需求描述 使用ehcarts时,请求数据时加loading,请求结束后取消loading并显示…

redis之高可用

(一)redis之高可用 1、在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365天)99.9% 2、redis的高可用的含义更加广泛,正常服务是指标之一,数据容量的扩展、数据的安全性 3、在r…

项目架构的发展

项目架构的发展 1. 单体架构 单体架构指的是将整个应用程序构建为单一的、独立的单元。在软件开发中,单体架构通常指的是将一个应用程序作为一个整体来开发、部署和管理,所有的功能模块都打包在一起,共享同一个数据库和代码库。 在单体架构…

存储日志数据并满足安全要求

日志数据是包含有关网络中发生的事件的记录的重要信息,日志数据对于监控网络和了解网络活动、用户操作及其动机至关重要。 由于网络中的每个设备都会生成日志,因此收集的数据量巨大,管理和存储所有这些数据成为一项挑战,日志归档…

python基本语法

基本的 Python 语法: 变量和数据类型: # 定义变量 x 5# 不需要显式声明数据类型,Python 会自动推断 name "John"# 常见的数据类型包括整数、浮点数、字符串、列表、字典等 my_list [1, 2, 3] my_dict {key: value}条件语句&…

【C语言】数据结构——栈和队列实例探究

💗个人主页💗 ⭐个人专栏——数据结构学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读:一、 栈1. 栈的概念及结构2. 栈的实现3. 实现代码3.1 定义结构体3.2 初始化栈3.3 销毁栈3.4 入栈3.5 出栈…

【Java 进阶篇】深入理解 Jackson:Java 对象转 JSON 的艺术

嗨,亲爱的小白们!欢迎来到这篇关于 Jackson JSON 解析器中 Java 对象转 JSON 的详细解析指南。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,而 Jackson 作为一个强大的 JSON 解析库,能够帮…

贪心:leetcode2216 美化数组的最少删除数

2216. 美化数组的最少删除数 给你一个下标从 0 开始的整数数组 nums ,如果满足下述条件,则认为数组 nums 是一个 美丽数组 : nums.length 为偶数对所有满足 i % 2 0 的下标 i ,nums[i] ! nums[i 1] 均成立 注意,空…

Unity PlayerPrefs相关应用

PlayerPrefs是Unity游戏引擎中的一个类,用于在游戏中存储和访问玩家的偏好设置和数据。它可以用来保存玩家的游戏进度、设置选项、最高分数等信息。PlayerPrefs将数据存储在本地文件中,因此可以在游戏重新启动时保持数据的持久性。 //PlayerPrefs的数据…

基于SVM的车牌识别算法

基于SVM的车牌识别系统(Python代码实现) 车牌识别系统是智能交通系统的重要组成部分,有着广泛的应用。车牌识别系统主要有车牌定位、字符分割和字符识别三部分组成,本文的研究重点是车牌字符识别这部分,本文提出了一种…

RT-Thread Hoist_Motor PID

本节介绍的是一个举升电机,顾名思义,通过转轴控制物体升降,为双通道磁性译码器,利用电调进行操控,具体驱动类似于大学期间最大众的SG180舵机,在一定的频率下,通过调制脉宽进行控制。 设备介绍…

数据结构 图

树是无环连通图,是一种特殊的图。 分类 图分为有向图[边是有方向的]和无向图[边是无方向的]。 无向图(a—b),建立两条有向图(a—>b,b—>a),无向图是一种特殊的有向图。 存储有向图 邻接矩阵 ——用于存储比较稠密的图【…

MyBatis的xml实现

1.下载插件MyBatisX 2.添加依赖 <!--Mybatis 依赖包--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.1</version></dependency><!--…

Rust错误处理机制:优雅地管理错误

大家好&#xff01;我是lincyang。 今天&#xff0c;我们要探讨的是Rust语言中的错误处理机制。 Rust作为一种系统编程语言&#xff0c;对错误处理的重视程度是非常高的。它提供了一套既安全又灵活的机制来处理可能出现的错误。 Rust错误处理的两大类别 在Rust中&#xff0…

Pandas-pd.to_numeric函数知识点总结

前言 本文是该专栏的第38篇,后面会持续分享python数据分析的干货知识,记得关注。 我们在处理数据分析项目的时候,通常会需要处理各种类型的数据,比如说“时间日期,字符串,布尔值”等等类型。有的时候,恰巧需要用Pandas将这些数据转换为数值类型,以便于后期进行统计或计…