【服务发现与配置】Consul特性及搭建

文章目录

  • 一、前言
  • 二、概念
    • 2.1、什么是Consul?
    • 2.2、Consul具有哪些特点?
    • 2.3、Consul 架构图
    • 2.4、Consul的使用场景
  • 三、安装
    • 3.1. 下载
    • 3.2. 解压
    • 3.3. 拷贝到usr目录下
    • 3.4. 查看 安装是否成功
    • 3.5. 启动
  • 四、Consul 开机自启动
    • 4.1. 路径/usr/lib/systemd/system/,新建一个service命名为,consul.service
    • 4.2. 创建启动脚本
    • 4.3. 重新加载配置
    • 4.4. 设置开机自启动

一、前言

虽然说牛逼的公司都有那么几个牛逼的运维团队,牛逼的运维团队都有着神秘黑科技般敲代码的姿势;本人虽然不是一个运维工程师,但是有幸自己比较爱倒腾这些东西,也会那么一点点运维知识,虽然不算专业,但是还是可以在linux平台下敲一敲代码。去年由于自己业余时间搞了一个app项目,当时自己兼任后端开发,又同时兼任运维,经过多少个夜晚才把后端API网关 搭建起来,当时技术选型主要使用微服务架构,说到微服务架构,也就少不了分布式集群,那就更少不了Consul 。
今天搭建Consul 服务也是为了自己后面的学习和分享使用(之前在生产环境搭建过,本来可以直接拿来用,只是后面应用停掉了,服务器也就下掉了),故特意把前几天阿里云活动价买的服务器用起来,准备再次搭建Consul服务,以供后续方便拿来即用。

二、概念

2.1、什么是Consul?

Consul是HashiCorp公司推出的开源工具,Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点。Consul是分布式的、高可用的、 可横向扩展的用于实现分布式系统的服务发现与配置。

2.2、Consul具有哪些特点?

  • 服务发现(Service Discovery):Consul提供了通过DNS或者HTTP接口的方式来注册服务和发现服务。一些外部的服务通过Consul很容易的找到它所依赖的服务。
  • 健康检查(Health Checking):Consul的Client可以提供任意数量的健康检查,既可以与给定的服务相关联(“webserver是否返回200 OK”),也可以与本地节点相关联(“内存利用率是否低于90%”)。操作员可以使用这些信息来监视集群的健康状况,服务发现组件可以使用这些信息将流量从不健康的主机路由出去。
  • Key/Value存储:应用程序可以根据自己的需要使用Consul提供的Key/Value存储。 Consul提供了简单易用的HTTP接口,结合其他工具可以实现动态配置、功能标记、领袖选举等等功能。
  • 安全服务通信:Consul可以为服务生成和分发TLS证书,以建立相互的TLS连接。意图可用于定义允许哪些服务通信。服务分割可以很容易地进行管理,其目的是可以实时更改的,而不是使用复杂的网络拓扑和静态防火墙规则。
  • 多数据中心:Consul支持开箱即用的多数据中心. 这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。

2.3、Consul 架构图

在这里插入图片描述

让我们把这幅图分解描述。首先,我们可以看到有两个数据中心,分别标记为“1”和“2”。Consul拥有对多个数据中心的一流支持,这是比较常见的情况。

在每个数据中心中,我们都有客户机和服务器。预计将有三到五台服务器。这在故障情况下的可用性和性能之间取得了平衡,因为随着添加更多的机器,一致性会逐渐变慢。但是,客户端的数量没有限制,可以很容易地扩展到数千或数万。

Consul 实现多个数据中心都依赖于gossip protocol协议。这样做有几个目的:首先,不需要使用服务器的地址来配置客户端;服务发现是自动完成的。其次,健康检查故障的工作不是放在服务器上,而是分布式的。这使得故障检测比单纯的心跳模式更具可伸缩性。为节点提供故障检测;如果无法访问代理,则节点可能经历了故障。

每个数据中心中的服务器都是一个筏对等集的一部分。这意味着它们一起工作来选举单个leader,一个被选中的服务器有额外的职责。领导负责处理所有的查询和事务。事务还必须作为协商一致协议的一部分复制到所有对等方。由于这个需求,当非leader服务器接收到RPC请求时,它会将其转发给集群leader。

2.4、Consul的使用场景

Consul的应用场景包括服务发现、服务隔离、服务配置:

  • 服务发现场景中consul作为注册中心,服务地址被注册到consul中以后,可以使用consul提供的dns、http接口查询,consul支持health check。
  • 服务隔离场景中consul支持以服务为单位设置访问策略,能同时支持经典的平台和新兴的平台,支持tls证书分发,service-to-service加密。
  • 服务配置场景中consul提供key-value数据存储功能,并且能将变动迅速地通知出去,借助Consul可以实现配置共享,需要读取配置的服务可以从Consul中读取到准确的配置信息。
  • Consul可以帮助系统管理者更清晰的了解复杂系统内部的系统架构,运维人员可以将Consul看成一种监控软件,也可以看成一种资产(资源)管理系统。
    比如:docker实例的注册与配置共享、coreos实例的注册与配置共享、vitess集群、SaaS应用的配置共享、Consul与confd服务集成,动态生成nginx和haproxy配置文件或者Consul结合nginx构建高可用可扩展的Web服务。

三、安装

我这里直接安装Consul 最新版本 1.7.2 官网地址:https://www.consul.io/

3.1. 下载

我这里进入我的用户目录 /home下面进行下载consul安装压缩包,命令如下:

wget https://releases.hashicorp.com/consul/1.7.2/consul_1.7.2_linux_amd64.zip

下载如下图:
在这里插入图片描述

下载完我们通过 ls -a 查看下目录,如下图:

在这里插入图片描述

3.2. 解压

unzip  consul_1.7.2_linux_amd64.zip

3.3. 拷贝到usr目录下

我这里事先在usr目录中单独创建了service 文件,可以通过mkdir 命令来完成,不过不一定要安装在这个目录下面,我这里就选择安装在usr目录里

mv consul /usr/service

3.4. 查看 安装是否成功

./consul

查看如下图:
在这里插入图片描述

已经安装完成了,
现在我们开始启动

3.5. 启动

这是最关键的时候,安装就是为了启动
这里我整理了下启动的相关参数如下:

-server 表示是server模式
  -bootstrap-expect=3 表示是集群中有3台服务器 bootstrap该模式node可以指定自己作为leader ,如果是非leader可不加该参数
  -data-dir=/tmp/consul 目录
  -node=n2 该服务器节点名
  -bind=127.0.0.1 节点绑定的ip
  -ui 非必须 webui的路径 用web来管理consul

启动命令如下(默认是8500端口):

./consul agent -server -bootstrap-expect 1 -data-dir=/tmp/consul -node=n1 -bind=127.0.0.1 -client=0.0.0.0 -ui

启动后结果如下:
在这里插入图片描述
现在我再来访问Consul UI管理界面,如下图:

在这里插入图片描述

现在Consul 已经完整的启动成功了,Demo 注册到Consul 中来,看看是否正常注册,如下图:
在这里插入图片描述

好了,正常的注册进来了,完美,现在已经搭建完成了

四、Consul 开机自启动

4.1. 路径/usr/lib/systemd/system/,新建一个service命名为,consul.service

[Unit]
Description=consul-service

After=network.target

[Service]
Type=forking
PIDFile=/run/consul-service.pid
ExecStart=/usr/service/consul.start.sh
ExecReload=/bin/kill -SIGHUP $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
    
[Install]
WantedBy=multi-user.target graphical.target

上面的ExecStart 是启动的脚本,我之前把consul 是安装在/user/service 下面,

4.2. 创建启动脚本

我们再service 目录中创建Consul开机自启动的脚本文件consul.start.sh

#!/bin/bash
/usr/service/consul agent -server  -bootstrap-expect 1 -node=127.0.0.1 -data-dir=/usr/service/data/  -log-file=/usr/service/log/consul_log-$(date +%Y-%m-%d--%H-%M) -bind=127.0.0.1

4.3. 重新加载配置

 systemctl daemon-reload

4.4. 设置开机自启动

systemctl enable consul.service

Consul 启动

systemctl start consul

Consul 停止

systemctl stop consul

上面创建开机自启动脚本实践的时候大家可能会发现 通过systemctl start consul 无法启动问题,这时候可以通过status 来查询状态,命令如下

systemctl status consul

查询创建的自启动脚本执行过程中出现code=exited, status=203/EXEC异常错误信息,这个信息一般有如下几个原因造成:

  • 错误的脚本路径
  • 脚本的权限无效
  • 服务用户没有读取脚本的权限
  • 脚本未标记为可执行
  • 根据上面三种情况去排查解决,基本上就可以完美解决自启动脚本无法启动问题

结束语:这里Consul 介绍及安装搭建已经完成,Consul也可以搭建集群,大家可以去尝试自己搭建,比较简单,后续我会陆续把使用到的各种工具服务搭建起来,以方便后续的文章实战分享和学习,不过大佬就可以直接跳过…

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Qt之QMetaType】使用

介绍 QMetaType类管理元对象系统中的命名类型。 该类用作QVariant和排队的信号与槽连接中类型的编组辅助器。它将类型名称与类型关联起来,以便可以在运行时动态创建和销毁它。使用Q_DECLARE_METATYPE()声明新类型,以使它们可供QVariant和其他基于模板的…

三菱FX3U系列—原点回归指令

目录 一、简介 二、指令形式 1、原点指令[ZRN/DZRN] 2、带搜索的原点回归指令[DSZR] 三、回归指令运行过程 1、ZRN原点回归运行过程 2、带搜索的原点回归运行过程 四、特殊辅助继电器 五、特殊输出模块 六、总结 一、简介 用于将电机或伺服驱动器控制的轴回到预定的原…

浙江大学漏洞报送证书

获取来源:edusrc(教育漏洞报告平台) url:主页 | 教育漏洞报告平台 兑换价格:20金币 获取条件:提交浙江大学任意中危或以上级别漏洞

socks5代理和https代理有什么不同?各自有哪些优点?

socks5代理和https代理是两种不同的代理服务,它们在实现方式、安全性和协议特点等方面存在差异。下面我们来详细了解一下这两种代理的优点。 一、socks5代理的优点 1. 速度快 socks5代理采用了TCP协议,能够有效地减少网络延迟和数据传输速度慢的问题&…

Ubuntu22.04下挂载共享文件夹

1.在自己Windows任意地方建一个文件夹 2.打开虚拟机做如下配置 3.开启虚拟机,打开终端 4.输入:vmware-hgfsclient 看到物理机共享文件夹 5.输入:sudo mkdir /mnt/hgfs 创建虚拟机中的共享文件夹 6.输入:sudo vmhgfs-fuse .h…

离散数学第一章知识点复习

命题:陈述句 真值已经确定 原子命题(简单命题):不能被分解为更简单的命题 命题化的时候的解题步骤: 1. 先给出原子命题 2. 符号化 注意蕴含式:记作 p -> q ,p是前件,q 是后…

软件版本控制系统VCS工具——cvs vss svn git

版本控制 版本控制系统(Version Control System,VCS)是用于跟踪和管理源代码和文档的工具。可追踪和管理修改历史,包括修改的内容、时间、作者等信息。有助于团队协作、追踪变更、恢复历史版本等。VCS的主要目的是帮助团队协作开…

如何写一篇吊炸天的竞品分析

这段时间,除了撩妹之外,最多的就是竞品分析了。最近很多临近毕业的同学也在四处应聘产品岗,而一份不错的竞品分析一定能为你的求职加分不少。于是,有着菩萨心肠天使面孔魔鬼身材的我,就来教大家怎么做一份完整的竞品分…

什么是代理IP池?真实测评IP代理商的IP池是否真实?

代理池充当多个代理服务器的存储库,提供在线安全和匿名层。代理池允许用户抓取数据、访问受限制的内容以及执行其他在线任务,而无需担心被检测或阻止的风险。代理池为各种在线活动(例如网页抓取、安全浏览等)提高后勤保障。 读完…

【Bug】Python利用matplotlib绘图无法显示中文解决办法

一,问题描述 当利用matplotlib进行图形绘制时,图表标题,坐标轴,标签中文无法显示,显示为方框,并报错 运行窗口报错: 这是中文字体格式未导入的缘故。 二,解决方案 在代码import部…

将 Figma 轻松转换为 Sketch 的免费方法

最近浏览网站的时候,发现很多人不知道Figma是怎么转Sketch的。众所周知,Figma支持Sketch文件的导入,但不支持Sketch的导出,那么Figma是如何转Sketch的呢?不用担心,建议使用神器即时设计。它是一个可以实现在…

systemctl enable docker.service报错“Failed to execute operation: Bad message“

将docker加入到开机自启,报错: 解决: 重新粘贴复制: [Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service Wantsnetwork-online.target…

在现实生活中传感器GV-H130/GV-21的使用

今天,收获了传感器GV-H130/GV-21,调试探头的用法,下面就来看看吧!如有不妥欢迎指正!!!! 目录 传感器GV-H130/GV-21外观 传感器调试探头 探头与必要准备工作 传感器数值更改调试 …

Fabric: 使用InvokeChaincode实现跨通道数据访问

因为工作中遇到一些问题考虑使用Fabric的跨通道链码调用方法InvokeChaincode()来解决,这篇文章主要是记录以下在Fabric测试网络中InvokeChaincode()的使用过程及遇到的问题。 1 前期准备 1.1 认识InvokeChaincode InvokeChaincode的作用是调用指定的链码。而被调用…

pytoch安装指定版本教程pytorch1.3安装笔记

一、先生成一个环境 如果电脑里安装了其他的torch版本,另外生成一个环境可以防止原先torch版本被替换掉。 打开conda的终端窗口输入以下命令就可以生成一个名为torch_1.3的环境: conda create -n torch_1.3 python3.6 输入以下命令进入到torch_1.3的…

基于springboot实现致远汽车租赁平台管理系统项目【项目源码+论文说明】

基于springboot实现致远汽车租赁平台系统演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要…

linux下实现电脑开机后软件自启动

实现linux的软件自启动,需要四个文件 第一个【displayScreen.desktop】文件,.desktop文件就是一个用来运行程序的快捷方式,也叫启动器,常用来自启动用的文件,内容如下 [Desktop Entry] #要执行的脚本位置 Exec/home/yicaobao/te…

后入能先出,一文搞懂栈

目录 什么是栈数组实现链表实现栈能这么玩总结 什么是栈 栈在我们日常编码中遇到的非常多,很多人对栈的接触可能仅仅局限在 递归使用的栈 和 StackOverflowException,栈是一种后进先出的数据结构(可以想象生化金字塔的牢房和生化角斗场的狗洞)。 栈&…

欧科云链:成本与规模之辨——合规科技如何赋能香港Web3生态?

作为国际金融中心,香港近两年来在虚拟资产及Web3领域频频发力。秉持着“稳步创新”的基本逻辑,香港在虚拟资产与Web3领域已建立一定优势,但近期各类风险事件的发生则让业界的关注焦点再次转向“安全”与“合规”。 在香港FinTech Week前夕&a…

强力解决使用node版本管理工具 NVM 出现的问题(找不到 node,或者找不到 npm)

强力解决使用node版本管理工具 NVM 出现的问题(找不到 node,或者找不到 npm) node与npm版本对应关系 nvm是好用的Nodejs版本管理工具, 通过它可以方便地在本地调换Node版本。 2020-05-28 Node当前长期稳定版12.17.0,…