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.搭建一个集群版的consul

3.1下载和配置环境变量

如果没有安装unzip,请安装
yum install -y zip unzip

cd /usr/local/src
wget https://releases.hashicorp.com/consul/1.4.4+ent/consul_1.4.4+ent_linux_amd64.zip
unzip consul_1.4.4+ent_linux_amd64.zip
mv consul /usr/bin

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开始配置集群

3.3.1 master1

consul agent -bootstrap-expect 3 -server -data-dir /data/consul -node=master1 -bind=192.168.161.128 -client=0.0.0.0 -enable-script-checks=true -datacenter=dc1 -client=0.0.0.0 -ui

3.3.2 master2

consul agent -bootstrap-expect 3 -server -data-dir /data/consul -node=master1 -bind=192.168.161.129 -client=0.0.0.0 -enable-script-checks=true -datacenter=dc1 -client=0.0.0.0 -ui -join 192.168.161.128

3.3.2 master3

consul agent -bootstrap-expect 3 -server -data-dir /data/consul -node=master1 -bind=192.168.161.130 -client=0.0.0.0 -enable-script-checks=true -datacenter=dc1 -client=0.0.0.0 -ui -join 192.168.161.128

猜你喜欢

转载自www.cnblogs.com/gytangyao/p/10815448.html