云原生监控系统Prometheus——服务发现(基于 Consul 的服务发现)
作者:互联网
服务发现(基于 Consul 的服务发现)
基于 Consul 的服务发现是一种使用网络的服务发现机制和配置工具,是使用 Go 语言开发的,部署安装较为简单,具有分布式、高可用性和极高的可扩展性。它提供了以下几个关键功能。
- 服务发现:Consul 通过 HTTP API 和 DNS 进行服务注册和服务发现。对于外部服务(如 SaaS 提供者)也可以注册。
- 健康检查:Consul 支持对各类服务运行状态的健康检查工作,能够迅速向管理员告警集群中的任何问题,可以防止将流量路由到问题或故障主机,可动态监视服务运行状况并适当更新服务注册表。
- 键/值存储:键/值存储可以灵活地进行存储动态配置、功能标记、协调和领导者选举等。简单的 HTTP API 使其易于在任何地方使用。
- 多数据中心:Consul 支持单一数据中心,可扩展以支持多个数据中心,并且无须复杂的配置。
- 服务分割:通过自动 TLS 加密和基于身份的授权实现安全的服务间通信。
官方提供的 Consul 架构图如下所示:
首先 Consul 支持多数据中心,在上图中有两 DataCenter,他们通过 Internet 互联,同时请注意为了提高通信效率,只有 Server 节点才加入跨数据中心的通信。
在单个数据中心中,Consul 分为 Client 和 Server 两种节点(所有的节点也被称为 Agent ),Server 节点保存数据,Client 负责健康检查及转发数据请求到 Server;Server 节点有一个 Leader 和多个 Follower ,Leader 节点会将数据同步到 Follower, Server 的数量推荐是 3 个或者 5 个,在 Leader 挂掉的时候会启动选举机制产生一个新的 Leader。
Server(即服务器)端模式是具有一组扩展功能的代理,包括参与 Raft 选举、集群状态维护和响应 RPC 查询。Server 端与其他数据中心交互 WAN Gossip,并将查询转发给 Server Leader 或远程数据中心。它可以持久化所数据信息到本地,这样就算出现故障,信息也得以保存。Server Leader 负责 Server 间注册信息的同步和各个节点的监控检查工作。
集群内的 Consul 节点通过 gossip 协议(流言协议)维护成员关系,也就是说某个节点了解集群内现在还有哪些节点,这些节点是 Client 还是 Server。单个数据中心的流言协议同时使用 TCP 和 UDP 通信,并且都使用 8301 端口。跨数据中心的流言协议也同时使用 TCP 和 UDP 通信,端口使用 8302。
在每个数据中心中,所有的节点都要加入 Gossip 协议。这样的设计有以下目的:
-
- 第一,不需要为客户端配置服务器地址,发现是自动完成的;
- 第二,检测节点故障的工作不是放在服务器上,而是分布式的;
- 第三,可以被用作消息传递层,比如 Leader 选举事件。
集群内数据的读写请求既可以直接发到 Server,也可以通过 Client 使用 RPC 转发到 Server,请求最终会到达 Leader 节点,在允许数据轻微陈旧的情况下,读请求也可以在普通的 Server 节点完成,集群内数据的读写和复制都是通过 TCP 的 8300 端口完成。
一、部署 Consul
Documentation: https://docs.consulproject.org/docs/
官网:http://consulproject.org、https://www.consul.io/
consul 在 Github 下载页面地址 https://github.com/consul/consul/releases,也可以直接使用 git 进行 clone 操作 git clone https://github.com/consul/consul.git。
-
1.1)安装依赖:
install git, Ruby 2.7.6, CMake, pkg-config, shared-mime-info, Node.js and PostgreSQL (>=9.5).
-
1.2)安装步骤:
git clone https://github.com/consul/consul.git cd consul bundle install cp config/database.yml.example config/database.yml cp config/secrets.yml.example config/secrets.yml bin/rake db:create bin/rake db:migrate bin/rake db:dev_seed RAILS_ENV=test rake db:setup
或
Installing Consul on Kubernetes
1、添加 HashiCorp Helm 存储库: $ helm repo add hashicorp https://helm.releases.hashicorp.com
2、验证您是否有权访问 helm chart 权限 $ helm search repo hashicorp/consul NAME CHART VERSION APP VERSION DESCRIPTION hashicorp/consul 0.39.0 1.11.1 Official HashiCorp Consul Chart
3、使用 Helm 在 Kubernetes 上安装 Consul。Helm chart 做了一切来设置推荐的 Consul-on-Kubernetes 部署。安装完成后,会形成一个 Consul 集群,选举出 leader,每个节点都会有一个运行的 Consul agent。 3.1)要在 Kubernetes 上安装最新版本的 Consul,请发出以下命令以使用 Helm 使用默认配置安装 Consul。-n 您还可以通过修改 Helm 安装的标志值来将 Consul 安装在您选择的专用命名空间上。 $ helm install consul hashicorp/consul --set global.name=consul --create-namespace --namespace consul 3.2)要在 Kubernetes 上安装特定版本的 Consul,请发出以下带有--version标志的命令,以使用 Helm 使用默认配置安装指定版本。 $ export VERSION=0.43.0 $ helm install consul hashicorp/consul --set global.name=consul --version ${VERSION} --create-namespace --namespace consul -
1.3)运行程序:
标签:数据中心,服务,consul,--,Consul,Server,Prometheus,节点 来源: https://www.cnblogs.com/zuoyang/p/16487606.html