5分钟看懂微服务架构下的Consul 特性及搭建

一、前言

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

二、概念

什么是Consul?

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

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支持开箱即用的多数据中心. 这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。

Consul 架构图

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

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

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

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

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/

1. 下载

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

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

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

2. 解压

unzip  consul_1.7.2_linux_amd64.zip

3. 拷贝到usr目录下

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

mv consul /usr/service

4. 查看 安装是否成功

./consul

查看如下图:已经安装完成了, 现在我们开始启动

5. 启动

这是最关键的时候,安装就是为了启动 这里我整理了下启动的相关参数如下:参数参考 可以访问 https://www.cnblogs.com/sunsky303/p/9209024.html 地址,我这里就简单的通过使用到的参数进行启动

-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 已经完整的启动成功了,启动成功是不是想要来试一试,我这里直接使用我之前写的一篇【.net core】电商平台升级之微服务架构应用实战(core-grpc) 文章中写的Demo 注册到Consul 中来,看看是否正常注册,如下图:好了,正常的注册进来了,完美,现在已经搭建完成了

Consul 开机自启动

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

[Unit]
Description=consul-serviceAfter=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 下面,

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

3. 重新加载配置

 systemctl daemon-reload

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也可以搭建集群,大家可以去尝试自己搭建,比较简单,后续我会陆续把使用到的各种工具服务搭建起来,以方便后续的文章实战分享和学习,不过大佬就可以直接跳过...

Consul 参考资料:

1.可以参考Consul的官方网站和其他网站上提供的信息。本文列举一些可用参考的资源如下:2.Consul官方网站 https://www.consul.io/ 3.Consul Github地址 https://github.com/hashicorp/consul 4.Consul-template Github地址 https://github.com/hashicorp/consul-template 5.Consul官方介绍 https://www.consul.io/intro/index.html 6.Consul 系统架构 https://www.consul.io/docs/internals/architecture.html 7.Consul与其他开源软件或解决方案的对比 https://www.consul.io/intro/vs/ 8.Dubbo用户指南 http://dubbo.io/Home-zh.htm 通过此指南可以了解Dubbo是什么,能做什么 9.借助 Consul 和 Docker 支持即插即用的服务发现 (service discovery) http://www.ibm.com/developerworks/cn/cloud/library/cl-plug-and-play-service-discovery-with-consul-and-docker-bluemix/ 10.使用Terraform与Consul自动化现代数据中心 http://www.infoq.com/cn/news/2015/05/hashimoto-modern-datacenter 11.基於swarm+consul+nginx達到HA和auto scaling的架構 http://genchilu-blog.logdown.com/posts/317095-based-on-swarm-and-consul-ha-and-dynamically-extensible-architectures 12.使用Docker、Registrator、Consul、Consul Template和Nginx实现高可扩展的Web框架 http://dockone.io/article/272 13.Consul多数据中心配置 https://www.consul.io/docs/guides/datacenters.html

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

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

相关文章

win7 计算机定时关机脚本,win7定时关机设置及命令

电脑定时关机是一个常用的功能,定时关机的小软件也有不少,但 Win7 也为我们提供了定时关机的功能,额外下载软件不如就地取材。win7定时关机可通过两种方式实现,一种是创建计划任务,另一种是用win7定时关机命令 shutdow…

ASP.NET Core分布式项目实战(客户端集成IdentityServer)--学习笔记

任务9:客户端集成IdentityServer新建 API 项目dotnet new webapi --name ClientCredentialApi控制器添加验证using Microsoft.AspNetCore.Authorization;namespace ClientCredentialApi.Controllers {[ApiController][Route("[controller]")][Authorize]p…

C++ class实现顺序栈(完整代码)

代码如下: #include <iostream> using namespace std; typedef int ElemType;class SeqStack {public:SeqStack(int stacksize 100) {base new ElemType[stacksize];top base;size stacksize;};~SeqStack() {delete[] base;top NULL;base NULL;};int Empty_Stack(…

EF Core 数据变更自动审计设计

EF Core 数据变更自动审计设计Intro有的时候我们需要知道每个数据表的变更记录以便做一些数据审计&#xff0c;数据恢复以及数据同步等之类的事情&#xff0c; EF 自带了对象追踪&#xff0c;使得我们可以很方便的做一些审计工作&#xff0c;每次变更发生了什么变化都变得很清晰…

C++ class实现链栈(完整代码)

代码如下: #include <iostream> using namespace std; typedef int ElemType;class StackNode {friend class LinkStack;private:ElemType data;StackNode *next;StackNode(): next(NULL) {}; };class LinkStack {public:LinkStack(): top(NULL) {};~LinkStack() {Stack…

海外服务器维护,海外服务器运行不正常的原因是什么?

要开开展海外贸易业务&#xff0c;您需要选择一个由于客户操作错误&#xff0c;服务器无法正常工作。实际上&#xff0c;在使用服务器时&#xff0c;许多小型企业客户不需要定期维护服务器&#xff0c;只需要建立一个对服务器技能有一点了解的人&#xff0c;而他们需要运行服务…

使用Docker-Compose搭建高可用redis哨兵集群

头脑风暴出于学习目的&#xff0c;您可以很轻松地在docker环境下运行redis的单个实例&#xff0c;但是如果您需要在生产环境中运行它&#xff0c;那么必须将Redis部署为HA(High Avaliable)模式。Redis Sentinel为Redis提供高可用性&#xff0c;这意味着使用Sentinel可以创建Red…

C++ class实现顺序队列(完整代码)

代码如下: #include <iostream> using namespace std; typedef int ElemType;class SeqQueue {public:SeqQueue(int Queuesize 100) {base new ElemType[Queuesize];front 0;rear 0;size Queuesize;};~SeqQueue() {delete[] base;};int Empty_Queue();int En_Queue…

es文件创建局域网服务器,大神来教你XBMC和ES文件浏览器局域网共享

回复可见&#xff0c;谢谢支持~首先电脑要设置&#xff0c;记住电脑的IP地址后面添加局域网用的cd4318d0f703918f9002dcbf523d269758eec45d.jpg (59.67 KB, 下载次数: 7)2014-10-11 10:26 上传ccb48d03918fa0ec39148578259759ee3c6ddb5d.jpg (45.07 KB, 下载次数: 7)2014-10-11…

【实战 Ids4】║ 认证中心之内部加权

本期配套视频&#xff1a;https://www.bilibili.com/video/BV1sJ41197af?p9&#xff08;昔我往矣&#xff0c;杨柳依依&#xff0c;今我来思&#xff0c;雨雪霏霏&#xff09;1、为什么需要在认证内部加权我们知道&#xff0c;认证中心的作用就是用来保护我们的资源服务器&…

C++ class实现链队列(完整代码)

代码如下: #include <iostream> using namespace std; typedef int ElemType;class QueueNode {friend class LinkQueue;public:QueueNode(): next(NULL) {};private:ElemType data;QueueNode *next; };class LinkQueue {public:LinkQueue(): front(NULL), rear(NULL) {…

CDN加速小水管动态应用技巧

不得不说现在大陆和HK的云主机都是小水管模式&#xff0c;由于硬件的快速发展在这种小水管的情况下很难发挥出用户硬件资源的能力&#xff0c;当然可以加水管但费用很高&#xff0c;更多时候会浪费带宽&#xff1b;这个时候我们想到CDN加速&#xff0c;这种资源的好处就是可以把…

C++ class实现二叉树(完整代码,附非递归遍历)

代码如下: #include <iostream> #include <stack> #include <queue> using namespace std; typedef char ElemType; int InOrder_count 0;class BinTreeNode {friend class BinaryTree;public:BinTreeNode(): lchild(NULL), rchild(NULL) {};private:ElemT…

服务器水冷系统仿真,水冷漫谈(三)——水冷散热器仿真方法

水冷散热器的精细化设计是需要借助仿真软件的。目前可以完成水冷仿真的商业软件有很多种&#xff0c;各有优势&#xff0c;在此不做对比。Jason用的是FloTHERM&#xff0c;但是主要的分析方法是一致的。不同于风冷的系统&#xff0c;水冷整个系统比较庞大和复杂。工程中一般不会…

在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度

在这篇文章中&#xff0c;我将介绍如何使用ASP.NET Core托管服务运行Quartz.NET作业。这样的好处是我们可以在应用程序启动和停止时很方便的来控制我们的Job的运行状态。接下来我将演示如何创建一个简单的 IJob&#xff0c;一个自定义的 IJobFactory和一个在应用程序运行时就开…

分享一些支持多租户的开源框架

如果你在开发sass应用程序&#xff0c;可以参考或者直接使用这些开源的框架。ASP.NET Boilerplate — Web应用程序框架ASP.NET Boilerplate是专门为新的现代Web应用程序设计的通用应用程序框架。它使用已经熟悉的工具并围绕它们实施最佳实践&#xff0c;以为您提供SOLID开发经验…

服务器操作系统用什么好,服务器操作系统一般用什么

服务器操作系统一般用什么 内容精选换一换客户的SAP系统部署在第三方云&#xff0c;服务器操作系统在华为云支持的列表内&#xff0c;数据库为任意数据库&#xff0c;同时还有如对象存储等的其他云服务。迁移到华为云后&#xff0c;数据库以及操作系统保持不变&#xff0c;系统…

一张大图了解ASP.NET Core 3.1 中的Authentication与Authorization

下面是一张ASP.NET Core 3.1 中关于Authentication与Authorization的主流程框线图&#xff0c;点击这里查看全图&#xff1a;https://johnnyqian.net/images/202004/aspnet-core-3.1-request-processing-pipeline.png重要组件一些重要的组件及其源码链接如下&#xff1a;Authen…

C++ class实现完全二叉树的顺序存储结构

代码如下: #include <iostream> using namespace std; const int maxsize 100; typedef char ElemType;class QbTree {public:void CreateBTree(int n);int vislchild(int i);int visrchild(int i);int visparent(int i);ElemType viselem(int i);void LevelOrder();p…

研发协同平台持续集成Jenkins作业设计演进

源宝导读&#xff1a;Jenkins作为一个开源的持续集成工具&#xff0c;被大家广泛使用。本文将分享&#xff0c;Jenkins在明源云研发协同平台中的运用&#xff0c;以及在其作业设计方面的演进历程。一、作业设计1.0起初&#xff0c;为了尽快推出研发协同平台v1.0&#xff0c;我们…