Spring-boot 集成 consul

随着大数据时代的到来,分布式是解决大数据问题的一个主要手段,随着越来越多的分布式的服务,如何在分布式的系统中对这些服务做协调变成了一个很棘手的问题。我们在一个项目上注册了很多服务,在进行运维时,需要时刻关注服务的运行状态,统一管理。统一配置。今天我们就来看看如何使用C# ,利用开源对分布式服务做协调。

在对分布式的应用做协调的时候,主要会碰到以下的应用场景:

  • 业务发现(service discovery)

找到分布式系统中存在那些可用的服务和节点

  • 名字服务 (name service)

通过给定的名字知道到对应的资源

  • 配置管理 (configuration management)

如何在分布式的节点中共享配置文件,保证一致性。

  • 故障发现和故障转移 (failure detection and failover)

当某一个节点出故障的时候,如何检测到并通知其它节点, 或者把想用的服务转移到其它的可用节点

  • 领导选举(leader election)

如何在众多的节点中选举一个领导者,来协调所有的节点

  • 分布式的锁 (distributed exclusive lock)

如何通过锁在分布式的服务中进行同步

  • 消息和通知服务 (message queue and notification)

如何在分布式的服务中传递消息,以通知的形式对事件作出主动的响应

Consul

Consul是用Go开发的分布式服务协调管理的工具,它提供了服务发现,健康检查,Key/Value存储等功能,并且支持跨数据中心的功能。consul提供的一些关键特性:

  • service discovery:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。

  • health checking:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。

  • key/value storage:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。

  • multi-datacenter:无需复杂的配置,即可支持任意数量的区域。

Consul基于HTTP的API可以方便的和各种语言进行绑定,C# 语言绑定https://github.com/PlayFab/consuldotnet

Spring-boot 集成 consul_第1张图片

Consul在Cluster上的每一个节点都运行一个Agent,这个Agent可以使用Server或者Client模式。Client负责到Server的高效通信,相对为无状态的。 Server负责包括选举领导节点,维护cluster的状态,对所有的查询做出响应,跨数据中心的通信等等。

一、下载

consul官网已经有编译好的二进制包,支持各种平台:win、linux等等,下载符合你平台的软件包:https://www.consul.io/,下载包:https://releases.hashicorp.com/consul/1.8.0/consul_1.8.0_windows_amd64.zip 解压完毕后只有一个consul.exe文件。

解压到你自定义的文件夹下,然后用命令行进行安装,在环境变量中配置你的consul.exe路径,执行命令:C:\Users\Administrator\Desktop\consul>consul.exe

Spring-boot 集成 consul_第2张图片

Spring-boot 集成 consul_第3张图片

安装完成后,agent就可以启动了。agent可以运行在server或者client模式,每个数据中心至少有一个agent运行在server模式,一般建议是3或者5个server。部署单个server是非常不好的,因为在失败场景中出现数据丢失是不可避免的。本文涵盖的是创建一个新的数据中心,所有其他的agents都运行在client模式,这是一个非常轻量级的服务注册进程,它会运行健康监测,并将查询结果转发到服务。agent必须运行在集群中的每一个节点上。

我们在consul目录下输入:consul agent -server -bootstrap-expect 2 -data-dir D:\sofeware\consul -node=n1 -bind=192.168.137.1

Spring-boot 集成 consul_第4张图片

其中:-bootstrap-expect 2(表示在两个集群中选择一个leader,改为1的话,那就是默认自己为leader);

          -server (表示agent是以服务器的方式进行启动)

          -bind=10.7.19.148(绑定的是本机的地址)

          -node=n1(表示启动时设置的节点名称,这里节点名为n1)

          -data-dir C:\Users\Administrator\Desktop\consul(表示consul的文件路径)

如果去掉-server,也就是启动命令改为:consul agent  -data-dir C:\Users\Administrator\Desktop\consul -node=n3 -bind=10.7.19.148  -dc=dc1  便是也client的方式进行启动。

在日志中我们会发现它会提示没有发现 Consul servers的存在。然后我们配置项目集成到consul,最后查看consul的web界面

1,添加相关依赖文件

Spring-boot 集成 consul_第5张图片

2,新增bootstarp.yml,在application.yml。中增加如下配置(图2)

spring:
  application:
    name: pro- service
  cloud :
    consul :
      discovery:
        health-check-path: /actuator/health #检测实例健康
        health-check- interval: 10s
        #每隔1es检查
        hostname: localhost
        #配置实例地址
        register: true # 自动注册
        service-name: ${spring. application.name} #实例名称
      host: localhost
      port: 8500
cloud:
    consul:
      host: localhost
      port: 8500
      discovery: # 服务发现配置
        enabled: true
        register: true
        deregister: true
        prefer-ip-address: true
        health-check-interval: 10s
        health-check-critical-timeout: 30s
        health-check-path: /actuator/health
        service-name: ${spring.application.name}
        instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port} # 应用名称+服务器IP+端口

3,在浏览器输入localhost:8500 就可以看到了

Spring-boot 集成 consul_第6张图片

你可能感兴趣的:(java,web)