Eureka-服务注册中心高可用配置

在生产应用中,服务注册中心作为核心组件,一般会进行集群配置成高可用模式。

下面将对2个实例,3个实例的方式进行简介。

 

使用的版本情况如下

1.spring boot

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.0.4.RELEASE</version>

2.spring cloud

<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>

 

一、两个实例的情况

两个eureka实例,实现相互注册,部署到同一台服务器或不同服务器上,已基本能满足要求不高的生产使用。

下面对两个实例,相互注册实现高可用的情况进行简介

 

1.首先,修改yml文件

我们在原有的yml文件基础上,新建两个跟实例启动相关的子文件,如分别命名为

application-peer1.yml,application-peer2.yml (后面的label可随意,但是要跟后面hosts文件添加的一致)

其中application-peer1.yml内容为

spring:

  application:

    name: eureka-server

  profiles: peer1

  cloud:

    client:

      ipAddress: 127.0.0.1

server:

  port: 8761

eureka:

  instance:

    hostname: peer1

    lease-expiration-duration-in-seconds: 30 #续约到期时间(默认90秒)

    lease-renewal-interval-in-seconds: 10 #续约更新时间间隔(默认30秒),使得eureka及时剔除无效服务

    prefer-ip-address: false

    instance-id: ${spring.cloud.client.ipAddress}:${server.port} #使在eureka监控界面看到的实例为ip+port形式
    appname: eureka-server #这里要跟‘spring.application.name’一致,还有‘prefer-ip-address’为false,同时开启自身注册,‘available-replicas’有效副本才不为空

  client:

    serviceUrl:

    #以下测试高可用的配置--两个server相互注册

      defaultZone: http://peer2:8762/eureka/ #这里使用‘defaultZone’监控页面DS Replicas显示的是‘peer1’,使用‘default-zone’显示‘localhost’

#    register-with-eureka: false #是否注册到自身服务端,默认为true,高可用需要注册到本身

#    fetch-registry: false #是否从服务器拉取注册信息,默认为true

  #生产环境需要注释下面的配置,开启自我保护;

  server:

    enable-self-preservation: false #关闭自我保护模式(缺省为打开)

    eviction-interval-timer-in-ms: 10000 #续期时间,清理无效服务的时间间隔,默认是60*1000

application-peer2.yml内容为

spring:

  application:

    name: eureka-server

  profiles: peer2

  cloud:

      client:

        ipAddress: 127.0.0.1

server:

  port: 8762

eureka:

  instance:

    hostname: peer2

    lease-expiration-duration-in-seconds: 30 #续约到期时间(默认90秒)

    lease-renewal-interval-in-seconds: 10 #续约更新时间间隔(默认30秒),使得eureka及时剔除无效服务

    prefer-ip-address: false

    instance-id: ${spring.cloud.client.ipAddress}:${server.port} #使在eureka监控界面看到的实例为ip+port形式
    appname: eureka-server #这里要跟‘spring.application.name’一致,还有‘prefer-ip-address’为false,同时开启自身注册,‘available-replicas’有效副本才不为空

  client:

    serviceUrl:

    #以下测试高可用的配置--两个server相互注册

      defaultZone: http://peer1:8761/eureka/ #这里使用‘defaultZone’监控页面DS Replicas显示的是‘peer1’,使用‘default-zone’显示‘localhost’

#    register-with-eureka: false #是否注册到自身服务端,默认为true,高可用需要注册到本身

#    fetch-registry: false #是否从服务器拉取注册信息,默认为true

  #生产环境需要注释下面的配置,开启自我保护;

  server:

    enable-self-preservation: false #关闭自我保护模式(缺省为打开)

    eviction-interval-timer-in-ms: 10000 #续期时间,清理无效服务的时间间隔,默认是60*1000

从以上的yml配置文件可见,peer1和peer2在‘eureka:client:serviceUrl:defaultZone’中,使用了另一个服务中心的ip+port地址,即注册到另一个服务上。

同时需要注意,要开启服务注册到本身

 

2.修改Linux或者windowhosts文件,添加以下语句

注意这里的‘peer1,peer2’要跟第1点中配置的文件名和spring.profile.active一致

127.0.0.1 peer1
127.0.0.1 peer2

hosts文件路径:

Linux的路径是:etc/hosts,

Window路径是:C:\Windows\System32\drivers\etc (win10 64位)

 

3.修改eureka-clientyml文件,添加多实例的注册

配置好服务中心yml文件和hosts文件后,接下来就是修改每个eureka-client的配置文件了

在此,需要把每个eureka-server的URL都写入‘eureka:client:serviceUrl:defaultZone’,这样才能保证某个eureka-server挂掉后,

仍然能注册到另一个,实现高可用

yml配置文件如

server:

  port: 8700

spring:

  application:

    name: service-hello

  cloud:

    client:

      ipAddress: 127.0.0.1  #指定client的IP

eureka:

  client:

    service-url:

#      defaultZone: http://localhost:8761/eureka/

      defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

  #服务实例使用 ip+port的方式访问

  instance:

    hostname: ${spring.cloud.client.ipAddress}

    prefer-ip-address: true

    instance-id: ${spring.cloud.client.ipAddress}:${server.port}

    lease-expiration-duration-in-seconds: 30 #续约到期时间(默认90秒)

    lease-renewal-interval-in-seconds: 10 #续约更新时间间隔(默认30秒),使得eureka及时剔除无效服务

4.配置启动实例

  • window的IDEA上启动

在IDEA的启动配置里面,即configuration,通过复制的方式,创建出同一个服务的多个实例

并且,修改每个实例的’program arguments‘栏目,根据端口号相应的填上‘--spring.profiles.active=peer1’,‘--spring.profiles.active=peer2’

如图

 

接着点击对应的configuration启动实例,打开浏览器输入eureka对应的监控URL即可看到结果,图示如下

 

  • 部署到Linux服务器上

在Linux上直接运行jar包,以命令 ‘java -jar xxx.jar --spring.profiles.active=peer1’执行相应jar包即可

[root@localhost springCloud]# java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1

启动后,在浏览器输入URL即可看到相应结果,图示如下

peer1的界面

 

peer2的界面

 

5.到此,基本完成了高可用的配置,接着就是检验高可用效果了。

打开各个eureka-client,观察注册到各个服务中心的情况,并试着调用API,看服务间访问正常否。

然后中断其中一个eureka-server,观察另一个eureka-server的instance变化,接着继续调用API,观察服务间调用是否正常。

假如都没问题,则证明两点式高可用配置正式生效

中断一个peer1后,peer2图示:

 

 

三、3个实例,两两相互注册的情况

2个实例的情况,在面对复杂生产环境时是性能不够的,这时通常需要3个或以上的注册中心来实现更高性能的高可用。

3个实例的实现方式跟2个实例的方式差不多,区别主要在于eureka-server相互注册的URL多了,eureka-client注册到服务中心

的URL也变多了,同时相应的修改hosts文件即可。

在此,不做详细的描述,3个或以上,只需要修改下面几个文件,其他是一样的

1.创建更多的yml文件

如创建  application-peer1.yml,application-peer2.yml,application-peer3.yml,application-peer4.yml,...

文件内容修改如

application-peer1.yml

spring:

  application:

    name: eureka-server

  profiles: peer1

  cloud:

    client:

      ipAddress: 127.0.0.1

server:

  port: 8761

eureka:

  instance:

    hostname: peer1

    lease-expiration-duration-in-seconds: 30 #续约到期时间(默认90秒)

    lease-renewal-interval-in-seconds: 10 #续约更新时间间隔(默认30秒),使得eureka及时剔除无效服务

    prefer-ip-address: false

    instance-id: ${spring.cloud.client.ipAddress}:${server.port} #使在eureka监控界面看到的实例为ip+port形式
    appname: eureka-server #这里要跟‘spring.application.name’一致,还有‘prefer-ip-address’为false,同时开启自身注册,‘available-replicas’有效副本才不为空

  client:

    serviceUrl:

    #以下测试高可用的配置--两个server相互注册

      defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/ #把自身以外的server的url都填上,实现两两注册

#    register-with-eureka: false #是否注册到自身服务端,默认为true,高可用需要注册到本身

#    fetch-registry: false #是否从服务器拉取注册信息,默认为true

  #生产环境需要注释下面的配置,开启自我保护;

  server:

    enable-self-preservation: false #关闭自我保护模式(缺省为打开)

    eviction-interval-timer-in-ms: 10000 #续期时间,清理无效服务的时间间隔,默认是60*1000

其他yml文件也是如此

 

2.修改hosts文件,添加更多的hostname

127.0.0.1 peer1
127.0.0.1 peer2
127.0.0.1 peer3
...

 

3.修改eureka-clientyml文件,添加多实例的注册中心

server:

  port: 8700

spring:

  application:

    name: service-hello

  cloud:

    client:

      ipAddress: 127.0.0.1  #指定client的IP

eureka:

  client:

    service-url:

#      defaultZone: http://localhost:8761/eureka/

      defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/,http://peer3:8763/eureka/ #把所有的eureka-server的url都填入

  #服务实例使用 ip+port的方式访问

  instance:

    hostname: ${spring.cloud.client.ipAddress}

    prefer-ip-address: true

    instance-id: ${spring.cloud.client.ipAddress}:${server.port}

    lease-expiration-duration-in-seconds: 30 #续约到期时间(默认90秒)

    lease-renewal-interval-in-seconds: 10 #续约更新时间间隔(默认30秒),使得eureka及时剔除无效服务

 

4.后面的内容基本跟2个实例的时候一致,只是数量更改下,不再叙述。

 

四、在eureka监控界面,看到有效副本为空时,通常都是不满足下面3个要求导致的

1.'eureka.instance.appname'与'spring.application.name’不一致

2.eureka.instance.preferIpAddress’为true

3.没有开启注册到自身。

以上情况,在yml文件的注释中都有说明。

 

以上内容,都经过本人的运行验证,可能有细节被忽视没做描述,欢迎指正

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值