首页 > 其他分享 >Spring Cloud开发实践(五): Consul - 服务注册的另一个选择

Spring Cloud开发实践(五): Consul - 服务注册的另一个选择

时间:2023-05-17 23:45:17浏览次数:45  
标签:11.22 Consul 192.168 server agent Spring data consul Cloud

目录

关于 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 退出

参考

标签:11.22,Consul,192.168,server,agent,Spring,data,consul,Cloud
From: https://www.cnblogs.com/milton/p/17410694.html

相关文章

  • SpringBoot(11) -- Logging
    SpringBoot默认使用的日志框架是logback,所以引入Web依赖后直接使用Logger.引入SpringBoot的Web依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>demo的目录结构......
  • java基于springboot+vue的篮球竞赛预约平台、比赛预约管理系统,附源码+数据库+lw文档+P
    1、项目介绍根据篮球竞赛预约平台的功能需求,进行系统设计。前台功能:用户进入系统可以实现首页,竞赛项目,平台公告,个人中心,后台管理等功能进行操作;后台由管理员和用户,主要功能包括首页,个人中心,用户管理,项目分类管理,竞赛项目管理,赛事预约管理,系统管理等功能;系统对这些功能进行整合......
  • Spring的原型Bean(Prototype)声明和注入方式
    目录一、了解单例和原型Bean1.1什么是单例Bean?什么是原型Bean?1.2如何去定义一个原型Bean二、注入原型Bean的方法2.1使用ApplicationContext的getBean每次进行获取2.2使用@Lookup注解三、使用场景四、参考一、了解单例和原型Bean1.1什么是单例Bean?什么是原型Bean?单例Bean,......
  • spring validation 分组手动校验
    定义两个分组接口GroupDefaultOne、GroupDefaultTwo,接口可以继承javax.validation.groups.Default类,也可以不继承。如果继承那么当校验分组的时候,会自动校验没有带分组的参数注解,如@NotNull(message="xxxx不能为Null")如果不继承那么当校验分组的时候,只会校验带了对应......
  • 【渗透测试】关闭springboot中actuator监控
    正常情况下,为了安全,可以通过如下配置关闭监控点management:endpoints:enabled-by-default:false之后访问如health,info等端点,就会报404了,但是如果单纯的访问/actuator路径,还是会有一些信息返回的,这样至少说明了/actuator路径是可以访问的,此时如果有严格的安全渗透......
  • springCloud Alibaba服务的注册与发现之eureka客户端注册
    1、在客户端maven项目中添加eureka客户端依赖<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>2、在工程application.yml文件中......
  • SpringBoot基于注解来动态切换数据源
    前言我们在日常开发中,经常会用到多数据源,实现的方式有很多种,我这里分享一种通过动态数据源的方式来实现多数据源。通过自定义一个注解DS加上AOP来动态切换数据源。我们的注解可以作用于类、方法、接口、接口方法上。优先级为:类方法>类>接口方法>接口SpringBoot的动态数据源,实际......
  • Spring Boot整合Mybatis Plus逆向工程
    1.导入依赖主要导入Mybatis-Plus-generator版本需要与Mybatis-Plus版本一致<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</versio......
  • 4大特性看Huawei Cloud EulerOS为开发者带来平滑迁移体验
    摘要:本期《解密HuaweiCloudEulerOS算力释放技术》主题直播中,华为云DTSE技术布道师陆维迪通过剖析传统OS上云面临的性能,安全,弹性等问题,与开发者们分享HuaweiCloudEulerOS(简称“HCEOS”)在提升客户云上使用体验的核心优势和关键技术。本文分享自华为云社区《4大特性看Huawei......
  • SpringBoot项目预加载数据——ApplicationRunner、CommandLineRunner、InitializingBe
    0、参考、业务需求参考:https://www.cnblogs.com/java-chen-hao/p/11835120.html#_label1https://zhuanlan.zhihu.com/p/541268993业务需求:缓存数据字典数据、初始化线程池、提前加载好加密证书1、方式实现ApplicationRunner接口实现CommandLineRunner接口实现In......