1.Consul 简介和环境搭建

1.什么是 Consul

Consul 是 service mesh(服务网格)的一个解决方案,它提供了诸如服务发现,配置和隔离等功能的一整套控制平面(control plane)。开发人员可以根据需要单独使用这些功能点,也可以将他们整合成为一个完整的service mesh。Consul 需要一个数据平面(data plane),并支持代理和本地集成模型。Consul 自带了一个简单的代理以实现开箱即用的功能,不过它也支持集成第三方代理框架,比如Envoy。
Consul 的核心功能如下:

    • 服务发现: Consul 客户端可以注册一个服务,比如 api 接口或者 mysql 服务,其他的客户端可以通过 Consul 来发现这些服务的提供方。通过 DNS 或者 HTTP,引用可以很方便地找到它所依赖的服务。
    • 健康检查: Consul 客户端可以提供任意数量的健康检查,无论是特定服务(服务是否返回200状态)还是本地节点(比如内存使用率是否大于90%)。运维人员可以通过这些信息管理集群的健康情况,服务发现组件也可以使用这些信息过滤掉不健康节点。
    • KV 存储: 应用可以使用 Consul 的树状 key/value 存储做很多事情,比如动态配置,开关,协作,leader 选举等等。KV 存储使用的是 HTTP 接口,非常简单易用。
    • 服务通信加密: Consul 可以生成并分发 TLS 证书给服务,从而保证服务之间使用 TLS 通信。我们可以使用 intentions 组件来自定义允许哪些服务访问。使用 intentions 可以实时地操作服务隔离,这比使用复杂的网络拓扑和静态防火墙规则要简单很多。
    • 多数据中心 Consul 支持开箱即用的多数据中心功能。这意味着当工作区域扩展至多个的时候,用户不需要费心去创建额外的抽象层来满足多中心需求。
      Consul 设计时就考虑到了对 DevOps 社区和应用开发者友好,这让它非常适合新兴的弹性架构。

2.Consul能解决什么问题

微服务带来最大的好处就是把整个大项目分割成不同的服务,运行在不同服务器上,实现解耦和分布式处理。微服务虽然有很多好处,但是也会有不好的一方面。任何事物都会有两面性,在微服务里面运维会是一个很大的难题,如果有一天我们的服务数量非常的多,然后我们又不知道哪一个服务在什么机器上。可能会有人说这部分直接写在程序的配置里面就好了,当我们服务少的时候是可以这么做的,也允许这么做,但是在实际当中我们要尽量避免这么做,比如说我们某一个服务,地址换了,那么我们设计的相关代码就得修改重新部署;又或者说我们有一天上线一个新服务或者下线一个服务,这时候我们又得修改程序代码,这是非常不合理的做法。那么有没有什么可以解决这样的问题呢?这里就需要用到我们的服务注册和发现了。

 

没有服务注册发现的结构

 

上面图片我们可以看到在没有服务注册发现的时候一个调用者需要维护多个服务的ip和端口,这是非常不好的做法,当我们服务进行调整的时候就有可能导致服务调用失败,还有服务器更换服务器,上下新服务,都会受到影响。将来某一个服务节点出现问题,排查对于程序和运维人员来说都是一场很大的灾难,因为不知道哪一个节点出了问题,需要每一台服务器的去排查。

而当我们有使用服务注册发现之后的结构体是什么样子的呢?

有服务注册发现的结构

我们从上图可以发现,当我们有注册中心之后调用者不需要自己去维护所有服务的信息了,仅需要向注册中心请求获取服务,就可以拿到想要的服务信息。这样当我们的服务有所调整,或者上线下线服务,都要可以轻松操作,并且可以在注册中间检查到服务的健康情况,帮助运维人员快速定位到故障的服务器。

第二点内容来自:https://www.sunnyos.com/article-show-85.html  

 

3.基于docker引擎搭建一个集群版的consul

3.1安装docker引擎

https://www.cnblogs.com/gytangyao/p/10173937.html

3.2常用的命令行参数

  • -bootstrap-expect 数据中心中预期的服务器数。不应提供此值,或者该值必须与群集中的其他服务器一致。提供后,Consul将等待指定数量的服务器可用,然后引导群集。这允许自动选择初始领导者。这不能与传统-bootstrap标志一起使用。此标志需要在服务端模式下运行。

  • -server 以服务端模式启动

  • -data-dir 数据存放位置,这个用于持久化保存集群状态

  • -node 群集中此节点的名称。这在群集中必须是唯一的。默认情况下,这是计算机的主机名。

  • -bind 绑定服务器的ip地址

  • -config-dir 指定配置文件服务,当这个目录下有 .json 结尾的文件就会加载进来,更多配置可以参考 配置模版

  • -enable-script-checks 检查服务是否处于活动状态,类似开启心跳

  • -datacenter 数据中心名称

  • -client 客户端可访问ip,包括HTTP和DNS服务器。默认情况下,这是“127.0.0.1”,仅允许环回连接。

  • -ui 开启web的ui界面

  • -join:加入到已有的集群中

完整的配置:https://www.consul.io/docs/agent/options.html

3.3开始配置集群

在宿主机上建立两个文件夹,分别用于存储consul的数据和配置   

在docker启动时

/data/consul_data/data会映射到docker容器内部consul/data文件夹

/data/consul_data/conf会映射到docker容器内部consul/conf文件夹

mkdir -p /data/consul_data/data
mkdir -p /data/consul_data/conf

 

server节点的配置

3.3.1 master1

sudo docker run --net=host --restart always --name consul -v /data/consul_data/data:/consul/data -v /data/consul_data/conf:/consul/config -d docker.io/consul consul agent -server -bootstrap-expect=3 -data-dir /consul/data -config-dir /consul/config -ui -enable-script-checks=true -datacenter=dc1 -bind=192.168.161.128 -client=0.0.0.0 -node=master1 

3.3.2 master2

sudo docker run --net=host --restart always --name consul -v /data/consul_data/data:/consul/data -v /data/consul_data/conf:/consul/config -d docker.io/consul consul agent -server -bootstrap-expect=3 -data-dir /consul/data -config-dir /consul/config -ui -enable-script-checks=true -datacenter=dc1 -bind=192.168.161.129 -client=0.0.0.0 -node=master2 -join 192.168.161.128

3.3.2 master3

sudo docker run --net=host --restart always --name consul -v /data/consul_data/data:/consul/data -v /data/consul_data/conf:/consul/config -d docker.io/consul consul agent -server -bootstrap-expect=3 -data-dir /consul/data -config-dir /consul/config -ui -enable-script-checks=true -datacenter=dc1 -bind=192.168.161.130 -client=0.0.0.0 -node=master3 -join 192.168.161.128

3.3.3错误排查和状态查看

日志查看:
sudo docker logs consul集群信息查看:进入容器内部:sudo docker exec -it consul /bin/sh查看集群成员:consul members

 

webui:http://192.168.161.128-130:8500

 

4.client节点

slave1

sudo docker run --net=host --restart always --name consul -v /data/consul_data/data:/consul/data -v /data/consul_data/conf:/consul/config -d docker.io/consul consul agent -data-dir /consul/data -config-dir /consul/config -ui -enable-script-checks=true -datacenter=dc1 -bind=192.168.161.200 -client=0.0.0.0 -node=slave1 -join 192.168.161.128

 

slave2

sudo docker run --net=host --restart always --name consul -v /data/consul_data/data:/consul/data -v /data/consul_data/conf:/consul/config -d docker.io/consul consul agent -data-dir /consul/data -config-dir /consul/config -ui -enable-script-checks=true -datacenter=dc1 -bind=192.168.161.201 -client=0.0.0.0 -node=slave2 -join 192.168.161.128

 

slave3

sudo docker run --net=host --restart always --name consul -v /data/consul_data/data:/consul/data -v /data/consul_data/conf:/consul/config -d docker.io/consul consul agent -data-dir /consul/data -config-dir /consul/config -ui -enable-script-checks=true -datacenter=dc1 -bind=192.168.161.202 -client=0.0.0.0 -node=slave3 -join 192.168.161.128

 

转载于:https://www.cnblogs.com/gytangyao/p/10815448.html

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

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

相关文章

Node — 第八天 (大事件项目接口实现二)

如何处理MySQL的错误 MySQL的错误信息,可以通过err来获取。这是没有问题的。 但是,我们加入了Promise,Promise中的错误,在外部是获取不到的,只能使用Promise相关方法来获取错误信息。 解决方法一 使用 JS原生的 tr…

在local模式下的spark程序打包到集群上运行

一、前期准备 前期的环境准备,在Linux系统下要有Hadoop系统,spark伪分布式或者分布式,具体的教程可以查阅我的这两篇博客: Hadoop2.0伪分布式平台环境搭建 Spark2.4.0伪分布式环境搭建 然后在spark伪分布式的环境下必须出现如下八…

Effective Objective-C 2.0 初读小结

1.对于OC中的对象声明例如NSObject *obj1 [NSObject new];, obj1这个指针变量是分配在栈上的, 他指向的是这一个分配在堆上面的实例对象, 如果进行下面的赋值操作NSObject *obj2 obj1;,那么并没有新生成一个实例对象, 只是在栈上分配了一个新的指针变量obj2, 而obj2和obj1指向…

APS系统对制造企业到底有多重要?看完这5点你就明白了

第一个问题:需要APS吗? APS是否重要,不能从其所体现的软件工具或系统角度来说,而应该从业务角度来说。对于制造工厂和车间的运行而言,计划是核心的业务。就如同那句俗话说的,没有规矩不成方圆,领…

Node — 第九天 (大事件项目接口实现三)

文章管理接口 设计数据表 添加文章接口 编写接口,使用postman模拟提交formdata类型的数据 在article.js 中,加入 /add 路由 postman模拟提交formdata类型的数据 multer处理文件上传 下载安装multer 加载模块 const multer require(multer) 配置上…

Python之爬虫-段子网

Python之爬虫-段子网 https://ishuo.cn #!/usr/bin/env python # -*- coding:utf-8 -*- import re import requestsresponse requests.get(https://ishuo.cn) data response.text print(data) r re.findall(<div class"content">(.*?)</div>,data) f…

Node — 第九天 (ES6降级 and 发布属于自己的[第三方模块]包)

ES6降级处理 因为 ES 6 有浏览器兼容性问题&#xff0c;可以使用一些工具进行降级处理&#xff0c;例如&#xff1a;babel 降级处理 babel 的使用步骤 安装 Node.js命令行中安装 babel配置文件 .babelrc运行命令&#xff0c;完成降级 项目初始化 (项目文件夹不能有中文) npm …

Vue — 第一天(极速入门)

基本介绍 vue是什么 目标&#xff1a;了解vue的一些基础概念。 官方网站&#xff1a; https://cn.vuejs.org/ vue是&#xff1a;渐进式javascript框架。 两组概念 &#xff08;1&#xff09;框架 库。只提供一些API给开发者使用。jquery 是一个js库框架。拥有自己的规则和…

python类和实例化

简答介绍类和实例python是面向对象的语言&#xff0c;最主要的就是类和实例&#xff0c;类是抽象的模版创建一个类class Studen(object),class 后接类名&#xff0c;定义的类名大些字母开头&#xff0c;object为类的继承&#xff0c;没有合适的继承类用object类&#xff0c;这是…

pjsip库分析

http://blog.chinaunix.net/space.php?uid287570&doblog&cuid728411 如果你对SIP/VoIP技术感兴趣,哪希望你不要错过:),如果你对写出堪称优美的Code感兴趣,那么你也不可错过:)这期间我想分析一下一个实际的协议栈的设计到实现的相关技术,算是自己的一个学习经历记录.最…

Vue — 第二天(v-model和过滤器)

VUE-02-v-model和过滤器 昨日反馈与回顾 代码仓库的问题 不要修改你克隆下来的仓库中任意代码&#xff0c;否则&#xff0c;下次pull时&#xff0c;可能会报错&#xff0c;从而得到不到最新的代码。 如果已经遇到了这个冲突&#xff1a; 解决冲突(git 中解决冲突)把关键代码…

Count

题目链接&#xff1a;点这里 题目意思&#xff1a;令f(x)表示<x的正整数中与x互质的数的平均数*2&#xff0c;求sigma(f(i)^k),L<i<R Solution: 首先&#xff0c;我们定义\(S(x)\sum_{gcd(a,x)1}a\)&#xff0c;因为gcd(a,x)1&#xff0c;所以对于任意a&#xff0c;满…

牛人iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

概览 随着移动互联网的发展&#xff0c;如今的手机早已不是打电话、发短信那么简单了&#xff0c;播放音乐、视频、录音、拍照等都是很常用的功能。在iOS中对于多媒体的支持是非常强大的&#xff0c;无论是音视频播放、录制&#xff0c;还是对麦克风、摄像头的操作都提供了多套…

Vue — 第三天(计算属性和json-server)

计算属性 使用场景 如果一个结果需要依赖data中的数据&#xff0c;但是需要经过一些逻辑处理&#xff0c;才能得到你想要的数据。此时就可以使用计算属性。 例如&#xff1a;要对给定的字符串做翻转处理之后再来显示。 <div id"app"><!-- 此处逻辑复杂 …

JQuery的ready函数与JS的onload的区别详解

JQuery的ready函数与JS的onload的区别&#xff1a;1.执行时间window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。$(document).ready()是DOM结构绘制完毕后就执行&#xff0c;不必等到加载完毕。 2.编写个数不同window.onload不能同时编写多个&#xff0c;如果…

Vue — 第四天(components组件)

问题导入 下面的代码是一个折叠面板的效果。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Docu…

iOS开发常用的RGB色值和宏

iOS中RGB常用的色值,同时可将对颜色的设置定义成宏,方便开发应用,如: // name 颜色相关 // 参数格式为&#xff1a;0xFFFFFF #define kColorWithRGB(rgbValue) \ [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16)) / 255.0 \ …

防火墙综合实验

防火墙技术综合实验 一、实验目的&#xff1a;本次实验是将多种访问控制列表以及防火墙部分的知识做一个汇总 二、实验内容 A&#xff1a;Established控制列表 拓扑图 配置步骤 1:配置各端口ip地址&#xff0c;配置登陆密码 R4: 登陆账号&#xff1a;ys 密码&#xff1a;123 2:…

iOS获取当前设备型号等信息总结 包含iPhone7和iPhone7P

#include <sys/types.h> #include <sys/sysctl.h>//获得设备型号(NSString *)getCurrentDeviceModel {int mib[2];size_t len;char *machine;mib[0] CTL_HW;mib[1] HW_MACHINE;sysctl(mib, 2, NULL, &len, NULL, 0);machine malloc(len);sysctl(mib, 2, mac…

Vue — 第五天(路由)

前端路由 问题导入 在前面完成的资产管理案例中&#xff0c; 我们是把列表区域和添加表单区域实现在了一个区域。当页面功能比较复杂时&#xff0c;我们需要它们拆分开来&#xff1a;一个页面中只显示一个区域。 一个比较直观的解决方案是把它们分别做成两个独立的网页文件&…