Consul 入门-运行

HashiCorp

Consul 是由 HashiCorp 公司开发的,它是一家专注于 DevOps 工具链的公司,旗下的明星级产品包括 Vagrant、Terraform、Vault、Nomad 以及 Consul,这些工具贯穿了持续交付的整个流程。

Consul 入门-运行

下载

Consul 官网可以知道不同系统对应的下载方式
macOS

$ brew tap hashicorp/tap
$ brew install hashicorp/tap/consu

Windows
提供可二进制可执行程序的压缩包,分32位64位

Linux系
提供相应包管理器的下载方式

  • Ubuntu/Debian
$ curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
$ sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
$ sudo apt-get update && sudo apt-get install consul
  • CentOS/RHEL
$ 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
  • Fedora
$ sudo dnf install -y dnf-plugins-core
$ sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/fedora/hashicorp.repo
$ sudo dnf -y install consul
  • Amazon Linux
$ sudo yum install -y yum-utils
$ sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
$ sudo yum -y install consul
  • Homebrew
$ brew tap hashicorp/tap
$ brew install hashicorp/tap/consul

也提供对应操作架构的二进制下载链接

另外,Consul 是通过 Golang 编写的开源软件,可以从 Github 上找到源码自行编译。

$ git clone https://github.com/hashicorp/consul.git -depth=1
$ cd consul
$ make tools
$ make dev

运行 Server&Client

回顾上一篇《Consul 入门-初识》,我们知道 Consul 是 C/S 架构以及各端能力
运行 Server

$ consul agent --server=true --ui=true --data-dir=s-data --node=server1 --dev
==> Starting Consul agent...

           Version: '1.9.4'
           Node ID: '34d5bfeb-3ed4-6aa1-f68d-d30950450fc9'
         Node name: 'server1'
        Datacenter: 'dc1' (Segment: '')
            Server: true (Bootstrap: false)
       Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
      Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
           Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false

==> Log data will now stream in as it occurs:
...

可以从输出信息里面看到 Server 节点的一些关键信息以及竞选 Leader 成功(毕竟只有它一个人)
运行 Client

$ consul agent  --data-dir=c-data --join=127.0.0.1:8301 --serf-lan-port=8303 --serf-wan-port=8305  --dns-port=8601 --server-port=8304   --http-port=8503  --server=false --enable-script-checks   --node=client1 --config-dir=config
==> Starting Consul agent...

           Version: '1.9.4'
           Node ID: '2b05ee18-1b09-3b0b-7431-ef79783d9758'
         Node name: 'client1'
        Datacenter: 'dc1' (Segment: '')
            Server: false (Bootstrap: false)
       Client Addr: [127.0.0.1] (HTTP: 8503, HTTPS: -1, gRPC: -1, DNS: 8601)
      Cluster Addr: 10.8.124.122 (LAN: 8303, WAN: 8305)
           Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false
...

程序同样会显示 Client 的一些相信息,由于Server 和 Client 是运行在同一台机器上,默认端口与 Server 的冲突了,所以通过参数 --serf-lan-port=8303 --serf-wan-port=8305 --dns-port=8601 --server-port=8304 --http-port=8503 进行了指定。

此时我们观察 Server 端的程序输出内容,可以看到 Client1 与 Server 的连接信息:

  2021-08-29T16:47:10.385+0800 [DEBUG] agent.router.manager: Rebalanced servers, new active server: number_of_servers=1 active_server="server1 (Addr: tcp/127.0.0.1:8300) (DC: dc1)"
  2021-08-29T16:47:10.385+0800 [DEBUG] agent.router.manager: Rebalanced servers, new active server: number_of_servers=1 active_server="server1.dc1 (Addr: tcp/127.0.0.1:8300) (DC: dc1)"
  2021-08-29T16:48:04.265+0800 [DEBUG] agent: Skipping remote check since it is managed automatically: check=serfHealth
  2021-08-29T16:48:04.265+0800 [DEBUG] agent: Node info in sync
  2021-08-29T16:49:18.849+0800 [DEBUG] agent: Skipping remote check since it is managed automatically: check=serfHealth
  2021-08-29T16:49:18.849+0800 [DEBUG] agent: Node info in sync
  2021-08-29T16:49:18.993+0800 [DEBUG] agent.server.memberlist.lan: memberlist: Stream connection from=127.0.0.1:54711
  2021-08-29T16:49:18.993+0800 [INFO]  agent.server.serf.lan: serf: EventMemberJoin: client1 10.8.124.122
  2021-08-29T16:49:18.993+0800 [INFO]  agent.server: member joined, marking health alive: member=client1
  2021-08-29T16:49:19.176+0800 [DEBUG] agent.server.serf.lan: serf: messageJoinType: client1
  2021-08-29T16:49:19.192+0800 [DEBUG] agent.server.serf.lan: serf: messageJoinType: client1
  2021-08-29T16:49:19.294+0800 [DEBUG] agent.server.serf.lan: serf: messageJoinType: client1
  2021-08-29T16:49:19.393+0800 [DEBUG] agent.server.serf.lan: serf: messageJoinType: client1

通过 Consul 的命令可以查看现在的成员情况:

$ consul members
Node     Address             Status  Type    Build  Protocol  DC   Segment
server1  127.0.0.1:8301      alive   server  1.9.4  2         dc1
client1  10.8.124.122:8303  alive   client  1.9.4  2         dc1

注册一个服务

我们先用 Ctrl-C 暂停 Client 端代码,在配置文件夹 config中增加文件 redis.json

{
  "service": [
  {
    "name": "redis",
    "tags": ["master"],
    "address": "127.0.0.1",
    "port": 6379,
  }
 ]
}

然后重新运行,可以看到服 redis 服务已经被注册

2021-08-29T17:03:04.556+0800 [INFO]  agent: Synced node info
2021-08-29T17:03:04.556+0800 [INFO]  agent: Synced service: service=redis

来验证一下是否可以通过 Consul 的dns服务找到

$ dig @127.0.0.1 -p 8601 redis.sevice.consul

; <<>> DiG 9.10.6 <<>> @127.0.0.1 -p 8601 redis.sevice.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<

除了通过 DNS 服务获取,还可以通过 HTTP 服务访问 http://localhost:8503/v1/health/service/redis

总结

本篇讲述了 Consul 背后的公司信息、Consul 的安装方式以及 Consul 的运行方式,最后通过注册 redis 服务的例子,体验了一把简单的服务注册和发现的流程。

Original: https://www.cnblogs.com/Zioyi/p/15202982.html
Author: Zioyi
Title: Consul 入门-运行

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/575870/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • [LeetCode]1221. 分割平衡字符串

    在一个「平衡字符串」中,’L’ 和 ‘R’ 字符的数量是相同的。 给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。 返回…

    数据库 2023年6月9日
    081
  • Mysql索引总结

    一、索引分类 Hash索引:Hash 索引查询效率很高,时间复杂度O(1)。Mysql Innodb引擎不支持hash索引的。Hash索引适合精确查找,不适合范围查找。 平衡二叉树…

    数据库 2023年5月24日
    058
  • 详解Threejs中的光源对象

    光源的分类 AmbientLight(环境光), PointLight(点光源), SpotLight(聚光源) 和 DirectionalLight(平行光)是基础光源 Hemi…

    数据库 2023年6月11日
    092
  • 利用VBS调戏别人,否则电脑关机

    利用VB脚本强制用户输入固定语句,否则系统将倒计时关机 将以下代码复制到文本文档中,保存后修改文件后缀名称为.vbs,打开该文件就可以看到效果了; on error resume …

    数据库 2023年6月11日
    073
  • 五分钟搞懂POM设计模式

    大家好,我是测试蔡坨坨。 今天,我们来聊聊Web UI自动化测试中的POM设计模式。 前期,我们学会了使用Python+Selenium编写Web UI自动化测试线性脚本 线性脚本…

    数据库 2023年6月11日
    0105
  • 折腾 2 年多!我们终于见面了!

    2018年3月,我与张老师就这么在微信上聊了起来,起初我并没有写书的打算,我们之间只是通过讨论、交流的形式聊聊关于出书的方方面面。最终,敌不过张老师超强的专业能力、细致的解说与盛情…

    数据库 2023年6月9日
    0159
  • springboot~用正则表达式提取bearer token

    前后一体的应用,是这样进行认证的 用户向服务端发送验证信息(用户名、密码); 服务端验证成功就向用户返回一个sessionid; 服务端保存了这个session_id对应的信息,并…

    数据库 2023年6月6日
    088
  • 数据库读写分离

    ———-数据库读写分离———- 环境准备:(两台虚拟机(centos7)可以连接外网 步骤1: 安装数据库,…

    数据库 2023年6月16日
    096
  • redis实现分布式锁导致的问题

    解决缓存击穿的问题(加锁) 1.虽然spring组件都是单例的,但是到了多个机器部署服务的情况下这种单机锁就不可行了 使用分布式锁 1.有可能占用锁的那个线程因为宕机没有删除锁,导…

    数据库 2023年6月16日
    077
  • Flume和 Sqoop

    vim flume-dir-hdfs.conf 添加如下内容 a3.sources = r3 a3.sinks = k3 a3.channels = c3 Describe/con…

    数据库 2023年6月16日
    076
  • bat 脚本启用及禁用网卡

    启用网卡 需要以管理员身份运行bat脚本 netsh interface set interface "Npcap Loopback Adapter" enab…

    数据库 2023年6月9日
    0115
  • Java关键字总结(一)

    static总结: 1、修饰静态变量,通过类名.变量名,不需要实例化对象,属于静态资源,所有类实例共享 2、修饰静态方法,通过类名.方法,不需要实例化对象,属于静态资源,所有类实例…

    数据库 2023年6月6日
    0111
  • Vue 和 Django 实现 Token 身份验证

    使用 Django 编写的 B/S 应用通常会使用 Cookie + Session 的方式来做身份验证,用户登录信息存储在后台数据库中,前端 Cookie 也会存储少量用于身份核…

    数据库 2023年6月14日
    068
  • Java基础十—JavaIO

    CPU指令与内核态、用户态 在操作系统中,CPU负责执行指令,这些指令有些来自应用程序,有些是来自底层系统。有些指令是非常危险的,如清除内存,网络连接等等,如果错误调用的话有可能导…

    数据库 2023年6月6日
    0105
  • MP 的攻击 SQL 阻断解析器(V3.4.0)

    一、何为SQL阻断器 官网给出的一句话 阻止恶意的全表更新删除 官网地址已经总结的很到位了 二、具体是如何实现的 也很简单,通过MP(Mybatis-Plus)的拦截器来实现,官方…

    数据库 2023年6月6日
    078
  • 第十六章 Spring动态代理详解

    MethodInterceptor(方法拦截器) public class Arround implements MethodInterceptor { /* invoke方法: …

    数据库 2023年6月14日
    074
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球