搭建Consul服务发现与服务网格

目录
  • 第一部分:Consul 基础
    • 1,Consul 介绍
    • 2,安装 Consul
      • Ubuntu/Debian 系统
      • Centos/RHEL 系统
      • 检查安装
    • 3,运行 Consul Agent
      • 启动 agent
      • 发现数据中心成员
      • 查看 UI
    • 4,在 Consul Service Discovery 中注册服务
      • 端口
      • 定义服务
      • 使用配置启动服务
      • 如何重新加载配置文件
    • 5,查询服务
      • 通过 HTTP API
      • 通过 UI 查询
    • 6,DNS 知识与查询基础知识
      • 基础知识
      • 通过 DNS 查询 Consul 服务信息
      • 小结
    • 7,将数据存储在Consul KV 中
  • 第二部分:深入 Consul
    • 8,Consul Service Mesh
      • 了解 Consul Service Mesh
      • 部署真实服务
      • 真实注册服务
      • 注册代理
      • 代理服务
      • 验证代理
      • UI 界面查看
    • 9,Consul 集群/数据中心
      • 开始准备
      • 启动 Consul 中心
      • 启动客户端
      • 检查成员信息
      • 关联服务器
      • 打开 UI 查看服务节点信息
    • 10,集群代理服务
      • 提供代理服务
      • 另一台服务器代理
      • 验证代理

第一部分:Consul 基础

1,Consul 介绍

官网文档描述:Consul 是一个网络工具,提供功能齐全的服务网格和服务发现。

它可以做什么:自动化网络配置,发现服务并启用跨任何云或运行时的安全连接。

那么,我们对 Consul 的理解,就是服务网格、服务发现,官网文档说的这两个特征,到底是啥意思?跨什么云?

下面,我们将通过实践操作,逐渐了解 Consul,搭建出一个真实的 Consul 服务来体验。

2,安装 Consul

两台服务器上都需要安装 Consul,具体步骤可以参考下面的说明。

Ubuntu/Debian 系统

# 添加 GPG key

curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -

# 添加 仓库
# 如果执行后提示  apt-add-repository: command not found
# 可先安装: apt-get install software-properties-common

sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"

# 更新源以及安装 consul

sudo apt-get update && sudo apt-get install consul

Centos/RHEL 系统

# 使用 yum-config-manager 管理仓库
sudo yum install -y yum-utils

# 连接仓库
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo

# 安装
sudo yum -y install consul

检查安装

可输入 consul 检查是否安装成功,如果有信息输出即说明安装成功。

root@50skbjiynxyxkcfh:~# consul
Usage: consul [--version] [--help] <command> [<args>]

Available commands are:
    acl            Interact with Consul's ACLs
    agent          Runs a Consul agent
    catalog        Interact with the catalog
    config         Interact with Consul's Centralized Configurations
    connect        Interact with Consul Connect
    debug          Records a debugging archive for operators
    event          Fire a new event
    exec           Executes a command on Consul nodes
... ...

3,运行 Consul Agent

文章一般都会说一个 Consul 服务或者一个 Consul 实例,官网文档称为 Agent,这个要记住。为了避免误解,本文提到的代理指 proxy,一般使用 proxy 和 agent 单词说明。

Agent 可以以服务器模式(server mode)或客户端模式(client mode)运行,多个Agent 组成一个 Consul datacenter,每个 Consul datacenter 至少有一个 Agent 属于 服务器模式。

官方不建议单服务器部署。

启动 agent

前面说到过,agent 表示一个 Consul 实例。

因为现在处于探索实践阶段,为了避免各种加密安全问题等,我们需要使用 -dev 参数,以开发模式启动。

# $> consul agent
# Runs a Consul agent

consul agent -dev

执行这个命令后,consul 会被启动起来,并且占用终端。

启动过程中注意留意信息,如果启动失败,需要自行根据提示解决问题。如端口冲突:

发现数据中心成员

执行 consul members 命令可以发现数据中心成员。

root@50skbjiynxyxkcfh:~# consul members
Node              Address          Status  Type    Build  Protocol  DC   Segment
50skbjiynxyxkcfh  172.31.0.6:8301  alive   client  0.5.2  2         dc1  <default>

意思是检查当前 Consul 服务的成员组成,目前是单服务器,所以只有一个成员。

这里不需要留意有什么用途,只要记得这个命令就行,后面我们会使用到这个命令查看信息。

查看 UI

假如服务器 IP 是 172.31.0.6 ,则可以通过 http://172.31.0.6:8500 访问 consul 的 UI服务(http apis)。

4,在 Consul Service Discovery 中注册服务

本小节将介绍 Consul 中的一些网络知识,端口与dns的说明;

然后通过实例讲解如何定义服务以及注册服务到 Consul 中 -- Consul 服务发现。

端口

这里先说明一些 Consul 的端口。

官网文档:Before running Consul, you should ensure the following bind ports are accessible.

翻译:在运行 Consul 之前,需要确保以下端口都是可以访问的。

文档地址:https://www.consul.io/docs/install/ports.html

对于一些重要的配置,要查看官方文档原版,别百度,很多文章只是机器翻译或者 copy 命令,会让你进坑的。

Use Default Ports
DNS: The DNS server (TCP and UDP) 8600
HTTP: The HTTP API (TCP Only) 8500
HTTPS: The HTTPs API disabled (8501)*
gRPC: The gRPC API disabled (8502)*
LAN Serf: The Serf LAN port (TCP and UDP) 8301
Wan Serf: The Serf WAN port (TCP and UDP) 8302
server: Server RPC address (TCP Only) 8300
Sidecar Proxy Min: Inclusive min port number to use for automatically assigned sidecar service registrations. 21000
Sidecar Proxy Max: Inclusive max port number to use for automatically assigned sidecar service registrations. 21255

*For HTTPS and gRPC the ports specified in the table are recommendations.

  • 8500(http)、8501(https)、8502(gRPC) 三个接口可以通过远程请求调用相关的服务,或者直接访问。
  • 8501,8502 两个端口都是 disabled,所以我们可以先看一下 8500 端口的作用,其他端口后面慢慢用到再解释。

​ 打开你的浏览器,访问 http://{你的ip}:8500,会发现跳到了一个 UI 界面。

  • 如果要查看端口被哪个进程占用,可以使用 lsof -i:8081 命令,8081 是要查询的端口。

定义服务

本小节讲解如何通过配置文件以及命令形式,定义服务并向 Consul 注册服务。

打开或新建(如果不存在) /etc/consul.d 目录,后面使用此目录作为 Consul 配置文件的存放位置。

在目录中新建一个 web.json 文件,用于定义服务。

touch web.json

编辑文件,修改其内容为:

{
  "service": {
    "name": "web",
    "tags": [
      "rails"
    ],
    "port": 8080
  }
}

端口可自由设置;这里定义了一个名称为 web 的服务,其端口为 8080。

使用配置启动服务

我们定义配置目录和配置文件后,可以使用配置文件重新启动节点:

consul agent -dev -enable-script-checks -config-dir=/etc/consul.d

-enable-script-checks 可以开启配置文件检查,增强安全性,因为配置文件可以启用脚本,导致可能会引入一个远程执行漏洞。当然,本文的实践步骤还用不上,这里先预热。

如无意外,会提示以下信息:

2020/11/21 10:09:25 [INFO] agent: Synced service "web"
2020/11/21 10:09:25 [DEBUG] agent: Node info in sync
2020/11/21 10:09:25 [DEBUG] agent: Service "web" in sync
2020/11/21 10:09:25 [DEBUG] agent: Node info in sync

如何重新加载配置文件

如果你修改了配置文件,可以使用命令让 Consul 重新加载配置文件,而无需重启。

$ consul reload
Configuration reload triggered

5,查询服务

我们将服务添加到 Consul 后,可以使用 DNS接口 或 HTTP API 对其进行查询,其它应用可以通过 Consul 网络接口查询到 Consul 提供了什么服务,这就是服务发现(不知道我的理解对不对)。

通过 HTTP API

通过 Consul HttpAPI 服务,我们可以查询到服务列表,其 URL 为 /v1/catalog/service/web 。

通过命令查询:

curl http://localhost:8500/v1/catalog/service/web

也可以使用浏览器访问。

返回的 json 中列出了所有服务节点,以及每个服务实例的信息、状态,根据 json 信息,可以发现服务。

当你发现服务后,可以通过 json 中的信息,获取服务的 ip 和端口,这样就可以正式连接到这个服务了。

通过 UI 查询

访问 http://{你的ip}:8500 ,在 UI 上会发现注册了一个叫 web 的服务。

6,DNS 知识与查询基础知识

基础知识

Linux 中,dig 命令用于查询一个域名的 DNS 信息,使用示例:

dig baidu.com
... ...
baidu.com.		375	IN	A	220.181.38.148
baidu.com.		375	IN	A	39.156.69.79
... ...

DNS 查询的标准端口号是 53,通过这个端口号,可以向 DNS 服务器查询更多的域名信息。

DNS 有 A 记录(解析到 IP)、CNAME(别名,解析到域名)等类型,有兴趣的话自行查找资料了解。

dig 命令请参考 https://linux.die.net/man/1/dig

dig 的其中一个查询格式为:

dig [@server] [-p {port}] [name]

dig @127.0.0.1 -p 8600 是指定 8600 端口作为 DNS 服务查询的端口;name 名称则表示要指定查询的资源名称。

记住这个查询格式。

通过 DNS 查询 Consul 服务信息

前面已经注册了 web 服务,那么 如何通过 Consul 的 DNS 接口(8600端口)查询 web 服务的信息?

可在在默认主机上执行:

dig @127.0.0.1 -p 8600 web.service.consul

关于 dig 命令,前面已经讲解了,web.service.consul 就是 [name] 部分。 Consul 会将注册的服务名称加上 .service.consul 做为命名。

那么,查询这个 DNS 有啥用?这里先记下来,后面我们继续捣鼓。

小结

目前我们已经学会使用 命令注册服务,但是因为只是 “配置” 了一下,web(8080端口)服务,压根不存在真正的服务。后面我们将通过部署真实的 web 服务,然后注册到 Consul 中。

7,将数据存储在Consul KV 中

打开你的 Consul UI 界面,如图:

你可以通过 UI 界面创建键值数据,也可以通过命令行形式 CURD 键值数据。命令行示例如下:

增加或修改:

consul kv put {key} {value}

获取值:

consul kv get {key}

删除键:

consul kv delete {key}

示例:

consul kv put name 痴者工良

第二部分:深入 Consul

本章内容介绍如何使用 Consul Service Mesh 连接服务、代理服务;建立数据中心,部署多个实例;

8,Consul Service Mesh

了解 Consul Service Mesh

Consul Service Mesh 是通过基于身份的授权、L7流量管理和服务对服务加密,为现代应用程序网络和安全性创建一致的平台。

它有什么用处?

例如,在多个集群和环境之间联合领事,创建一个全球服务网格。跨平台一致地应用策略和安全。如下图所示:

笔者注:envoy 是第三方开源边缘和服务代理,并不是 Consul 的功能,Consul 自带的是 Consul connect。

Consul Service Mesh 应用场景可参考:https://www.consul.io/use-cases/multi-platform-service-mesh

Consul Service Mesh 可以通过代理将多台服务器中的服务关联起来,使得其能够通过专用网络相互访问。

详细请点击 https://www.consul.io/docs/connect/gateways/mesh-gateway

部署真实服务

在 Consul 官网文档,使用了 socat 来演示一个服务,并注册到 Consul 中,,笔者觉得过于麻烦,这里笔者为了更好地学习 Consul ,使用 rust 编写了一个轻量的 web 服务,Windows 大小 4MB,Linux 下 8MB,无需安装任何依赖。

建议读者使用笔者写的这个 Web demo 作为真实服务部署,这个 demo 已开源,下载地址:

https://github.com/whuanles/consulweb/releases

下载文件完毕后,上传到服务器空目录中。

为了自定义绑定 web 服务地址,需要新建一个 option.txt 文件,其内容如下:

0.0.0.0:8081

快速创建文件命令:

echo "0.0.0.0:8081" > option.txt

Web 服务支持部署静态文件,你可以新建静态网页文件如 index.html,放到程序目录下,然后通过绑定的 ip 和端口即可访问。

记得给 web 赋予权限:

chmod +x web

执行 ./web 启动 web 服务,执行 nohup ./web & 后台 运行 web 服务。

这样我们就有一个真实的 web 服务了,大家可以使用浏览器访问测试。

真实注册服务

使用笔者或者自定义编写的服务后,需要将这个服务注册到 Consul 中。

在 /etc/consul.d 目录,新建 realweb.json 文件。

{
  "service": {
    "name": "realweb",
    "port": 8081,
    "connect": {
      "sidecar_service": {}
    }
  }
}

然后执行 consul reload 重新加载配置文件。

注册代理

为啥要注册代理呢?

前面经过实践,我们已经学会了注册服务以及服务发现,一开始介绍 Consul 时,我们还看到 “Consul 提供功能强大的 服务网格”、“安全的连接” 等,那么我们通过这里的步骤(代理),就是体会 Consul 的这个特征功能。

前面已经注册了 realweb 这个服务,现在我们开启代理,在新的终端窗口,执行:

 consul connect proxy -sidecar-for realweb

可以看到,Consul 使用 21000 端口来代理 realweb 服务。

这个代理功能称为 Consul Connect。

但是这个端口是不能访问的,其基本结构如下:

        源                       代理后
------------------        ------------------
|8081 <---> 21000| <----> |21001 <---> 9191|
------------------        ------------------

8081(源) 和 9191(代理的端口) 都可以访问,21000 和 21001 都是属于桥接端口,不能访问。

代理服务

前面注册 realweb 代理服务后(8081 <---> 21000),我们开始对其进行代理(21001 <---> 9191)。

这里的代理,是通过 Consul Service Mesh 使用 Sidecar 代理将服务相互连接,这种功能就叫 服务网格。

        源                                            代理后
--------------------------                --------------------------
|8081 <-----------> 21000|   <-------->   |21001 <-----------> 9191|
|     Consul Connect     |     Sidecar    |      Consul Connect    |
--------------------------                --------------------------

为了实现代理,需要创建新的配置文件,注册服务。

新建一个终端窗口,在 /etc/consul.d/ 目录新建一个 proxyweb.json 文件。

其内容如下:

{
  "service": {
    "name": "proxyweb",
    "connect": {
      "sidecar_service": {
        "proxy": {
          "upstreams": [
            {
              "destination_name": "realweb",
              "local_bind_port": 9191
            }
          ]
        }
      }
    }
  }
}  

可以将 Connect 代理的每个上游配置为通过网状网关进行路由。local_bind_port 表示代理服务后,使用哪个端口作为代理端口。

绑定的代理端口可能是以下几种情况(这里直接搬文档):

  • local-在这种模式下,Connect代理建立与同一数据中心中运行的网关的出站连接。然后,该网关负责确保将数据转发到目标数据中心中的网关。
  • remote-在此模式下,Connect代理建立与目标数据中心中运行的网关的出站连接。然后,该网关将数据转发到最终目标服务。
  • none -在此模式下,不使用网关,并且Connect代理将其出站连接直接连接到目标服务。

创建配置完毕后(注册服务),执行 consul reload 重新加载配置文件。

然后执行命令开始代理服务。

consul connect proxy -sidecar-for proxyweb

验证代理

创建代理完毕后,我们检查代理是否正常。

新建一个终端窗口,执行访问目录:

 curl http://127.0.0.1:9191
root@50skbjiynxyxkcfh:~# curl http://127.0.0.1:9191
<h3>恭喜你,部署 Consul 服务成功!</h3>

记得给笔者 痴者工良 点一下赞哟~~~

原本 realweb 服务暴露的端口为 8081,然后创建一个叫 proxyweb 的代理,其端口变成 9191,之后我们可以使用 9191 来访问这个 realweb 服务。

下图是从官网淘过来的,大家可以根据图片理解一下

假如搭建了一个微服务,其中一台主机有个服务是 redis,端口是 9003,你会把 redis 暴露到公网上么?肯定不能呀,于是通过代理功能,将 redis 服务代理到另一台 web 服务器,端口变成 5000,web 程序可以访问 redis 服务,但是外界不能访问。

然后 web 提供 9002 端口给用户,用户可以访问 web 网页服务。

UI 界面查看

打开 Consul 界面,可以看到代理服务。

9,Consul 集群/数据中心

本章内容将介绍如何将两台服务器的 Agent 关联起来,建立数据中心。

开始准备

这里需要两台服务器才行,当然官方文档提供了使用虚拟机的方法部署另一个系统,但是这里不提倡,还是老老实实搞两台服务器实际,不然你学啥集群和微服务。。。

在 Linux 快速部署虚拟机:https://learn.hashicorp.com/tutorials/consul/get-started-create-datacenter?in=consul/getting-started

切换到副服务器/虚拟机中,按照前面第二小节的安装教程,安装 consul。

在 主服务器上,停止 Consul,并关闭其它终端窗口,只留一个终端窗口就行。

root@50skbjiynxyxkcfh:~# top | grep consul
32318 root      20   0  785168  66096  49008 S  1.3  3.2  13:52.93 consul
root@50skbjiynxyxkcfh:~# kill 32318

启动 Consul 中心

在主服务器中执行以下命令,启动 Consul 实例。

# -bind 填写子网ip或公网ip,另一台服务器可以访问的ip
consul agent \
  -dev
  -server \
  -bootstrap-expect=1 \
  -node=agent-one \
  -bind=172.31.0.6 \
  -data-dir=/tmp/consul \
  -config-dir=/etc/consul.d
  • server-提供此标志表示您希望代理以服务器模式启动。
  • -bootstrap-expect-这告诉 Consul datacenter 总共应该有多少台服务器。
  • -node-数据中心中的每个节点必须具有唯一的名称。
  • -bind-这是该代理将侦听其他 Consul 成员进行通信的地址。填子网ip或公网ip。
  • data-dir-此标志告诉 Consul Agent 他们应将状态存储在哪里,其中可以包括服务器和客户端的敏感数据(如ACL令牌)。
  • config-dir-此标志告诉Consul在哪里寻找其配置。

启动成功后,会提示:

    2020-11-21T07:46:59.903+0800 [INFO]  agent.server: federation state anti-entropy synced
    2020-11-21T07:46:59.903+0800 [INFO]  agent: Synced node info
    2020-11-21T07:46:59.911+0800 [INFO]  agent: Synced service: service=web
    2020-11-21T07:46:59.923+0800 [INFO]  agent: Synced service: service=proxyweb
    2020-11-21T07:46:59.939+0800 [INFO]  agent: Synced service: service=proxyweb-sidecar-proxy
    2020-11-21T07:46:59.961+0800 [INFO]  agent: Synced service: service=realweb
    2020-11-21T07:46:59.971+0800 [INFO]  agent: Synced service: service=realweb-sidecar-proxy
  • 如果有报 realweb、proxy 代理错误的信息,可以忽略掉。

启动客户端

在副服务器上,执行以下命令启动一个新的 Agent。

consul agent \
  -node=agent-two \
  -bind=172.31.0.7 \
  -enable-script-checks=true \
  -data-dir=/tmp/consul \
  -config-dir=/etc/consul.d

检查成员信息

到目前为止,我们有两台服务器,每台服务器都部署了 Consul 实例,但是他们都是独立的,还没有被关联起来。

我们可以在每台服务器上执行以下命令检查其成员信息:

consul members
# consul server 1
Node       Address          Status  Type    Build  Protocol  DC   Segment
agent-one  172.31.0.6:8301  alive   server  1.8.6  2         dc1  <all>

# consul server 2
Node       Address          Status  Type    Build  Protocol  DC   Segment
agent-two  172.31.0.7:8301  alive   client  1.8.6  2         dc1  <default>

关联服务器

现在,我们把副服务器(172.31.0.7)加入到主服务器(172.31.0.6)中。

在副服务器上执行以下命令:

consul join 172.31.0.6

重新在每台服务器下执行 consul members 命令查看成员信息:

# consul server 1
Node       Address          Status  Type    Build  Protocol  DC   Segment
agent-one  172.31.0.6:8301  alive   server  1.8.6  2         dc1  <all>
agent-two  172.31.0.7:8301  alive   client  1.8.6  2         dc1  <default>

# consul server 2
Node       Address          Status  Type    Build  Protocol  DC   Segment
agent-one  172.31.0.6:8301  alive   server  1.8.6  2         dc1  <all>
agent-two  172.31.0.7:8301  alive   client  1.8.6  2         dc1  <default>

打开 UI 查看服务节点信息

打开 Consul UI 界面(8500端口),点击 Nodes ,即可看到 Consul 所有服务器节点。

10,集群代理服务

本章内容讲述如何通过代理功能,将一台主机的服务在代理到另一台服务器中访问。

提供代理服务

在主服务器上把 proxyweb 终端关掉(已关掉请忽略),进入 /etc/consul.d 目录把 proxyweb.json
删除,重新加载配置:

consul reload

然后启动代理功能(Consul connect):

consul connect proxy -sidecar-for realweb

另一台服务器代理

在副服务器的 /etc/consul.d/ 目录中,新建一个 proxyweb.json 文件,其内容如下:

{
  "service": {
    "name": "proxyweb",
    "connect": {
      "sidecar_service": {
        "proxy": {
          "upstreams": [
            {
              "destination_name": "realweb",
              "local_bind_port": 9191
            }
          ]
        }
      }
    }
  }
}

重新加载配置:

consul reload

启动代理服务

 consul connect proxy -sidecar-for proxyweb

验证代理

在副服务器打开新的窗口,执行:

curl http://127.0.0.1:9191

发现

<h3>恭喜你,部署 Consul 服务成功!</h3><br><br><br><br>记得给笔者 痴者工良 点一下赞哟~~~

说明通过代理服务,可以将一台主机的服务(端口),在另一台主机上使用别的端口(相同端口也可以)访问这个服务。

到此这篇关于搭建Consul服务发现与服务网格的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • .Net Core微服务网关Ocelot集成Consul

    有consul基础的都知道,consul可以发现新增的服务,剔除掉无效的服务,赋予应用自动伸缩的能力.而ocelot如果集成了consul,那ocelot也能拥有这些能力,还可以自主选择负载均衡策略,灵活性更强. (建议看完前一篇文章再来实践这一篇,不然可能有难度) 上干货. 首先打开上一篇新建好的项目,继续添加nuget包: 然后注册相关服务: public void ConfigureServices(IServiceCollection services) { services.AddOc

  • Consul的HTTP API和使用方法

    搭建起 consul Consul 支持基础结构的服务注册和发现(称为内部服务),也支持外部服务(第三方 SAAS服务以及无法直接运行 Consul 代理的其它环境,例如 redis). 直接使用 sudo apt-get install consul命令即可安装 consul,你也可以参考导读中笔者的另一篇文章,里面提到了详细的安装方法. 然后我们使用命令启动 consul: consul agent -dev -client 0.0.0.0 -enable-script-checks -no

  • Consul的搭建和.Net5的注册和获取方法(Win10简单版)

    Consul 是一个用来实现分布式系统服务发现与配置的开源工具.它内置了服务注册与发现框架.分布一致性协议实现.健康检查.Key/Value存储.多数据中心方案,也可以作为配置中心. Consul的下载就不说了,解压包后吧安装路劲放到系统环境变量Path里面去,consul的启动命令. consul agent -dev 验证启动成功网址:localhost:8500 启动后就要给consul注册了 全局仅一次的注册放在StartUp里,怎么封装先不说,具体实现是这样的 //找到Consul C

  • .Net Core服务治理Consul搭建集群

    延续上一篇的话题继续,顺便放上一篇的传送门:点这里. 集群的必要性 consul本身就是管理集群的,现在还需要给consul搞个集群,这是为啥?因为consul单点也容易挂啊!万一管理集群的consul挂掉了,那么相当于上下游应用都变成了瞎子,看不到也调不到.所以集群的必要性不用我说了吧? Server & Client 生产环境下,可以选择上面两种模式,下面我就简称S端.C端.说说它俩有啥不一样: S端: 1.数量不宜过多,一般推荐3.5个,要求是奇数. 2.持久化保存节点数据. 3.多个S端

  • .Net Core服务治理Consul健康检查

    继续上一篇的话题,顺便放上一篇的传送门:点这里. 健康检查 经过之前的操作,我的consul已经支持自动扩展,并且调用也很靠谱.但是这里有个问题,一旦服务列表里的某个服务挂了,consul并不知道,还是会把实际无效的地址返回给我,就算重启consul容器也无法刷新到最新的状态.所以,咱们要监控服务可用性,主动区分出不可用服务,这种手段,就称之为健康检查. 进入编码环节.老规矩,还是进入到之前我封装好的注册方法,在注册时增加健康检查的内容: client.Agent.ServiceRegister

  • .Net Core服务治理Consul自动扩展和服务调用

    今天有写文章的时间了,开心.延续上一篇的话题继续,顺便放上一篇的传送门:点这里. 服务调用 既然服务注册已经搞完了,那么现在就开始调用这些注册好的服务.先做一下准备动作,把consul容器跑起来: 打开控制台确认正常: 然后多跑几个应用程序模拟多点部署: 程序跑完以后检察一下服务列表: 戳进去看看: 一切准备就绪,完美.然后进入编码环节.老规矩,直接上码: public static string Convert(string consulUri, string centerName, stri

  • .Net Core服务治理Consul使用服务发现

    先思考一些问题:它是做什么的.以及怎么使用它.带着这些问题往下走. consul是做什么的 consul用于微服务下的服务治理.服务治理是什么?它包含但不限于:服务发现.服务配置.健康检查.键值存储.安全服务通信.多数据中心等. 为什么需要服务治理?举个例子:最开始的服务比较简单,各服务之间通过API就能访问.后面业务复杂了,服务也跟着复杂了,搞分布式了,而分布式又必然是多服务器部署,这就有一个问题:如果服务之间还是用API访问,那某个服务所在的服务器挂掉以后这个服务就不能用了,也不能自动转移,

  • Docker Consul概述以及集群环境搭建步骤(图文详解)

    目录 一.Docker consul概述 二.基于 nginx 与 consul 构建自动发现即高可用的 Docker 服务架构 一.Docker consul概述 容器服务更新与发现:先发现再更新,发现的是后端节点上容器的变化(registrator),更新的是nginx配置文件(agent) registrator:是consul安插在docker容器里的眼线,用于监听监控节点上容器的变化(增加或减少,或者宕机),一旦有变化会把这些信息告诉并注册在consul server端(使用回调和协程

  • 搭建Consul服务发现与服务网格

    目录 第一部分:Consul 基础 1,Consul 介绍 2,安装 Consul Ubuntu/Debian 系统 Centos/RHEL 系统 检查安装 3,运行 Consul Agent 启动 agent 发现数据中心成员 查看 UI 4,在 Consul Service Discovery 中注册服务 端口 定义服务 使用配置启动服务 如何重新加载配置文件 5,查询服务 通过 HTTP API 通过 UI 查询 6,DNS 知识与查询基础知识 基础知识 通过 DNS 查询 Consul

  • go-micro使用Consul做服务发现的方法和原理解析

    目录 安装Consul 安装Consul插件 服务端使用Consul 服务注册 注册过程 健康检查 客户端使用Consul 调用服务 发现过程 效果展示 go-micro v4默认使用mdns做服务发现.不过也支持采用其它的服务发现中间件,因为多年来一直使用Consul做服务发现,为了方便和其它服务集成,所以还是选择了Consul.这篇文章将介绍go-micro使用Consul做服务发现的方法.关于Consul的使用方式请参考我的另一篇文章:搭建Consul服务发现与服务网格 . 安装Consu

  • Python 使用 consul 做服务发现示例详解

    前言 前面一章讲了微服务的一些优点和缺点,那如何做到 一.目标 二.使用步骤 1. 安装 consul 我们可以直接使用官方提供的二进制文件来进行安装部署,其官网地址为 https://www.consul.io/downloads 下载后为可执行文件,在我们开发试验过程中,可以直接使用 consul agent -dev 命令来启动一个单节点的 consul 在启动的打印日志中可以看到 agent: Started HTTP server on 127.0.0.1:8500 (tcp), 我们

  • 详解基于docker-swarm搭建持续集成集群服务

    前言 本文只为自己搭建过程中的一些简单的记录.如果实践中有疑问,可以一起探讨. 为了能在本机(macOS)模拟集群环境,使用了vb和docker-machine.整体持续集成的几个机器设施如下: 1.服务节点:三个manager节点,一个worker节点.manager需要占用更多的资源,manager配置尽量高一些.swarm的manager节点的容错率是 (N-1)/2 .N是manager节点数.也就是如果有3个manager,那就能容忍一个manager节点挂掉.官方的算法说明:Raft

  • 浅谈服务发现和负载均衡的来龙去脉

    问题缘由 随着时代发展,单机程序遇到了计算力和存储的双重瓶颈,分布式架构应运而生.单体应用通过函数名(标识)便可轻松完成本地函数调用,在分布式系统中,服务(RPC/RESTful API)承担了类似的角色,但请求服务单靠服务名还不够,服务名只是服务能力(服务类型)的标识,还需要指示服务位于网络何处,而部署在云中的服务实例IP是动态分配的,扩缩容.失败和更新则让问题变得更加复杂,静态配置服务实例适应不了新变化,需要更精细化的服务治理能力,为了解决或者说简化这个问题,服务发现作为一种基础能力被抽象和

  • 服务发现与负载均衡机制Service实例创建

    目录 什么是Service? 创建一个Service实例 集群外部访问svc 创建代理外部应用的Service实例 Service反代外部域名 Service 的类型: 什么是Service? Service是逻辑上的一组Pod,一种可以访问Pod的策略,而且其他Pod可以通过Service访问到这个Service代理的Pod,可以把它理解为传统架构中的反向代理. 相对于Pod而言,Service有一个固定的名称,不会发生改变,并且提供了负载均衡的功能. 通过Service的定义,可以对客户端应

  • C#使用Consul集群进行服务注册与发现

    前言 我个人觉得,中间件的部署与使用是非常难记忆的:也就是说,如果两次使用中间件的时间间隔比较长,那基本上等于要重新学习使用. 所以,我觉得学习中间件的文章,越详细越好:因为,这对作者而言也是一份珍贵的备忘资料. Consul简介 Consul一个什么,我想大家通过搜索引擎一定可以搜索到:所以,我就不在重复他的官方描述了. 这里,我为大家提供一个更加好理解的描述. Consul是什么? Consul本质上是一个Socket通信中间件. 它主要实现了两个功能,服务注册与发现与自身的负载均衡的集群.

  • go使用consul实现服务发现及配置共享实现详解

    目录 使用consul四大特性 通过docker安装consul 实现代码 运行结果 使用consul四大特性 1. 服务发现:利用服务注册,服务发现功能来实现服务治理. 2. 健康检查:利用consul注册的检查检查函数或脚本来判断服务是否健康,若服务不存在则从注册中心移除该服务,减少故障服务请求. 3. k/v数据存储:存储kv数据,可以作为服务配置中心来使用. 4. 多数据中心:可以建立多个consul集群通过inter网络进行互联,进一步保证数据可用性. 通过docker安装consul

  • 配置管理和服务发现之Confd和Consul使用场景详解

    目录 Confd和Consul是什么鬼? Confd Consul Confd Consul Confd+Consul 案例1 案例2 Confd和Consul是什么鬼? Confd和Consul都是用于配置管理和服务发现的工具. https://www.consul.io/ https://www.tail-f.com/confd-basic/ Confd Confd是一个轻量级的工具,用于管理分布式系统中的配置文件.它通过将配置文件和模板分离来解决配置管理的挑战.Confd监视由Etcd.Z

随机推荐