目录

关于 Consul

HashiCorp Consul 是微服务网络解决方案之一, 用于管理跨网络和多云环境服务之间的安全网络连接, 提供服务发现, 服务网格, 流量管理和自动更新. 可以单独部署, 也可以分布式部署.

Consul 的特点

  • CP(强一致性),使用Raft复制状态
  • 服务可以通过任意Server注册, 通过 Raft 仲裁
  • 内建安全通信选项
  • 一致性提供锁定和集群协调
  • 带配置功能, 健康检查, Lock, KV, ACL
  • 通过 DNS 支持非 REST 节点, 允许更多类型资源连接
  • 使用 Go 语言编写, 启动资源消耗小, 只需要50-60MB内存, 相对比 Nacos 默认配置512M, 启动需要600M以上内存.
  • 脚本化配置, 对容器部署方式更友好

安装

下载地址 https://developer.hashicorp.com/consul/downloads, 根据自己的系统选择对应的二进制文件, 对应 Linux AMD64 的, 文件还不小, 50MB, 解压后只有一个可执行文件, 127MB, 将其放到 /opt/consul/ 目录, 并将owner改为 root:root

运行 Agent

Consul 的运行形式就是 Agent, 可以运行为 server 或 client 模式. Agent 的启动命令格式为

consul agent <options>

具体的命令参数可以通过consul agent --help查看, 常用的参数

  • -bind= 用于cluster通信的地址
  • -client= 用于client访问的地址, 包含 RPC, DNS, HTTP, HTTPS, gRPC (if configured).
  • -config-dir= 配置文件所在目录, 读取所有 .json 后缀的文件作为配置, 可以指定多次
  • -config-file= 配置文件路径, 可以指定多次
  • -data-dir= 指定agent状态数据存储目录
  • -dev 以开发模式启动
  • -log-file= 指定日志文件路径
  • -log-json 使用JSON格式记录日志
  • -log-level= 日志级别
  • -log-rotate-bytes= 日志文件字节数约束
  • -log-rotate-duration= 日志文件时间跨度
  • -log-rotate-max-files= 日志保留的文件数
  • -node= 指定本节点名称, 在 Cluster 内必须唯一
  • -node-id= 指定Node ID, 默认为自动生成并记录到 data-dir
  • -retry-join= 启动时尝试加入的 Agent 地址
  • -server 服务器模式
  • -ui 启用内建的静态Web UI界面
  • -ui-content-path= UI界面地址, 默认为 /ui/

开发模式

-dev参数可以快速创建一个开发模式的server, 数据不保存, Node ID随机生成, Node name使用当前的hostname, 监听 127.0.0.1, 可以看下面的控制台输出, HTTP等服务使用的是127.0.0.1地址, 只能从本机访问

$ consul agent -dev
==> Starting Consul agent...
Version: '1.15.2'
Build Date: '2023-03-30 17:51:19 +0000 UTC'
Node ID: 'ab2e7536-867a-c12f-5bd6-8a825b31af90'
Node name: 'centos7001'
Datacenter: 'dc1' (Segment: '<all>')
Server: true (Bootstrap: false)
Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, gRPC-TLS: 8503, DNS: 8600)
Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
Gossip Encryption: false
Auto-Encrypt-TLS: false
HTTPS TLS: Verify Incoming: false, Verify Outgoing: false, Min Version: TLSv1_2
gRPC TLS: Verify Incoming: false, Min Version: TLSv1_2
Internal RPC TLS: Verify Incoming: false, Verify Outgoing: false (Verify Hostname: false), Min Version: TLSv1_2 ==> Log data will now stream in as it occurs: 2023-05-17T06:31:23.337Z [DEBUG] agent.grpc.balancer: switching server: target=consul://dc1.ab2e7536-867a-c12f-5bd6-8a825b31af90/server.dc1 from=<none> to=<none>

如果在远程服务器上运行, 需要加上-client参数, 指定服务器网口IP地址, 这样就可以从本地访问 http://192.168.11.22:8500 的 Web控制台了

consul agent -dev -client=192.168.11.22

在另一个终端窗口中, 可以通过consul members命令查看节点, 如果不加-http-addr参数, 默认访问本地127.0.0.1

$ consul members -http-addr=http://192.168.11.22:8500
Node Address Status Type Build Protocol DC Partition Segment
centos7001 127.0.0.1:8301 alive server 1.15.2 2 dc1 default <all>

通过consul leave停止consul服务

$ consul leave -http-addr=http://192.168.11.22:8500
Graceful leave complete

单Server模式

如果不使用-dev, 就要手工指定一些参数, 否则启动会有错误

consul agent -ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22

去掉了 -dev 参数, 增加了三个新参数,

  • -ui 开启 8500 端口的 web 控制台, 这个不是必须的
  • -server 和 -bootstrap-expect=1 一起使用, 前者表示用server模式启动, 后者表示只有一台服务器, 可以立即产生leader, 也必须指定. 如果不指定后者, consul会一直等待 leader 的产生

集群模式

集群模式下, 每个 Datacenter 必须至少有一台 server. 建议是3或5台, 单server在宕机时会造成数据丢失. 其它 Agent 运行为 client 模式.

下面以一台Server, 一台Client为例说明

在 11.22 主机上运行 Server

consul agent -ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22 -bind=192.168.11.22

在 11.23 主机上运行 Client, 并 Join 到 11.22

consul agent -ui -data-dir=./data -client=192.168.11.23 -bind=192.168.11.23 -retry-join=192.168.11.22

Join 成功后, 在两边的控制台上会显示相应信息. 这时候通过consul members可以看到两个Node:

 /opt/consul/consul members -http-addr=http://192.168.11.22:8500
Node Address Status Type Build Protocol DC Partition Segment
centos7001 192.168.11.22:8301 alive server 1.15.2 2 dc1 default <all>
54120-nc01 192.168.11.23:8301 alive client 1.6.1 2 dc1 default <default>

后台运行

不留日志

nohup /opt/consul/consul agent -ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22 -bind=192.168.11.22 >/dev/null 2>&1 &

日志输出到文件

nohup /opt/consul/consul agent -ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22 -bind=192.168.11.22 >path/to/log/consul.log 2>&1 &

这样consul会在后台运行, 需要用 consul leave 退出

参考

Spring Cloud开发实践(五): Consul - 服务注册的另一个选择的更多相关文章

  1. Spring Cloud开发实践 - 02 - Eureka服务和接口定义

    服务注册 EurekaServer Eureka服务模块只有三个文件, 分别是pom.xml, application.yml 和 EurekaServerApplication.java, 内容如下 ...

  2. Spring Cloud(二):服务注册与发现 Eureka【Finchley 版】

    Spring Cloud(二):服务注册与发现 Eureka[Finchley 版]  发表于 2018-04-15 |  更新于 2018-05-07 |  上一篇主要介绍了相关理论,这一篇开始我们 ...

  3. Spring Cloud开发人员如何解决服务冲突和实例乱窜?(IP实现方案)

    一.背景 在我上一篇文章<Spring Cloud开发人员如何解决服务冲突和实例乱窜?>中提到使用服务的元数据来实现隔离和路由,有朋友问到能不能直接通过IP来实现?本文就和大家一起来讨论一 ...

  4. Alibaba Nacos 学习(三):Spring Cloud Nacos Discovery - FeignClient,Nacos 服务注册与发现

    Alibaba Nacos 学习(一):Nacos介绍与安装 Alibaba Nacos 学习(二):Spring Cloud Nacos Config Alibaba Nacos 学习(三):Spr ...

  5. Spring Cloud开发实践 - 01 - 简介和根模块

    简介 使用Spring Boot的提升主要在于jar的打包形式给运维带来了很大的便利, 而Spring Cloud本身的优点不是那么明显, 相对于Dubbo而言, 可能体现在跨语言的交互性上(例如可以 ...

  6. Spring Cloud 系列之 Eureka 实现服务注册与发现

    如果你对 Spring Cloud 体系还不是很了解,可以先读一下 Spring Cloud 都有哪些模块 Eureka 是 Netflix 开源的服务注册发现组件,服务发现可以说是微服务架构的核心功 ...

  7. Spring Cloud开发实践 - 04 - Docker部署

    Docker的安装和命令可以参考 https://www.cnblogs.com/milton/p/9866963.html . 资源规划 这一步要区分传统资源和Docker资源, 为后面的细节定好基 ...

  8. Spring Cloud开发人员如何解决服务冲突和实例乱窜?

    一.背景 在我们开发微服务架构系统时,虽然说每个微服务都是孤立的可以单独开发,但实际上并非如此,要调试和测试你的服务不仅需要您的微服务启动和运行,还需要它的上下文服务.依赖的基础服务等都要运行:但如果 ...

  9. 【Spring Cloud学习之二】服务注册和发现

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 Spring Cloud 1.2 一.EurekaEureka是Netflix开源的一个RESTful服务,主要用于服 ...

  10. Spring Cloud(一):服务注册中心Eureka

    Spring Cloud 基于 Netflix 的几个开源项目进行了封装,提供包括服务注册与发现(Eureka),智能路由(Zuul),熔断器(Hystrix),客户端负载均衡(Ribbon)等在内的 ...

随机推荐

  1. Thinkpad键盘操作手册与驱动 thinkpad蓝牙键盘KT-1525 manual

    thinklife mechanical keyboard tk500_win10.exe https://pan.baidu.com/s/1pQM3RcgV-phugew6vcKDLw

  2. ElasticSearch 实现分词全文检索 - term、terms查询

    数据准备 ElasticSearch 实现分词全文检索 - 测试数据准备 ElasticSearch的各种查询 不会对查询关键字进行分词 term 查询 term的查询是代表完全匹配,搜索之前不会对你 ...

  3. 文件包含(File Inclusion)

    什么是文件包含? 本室旨在为您提供利用文件包含漏洞的基本知识,包括本地文件包含 (LFI).远程文件包含 (RFI) 和目录遍历.此外,我们将讨论这些漏洞被发现后的风险以及所需的补救措施 在某些情况下 ...

  4. PHP 数据库操作

    连接数据库 连接数据库常用的函数 mysqli_connect(主机IP,用户名,密码,数据库名,端口号) // 端口号如果是3306可以省略 mysqli_connect_error():获取连接数 ...

  5. ansible用authorized_key模块批量推送密钥到受控主机实现免密登录

    一,ansible的authorized_key模块的用途 用来配置密钥实现免密登录: ansible所在的主控机生成密钥后,如何把公钥上传到受控端? 当然可以用ssh-copy-id命令逐台手动处理 ...

  6. 在CentOS中安装和使用nginx

    概述 本文简单讲述一下,如何快速将一个内网的Web服务通过nginx提供给外网访问,并且启用HTTPS.例如我们部署了一个kubesphere,地址为192.168.202.151:30880,需要通 ...

  7. 使用cmd命令行安装 windows系统

    条件:Microsoft WindowsPE 或其他第三方 WindowsPE 1. 使用 diskpart 分区: list disk:列出所有磁盘 select disk  编号:选择某块磁盘 c ...

  8. Java多线程开发CompletableFuture的应用

    ​做Java编程,难免会遇到多线程的开发,但是JDK8这个CompletableFuture类很多开发者目前还没听说过,但是这个类实在是太好用了,了解它的一些用法后相信你会对它爱不释手(呸渣男,咋对谁 ...

  9. Spring 的核心组件详解

    Spring 总共有十几个组件,但是真正核心的组件只有三个:Core.Context 和 Bean.它们构建起了整个 Spring的骨骼架构,没有它们就不可能有 AOP.Web 等上层的特性功能. 一 ...

  10. forEach如何终止循环

    try { try { this.list.forEach(item => { ..... throw new Error('end') }) } catch(err) { console.lo ...