1.为什么要使用Eureka集群
首先说明的是需要集群的不仅仅是Eureka而是所有的服务注册中心都需要做集群。
服务注册中心作为所有服务的集中管理服务,承担着服务的注册,发现等作用,服务注册中心一旦宕机,整个系统都会不可用,这个是不符合系统高可用的,特别是在互联网行业的应用,所以才有服务注册中心只承担服务注册于发现的功能,非常简单,但是再简单的服务都有可能宕机,那么就需要集群来降低整个应用不可用的概率,做到高可用性。
虽然服务消费者在本地JVM中缓存了服务提供者的地址,但是如果服务提供者已经宕机,那么就造成了服务不可用,服务消费者也无法感知到新增加的服务,这个是必须要有一个集群方式来保证服务的高可用性。
2.Eureka集群原理
默认情况下,服务注册中心是不会注册到服务注册中心的,如果是服务则会注册到服务注册中心。
集群情况下
###因为自己是为注册中心,不需要自己注册自己,如果是注册中心则需要注册资金
register-with-eureka: true
###因为自己是为注册中心,不需要检索服务,如果是注册中心则需要检索服务
fetch-registry: true
3.搭建服务注册中心Eureka集群(双机实例)
- 服务注册中心集群01:127.0.0.1:8100
###服务端口号
server:
port: 8100
###服务名称(服务注册到eureka名称)
spring:
application:
name: eureka-server
###eureka 基本信息配置
eureka:
instance:
###注册到eurekaip地址
hostname: 127.0.0.1
client:
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:8100/eureka/,http://${eureka.instance.hostname}:8200/eureka/
###因为自己是为注册中心,不需要自己注册自己,如果是注册中心则需要注册自己
register-with-eureka: true
###因为自己是为注册中心,不需要检索服务,如果是注册中心则需要检索服务
fetch-registry: true
server:
# 测试时关闭自我保护机制,保证不可用服务及时踢出
enable-self-preservation: false
eviction-interval-timer-in-ms: 2000
- 服务注册中心集群02:127.0.0.1:8200
###服务端口号
server:
port: 8200
###服务名称(服务注册到eureka名称)
spring:
application:
name: eureka-server
###eureka 基本信息配置
eureka:
instance:
###注册到eurekaip地址
hostname: 127.0.0.1
client:
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:8100/eureka/,http://${eureka.instance.hostname}:8200/eureka/
###因为自己是为注册中心,不需要自己注册自己,如果是注册中心则需要注册自己
register-with-eureka: true
###因为自己是为注册中心,不需要检索服务,如果是注册中心则需要检索服务
fetch-registry: true
server:
# 测试时关闭自我保护机制,保证不可用服务及时踢出
enable-self-preservation: false
eviction-interval-timer-in-ms: 2000
- 服务消费者:127.0.0.1:8002
###服务启动端口号
server:
port: 8002
###服务名称(服务注册到eureka名称)
spring:
application:
name: app-eureka-clientOrder
###服务注册到eureka地址
eureka:
client:
service-url:
# defaultZone: http://127.0.0.1:8100/eureka
defaultZone: http://127.0.0.1:8100/eureka,http://127.0.0.1:8200/eureka
###是否需要注册到注册中心
register-with-eureka: true
###是否需要从eureka上获取注册信息
fetch-registry: true
registry-fetch-interval-seconds: 30
# 心跳检测检测与续约时间
# 测试时将值设置设置小些,保证服务关闭后注册中心能及时踢出服务
instance:
###Eureka客户端向服务端发送心跳的时间间隔,单位为秒(客户端告诉服务端自己会按照该规则)
lease-renewal-interval-in-seconds: 1
###Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,超过则剔除(客户端告诉服务端按照此规则等待自己)
lease-expiration-duration-in-seconds: 2
- 服务提供者:127.0.0.1:8003
###服务启动端口号
server:
port: 8003
###服务名称(服务注册到eureka名称)
spring:
application:
name: app-eureka-clientMember
###服务注册到eureka地址
eureka:
client:
service-url:
# defaultZone: http://127.0.0.1:8100/eureka
defaultZone: http://127.0.0.1:8100/eureka,http://127.0.0.1:8200/eureka
###是否需要注册到注册中心
register-with-eureka: true
###是否需要从eureka上获取注册信息
fetch-registry: true
registry-fetch-interval-seconds: 30
# 心跳检测检测与续约时间
# 测试时将值设置设置小些,保证服务关闭后注册中心能及时踢出服务
instance:
###Eureka客户端向服务端发送心跳的时间间隔,单位为秒(客户端告诉服务端自己会按照该规则)
lease-renewal-interval-in-seconds: 1
###Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,超过则剔除(客户端告诉服务端按照此规则等待自己)
lease-expiration-duration-in-seconds: 2
4.Eureka集群测试
- 四个服务启动后
- 关闭服务注册中心127.0.0.1:8100
进入8100对应的服务注册中心发现已经下线
- 查看8200服务注册中心,发现正常,但是已经没有8100的服务注册中心服务了
- 服务消费者调用,发现正常,这就证明服务是可用的
工程源代码
链接:https://pan.baidu.com/s/1pZyQ5OZfjH5Z3XdJvmenuQ
提取码:bjha