SpringCloud搭建微服务框架(四)- 集群环境搭建

前面的内容中,搭建的组件无论是eureka server、eureka client(服务提供方和服务消费方)还是zuul网关,都是单个应用,并没有集群环境,这篇文章会显示集群环境的搭建,并且填上一些之前没有提到的坑。

1.Eureka server集群环境搭建

主要是修改配置文件,原eureka server的配置文件:

spring:
  application:
    name: spring-cloud-eureka
server:
  port: 8761
eureka:
  instance:
    hostname: peer1
  client:
    registerWithEureka: false #是否将自己注册到eureka server,构建集群环境时,需将自己注册到集群中,默认为true
    fetchRegistry: false #是否从eureka server获取注册信息,构建集群环境时,需同步其他eureka server节点,默认为true
    serviceUrl:
      defaultZone: http://127.0.0.1:8761/eureka/

集群配置主要修改以下几点

  • registerWithEureka: true,将自身注册到集群中,该配置属性默认为true
  • fetchRegistry: true,用于集群环境中,与其他eureka server节点同步注册信息,默认为true
  • defaultZone: 除自身外的其他eureka server节点url
  • 添加spring.profiles=peer1配置,用于同一个jar包在不同机器或者同一台机器上运行加载不同配置,运行jar包:java -jar xxx.jar --spring.profiles.active=peer1,(注:这里的peer1跟hostname的peer1没有关系)。也可不使用spring.profiles,运行jar包时用:java -jar xxx.jar --server.port=8761,加载对应配置
  • 多份配置之间用"---"分隔

新加的与集群环境无关的配置

  • 当注册到注册中心的微服务实例不可用时,eureka server会在一定时间(默认90秒)后移除该实例,但这个时间间隔可能有些过长而导致不能及时剔除不可用的实例,这个时候需更改eureka server的清理时间间隔(需将eureka server的自我保护功能关闭
  • 由于eureka server服务注册中心会被部署到那台机器上是不确定(或者说可能变动)的,如果把注册中心url直接配置在配置文件中,当注册中心变动时,需修改代码后重新部署,因此一般采取的做法是,在/etc/hosts(Windows下为:C:\Windows\System32\drivers\etc)文件中添加:127.0.0.1 peer1,注册中心url用peer1表示:defaultZone: http://peer1:8761/eureka/
  • 微服务实例注册到注册中心时,默认将主机名注册到注册中心,此时微服务的各组件若部署在不同的机器上,可能会导致服务间调用或网关转发失效(因为从注册中心获取的服务实例的主机名,若未正确配置域名解析服务,主机名不能转换为对应的IP),所以需修改为以IP地址注册到服务中心

修改为集群环境的配置文件如下:

# 需配置host文件,
# windows下为:C:\Windows\System32\drivers\etc
# linux下为:/etc/hosts
# 127.0.0.1 peer1
# 127.0.0.1 peer2
# 127.0.0.1 peer3
# 若配置eureka多台服务器集群,则修改peer1、peer2、peer3为对应服务器的IP
spring:
  profiles: peer1
  application:
    name: spring-cloud-eureka
server:
  port: 8761
eureka:
  instance:
    hostname: peer1
    prefer-ip-address: true #以IP地址注册到服务中心,相互注册使用IP地址
  client:
    registerWithEureka: true #是否将自己注册到eureka server,构建集群环境时,需将自己注册到集群中,默认为true
    fetchRegistry: true #是否从eureka server获取注册信息,构建集群环境时,需同步其他eureka server节点,默认为true
    serviceUrl:
      defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/
  #解决eureka server不剔除已停掉的节点问题,更改Eureka更新频率将打破服务器的自我保护功能
  server:
    enableSelfPreservation: false #设为false,关闭自我保护功能
    evictionIntervalTimerInMs: 4000 #清理间隔(单位毫秒)

---
spring:
  profiles: peer2
  application:
    name: spring-cloud-eureka
server:
  port: 8762
eureka:
  instance:
    hostname: peer2
    prefer-ip-address: true #以IP地址注册到服务中心,相互注册使用IP地址
  client:
    registerWithEureka: true #是否将自己注册到eureka server,构建集群环境时,需将自己注册到集群中,默认为true
    fetchRegistry: true #是否从eureka server获取注册信息,构建集群环境时,需同步其他eureka server节点,默认为true
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/
  #解决eureka server不剔除已停掉的节点问题,更改Eureka更新频率将打破服务器的自我保护功能
  server:
    enableSelfPreservation: false #设为false,关闭自我保护功能
    evictionIntervalTimerInMs: 4000 #清理间隔(单位毫秒)

---
spring:
  profiles: peer3
  application:
    name: spring-cloud-eureka
server:
  port: 8763
eureka:
  instance:
    hostname: peer3
    prefer-ip-address: true #以IP地址注册到服务中心,相互注册使用IP地址
  client:
    registerWithEureka: true #是否将自己注册到eureka server,构建集群环境时,需将自己注册到集群中,默认为true
    fetchRegistry: true #是否从eureka server获取注册信息,构建集群环境时,需同步其他eureka server节点,默认为true
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/
  #解决eureka server不剔除已停掉的节点问题,更改Eureka更新频率将打破服务器的自我保护功能
  server:
    enableSelfPreservation: false #设为false,关闭自我保护功能
    evictionIntervalTimerInMs: 4000 #清理间隔(单位毫秒)

注:如果想在idea中通过不同端口部署eureka server的集群环境,可通过如下步骤,在一个窗口中启动多个实例

1.点击右上角的Edit Configurations,如下图所示:

2.将右上角的Single instance only取消勾选,在红色框的Active Profiles中填入配置文件中想加载的那套配置的spring.profiles,Name可任意填写,但是为了作区分,一般跟Active Profiles相同值

3.点击Appay->OK,启动多个实例

注:这里配置了三个端口,会启动三个集群节点,当启动前两个的时候,自身需注册到集群eureka server中,但是由于另外两个(或一个)注册中心节点未启动,注册不进去会报错,但是这里并不影响,程序运行没有问题,启动最后一个eureka server节点不会报错。

注:启动时,application.yml文件一定要设置正确的编码(UTF-8),不然会报异常Caused by: java.nio.charset.MalformedInputException: Input length = 1

依次启动三个eureka server节点后,访问注册中心http://localhost:8761/,可以看到确实启动了三个eureka server节点,并且注册到了注册中心

2.服务提供方集群环境搭建

主要也是修改application.yml配置文件,修改以下几个部分:

  • 注册中心url
  • 解决eureka server不及时剔除不可用节点问题
  • 以IP地址注册到注册中心
  • 添加对应的spring.profiles

这里启动了两个实例,启动后访问注册中心http://localhost:8761/,可以看到确实启动了PARAMETER-MODULE服务节点

3.服务消费方集群环境搭建

与服务提供方集群环境搭建类似,这里不作演示

4.网关集群环境搭建

关于网关是否需做集群环境,个人觉得没太大必要,因为网关是微服务的统一入口,若网关做了集群,那么统一入口就没有了,可以想到的是用nginx作负载均衡,但是当请求量非常大时,统一入口负载均衡器仍旧可以成为瓶颈。那么对应这种情况,其实真正需要做的是去中心化,一种解决方法是,利用域名解析服务器作为负载均衡器。有兴趣的可以详细了解一下。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Cloud是一个基于Spring Boot的微服务框架,该框架主要用于快速搭建和管理分布式系统中的微服务架构。下面我将以简书为例,简要介绍Spring Cloud微服务框架搭建过程。 1. 创建Spring Boot项目:首先,我们需要创建一个Spring Boot项目作为微服务的基础。可以通过Spring Initializr来快速创建一个Spring Boot项目,选择相应的依赖,如Spring Web、Eureka Discovery等。 2. 配置服务注册中心:在Spring Cloud中,Eureka被广泛用作服务注册和发现的中心。在项目的配置文件中,添加Eureka的配置,指定注册中心的地址。 3. 创建微服务:在项目中,创建需要的微服务模块,例如用户服务、文章服务、评论服务等。每个微服务都是一个独立的Spring Boot应用,可以独立运行和部署。 4. 配置服务间的通信:微服务之间需要进行通信,可以使用Spring Cloud提供的Feign或RestTemplate来实现。在服务之间的API接口中,通过注解的方式定义接口,使得服务之间的调用更加简洁。 5. 配置服务网关:为了统一管理微服务接口的访问和安全,可以使用Spring Cloud Gateway作为服务网关。通过配置路由规则和过滤器,对外暴露统一的API接口。 6. 配置服务熔断与降级:在分布式系统中,不可避免地会遇到服务不可用或故障的情况。可以使用Spring Cloud提供的Hystrix进行熔断和降级处理,保证系统的稳定性。 7. 配置服务监控与追踪:为了对微服务进行监控和追踪,可以使用Spring Cloud提供的Actuator和Sleuth。Actuator可以暴露微服务的运行指标,Sleuth可以追踪微服务之间的调用链路。 8. 部署与管理:最后,将各个微服务打包成独立的Docker镜像,并通过Docker容器技术进行部署。使用Kubernetes、Docker Swarm或者Mesos等容器管理工具,可以更好地管理和扩展微服务集群。 以上是简要的Spring Cloud微服务框架搭建过程,通过这个框架,可以实现高可用、弹性、可伸缩的分布式系统架构,帮助开发者更快速地构建和管理微服务应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值