Spring Cloud Eureka高可用的服务注册中心(二)

GMaya原创大约 3 分钟Spring CloudSpring CloudEureka

来看看Eureka的高可用是怎么回事

集群原理图

如果只有一个注册中心(服务端),一旦挂掉,就直接GG,在分布式系统中,任何地方存在单点故障,整个系统就不是高可用的。(自己手画的难看见谅)

在这里插入图片描述
在这里插入图片描述

创建服务端2

在上一篇文章中写了最简单的单服务端,单客户端的例子。所以,在上一篇的基础上,继续新建一个服务端,起名字叫做服务端2 登录spring官网 https://start.spring.io/open in new window 保存到本地之后,导入项目 服务器2(EurekaServerTwo)启动类添加注解

@EnableEurekaServer

在这里插入图片描述 修改EurekaServerTwo配置文件application.yml

server:
  port: 8762
eureka:
  client:
    service-url:
      # #注册中心路径,表示我们向这个注册中心注册服务,如果向多个注册中心注册,用“,”进行分隔
      # 向端口8761注册(两个服务端互相注册)
      defaultZone: http://server01:8761/eureka/
    # 指示此实例是否应将其信息注册到eureka服务器以供其他服务发现,默认为false
    register-with-eureka: false
  instance:
    # 该服务实例所在主机名
    hostname: server02
  server:
    # 启用自我保护机制,默认为true
    enable-self-preservation: false
spring:
  profiles: server02

修改服务器1EurekaServer

修改EurekaServer项目的配置文件application.yml

server:
  port: 8761
eureka:
  client:
    service-url:
      # 注册中心路径,表示我们向这个注册中心注册服务,如果向多个注册中心注册,用“,”进行分隔
      # 向端口8762注册(两个服务端互相注册)
      defaultZone: http://server02:8762/eureka/
    # 指示此实例是否应将其信息注册到eureka服务器以供其他服务发现,默认为false
    register-with-eureka: false
  instance:
    # 该服务实例所在主机名
    hostname: server01
  server:
    # 启用自我保护机制,默认为true
    enable-self-preservation: false
spring:
  profiles: server01

修改电脑hosts文件

修改host文件添加对application.yml配置文件中hostname的映射 打开电脑C:\Windows\System32\drivers\etc 找到hosts,在文件最后输入

127.0.0.1    server01
127.0.0.1    server02

注意使用管理员权限,不然没办法保存

启动查看效果

修改启动配置项 在服务器1配置

-Dspring.profiles.active=server01

在服务器2配置

-Dspring.profiles.active=server02

启动服务器1,启动服务器2,启动客户端 如果在启动中报错,先则是因为服务器1向服务器2注册没有连接上,等你服务器2启动完毕就不会报错了。 最终在浏览器查看效果 http://localhost:8761/open in new windowhttp://localhost:8762/open in new window

停止服务器1

此时检验效果,停止服务器1,即端口号为:8761的服务器 稍微等待一会,因为有默认的失效时间。 查看http://localhost:8762open in new window 此时客户端已经消失, 这是因为客户端没有配置服务器2的注册。

修改客户端

修改EurekaClient项目的配置文件application.yml 将两个注册中心全部配置上去

spring:
  application:
    name: eureka-client
server:
  port: 8711
eureka:
  client:
    service-url:
      #注册中心路径,表示我们向这个注册中心注册服务,如果向多个注册中心注册,用“,”进行分隔
      defaultZone: http://server01:8761/eureka/,http://server02:8762/eureka/

将server02注册进来,重新启动服务端1,服务端2,客户端,再次演示上面断掉服务端1的操作 这个时候server02就能一直显示客户端的注册

这样就算一个服务器挂掉,对整体也不会有影响了。

上次编辑于:
贡献者: “GMaya”,“guofulin”