风萧萧兮易水寒

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

集群原理图

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

创建服务端2

在上一篇文章中写了最简单的单服务端,单客户端的例子。所以,在上一篇的基础上,继续新建一个服务端,起名字叫做服务端2
登录spring官网 https://start.spring.io/

保存到本地之后,导入项目

服务器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/

http://localhost:8762/

停止服务器1

此时检验效果,停止服务器1,即端口号为:8761的服务器

稍微等待一会,因为有默认的失效时间。
查看http://localhost:8762
此时客户端已经消失,

这是因为客户端没有配置服务器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就能一直显示客户端的注册

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

坚持原创技术分享,您的支持将鼓励我继续创作!