1、eureka服务端的几个重要配置
eureka:
server:
#清理间隔10s
eviction-interval-timer-in-ms: 10000
#关闭自我保护,默认开启状态
# enable-self-preservation: false
instance:
prefer-ip-address: true
client:
# false表示不向注册中心注册自己
# register-with-eureka: false
# false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
fetch-registry: false
#优先选择client实例所在的zone的服务
#如果prefer-same-zone-eureka为false,按照service-url下的list取第一个注册中心来注册,并维持心跳检测,不会再向list内的其他的注册中心注册和维持心跳,只有在第一个注册失败的情况,才会依次向其他注册中心注册,总共三次,如果三个service-url都没有注册成功,则注册失败,每隔一个心跳时间会再次尝试。
#如果prefer-same-zone-eureka为true,先通过region取availability-zones内的第一个zone,然后通过这个Zone取service-url下的List,并向list内的第一个注册中心注册和维持心跳,不会再向List内的其他注册中心注册,只有在第一个注册失败的情况下才会依次向其他注册中心注册,总共三次,如果三个service-url都没有注册成功,则注册失败,每隔一个心跳时间会再次尝试。
prefer-same-zone-eureka: true
2、简单的Eureka高可用的搭建
简单的高可用即存在多个eureka服务,每个eureka服务向其他eureka注册自己
假设我有三个eureka,这三个eureka配置信息如下
服务1配置
server:
port: 8761
eureka:
instance:
hostname: eureka-server
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://admin:admin@localhost:8761/eureka/,http://admin:admin@localhost:8762/eureka/,http://admin:admin@localhost:8763/eureka/
#启动自我保护模式
# server:
# enable-self-preservation: true
spring:
application:
name: eureka-server
security:
user:
name: admin
password: admin
服务2配置如下
server:
port: 8762
eureka:
instance:
hostname: eureka-server
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://admin:admin@localhost:8761/eureka/,http://admin:admin@localhost:8762/eureka/,http://admin:admin@localhost:8763/eureka/
#启动自我保护模式
# server:
# enable-self-preservation: true
spring:
application:
name: eureka-server
security:
user:
name: admin
password: admin
服务3配置
server:
port: 8763
eureka:
instance:
hostname: eureka-server
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://admin:admin@localhost:8761/eureka/,http://admin:admin@localhost:8762/eureka/,http://admin:admin@localhost:8763/eureka/
#启动自我保护模式
# server:
# enable-self-preservation: true
spring:
application:
name: eureka-server
security:
user:
name: admin
password: admin
3、Eureka的高级使用,分区管理
当我们搭建集群化服务时,会有一些特殊的需要,比如我有三个Eureka注册中心,三个注册中心所在的服务器分别是山东、北京、上海;当我访问北京的服务时,默认先访问本地的,当本地的服务无法访问里再访问其他地区。
基于这种需求,Eureka提供了一个分区的概念;主要通过eureka.client.region、eureka.client.availability-zones配置来实现。其中region指定分区, availability-zones指定服务的访问顺序
配置信息如下:
服务器1配置
spring:
profiles:
active:
- prod
application:
name: eureka-server
security:
user:
name: admin
password: admin
eureka:
server:
#清理间隔10s
eviction-interval-timer-in-ms: 10000
#关闭自我保护,默认开启状态
# enable-self-preservation: false
instance:
prefer-ip-address: true
hostname: clique-eureka-server
client:
# false表示不向注册中心注册自己
# register-with-eureka: false
# false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
fetch-registry: false
#优先选择client实例所在的zone的服务
#如果prefer-same-zone-eureka为false,按照service-url下的list取第一个注册中心来注册,并维持心跳检测,不会再向list内的其他的注册中心注册和维持心跳,只有在第一个注册失败的情况,才会依次向其他注册中心注册,总共三次,如果三个service-url都没有注册成功,则注册失败,每隔一个心跳时间会再次尝试。
#如果prefer-same-zone-eureka为true,先通过region取availability-zones内的第一个zone,然后通过这个Zone取service-url下的List,并向list内的第一个注册中心注册和维持心跳,不会再向List内的其他注册中心注册,只有在第一个注册失败的情况下才会依次向其他注册中心注册,总共三次,如果三个service-url都没有注册成功,则注册失败,每隔一个心跳时间会再次尝试。
prefer-same-zone-eureka: true
region: party
availability-zones:
party: clique,tingnan,hebei
register-with-eureka: false
service-url:
clique: http://admin:[email protected]:8761/eureka/
tingnan: http://admin:[email protected]:8761/eureka/
hebei: http://admin:[email protected]:8761/eureka/
server:
port: 8761
服务器2配置
spring:
profiles:
active:
- prod
application:
name: eureka-server
security:
user:
name: admin
password: admin
eureka:
server:
#清理间隔10s
eviction-interval-timer-in-ms: 10000
#关闭自我保护,默认开启状态
# enable-self-preservation: false
instance:
prefer-ip-address: true
hostname: clique-eureka-server
client:
# false表示不向注册中心注册自己
# register-with-eureka: false
# false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
fetch-registry: false
#优先选择client实例所在的zone的服务
#如果prefer-same-zone-eureka为false,按照service-url下的list取第一个注册中心来注册,并维持心跳检测,不会再向list内的其他的注册中心注册和维持心跳,只有在第一个注册失败的情况,才会依次向其他注册中心注册,总共三次,如果三个service-url都没有注册成功,则注册失败,每隔一个心跳时间会再次尝试。
#如果prefer-same-zone-eureka为true,先通过region取availability-zones内的第一个zone,然后通过这个Zone取service-url下的List,并向list内的第一个注册中心注册和维持心跳,不会再向List内的其他注册中心注册,只有在第一个注册失败的情况下才会依次向其他注册中心注册,总共三次,如果三个service-url都没有注册成功,则注册失败,每隔一个心跳时间会再次尝试。
prefer-same-zone-eureka: true
region: party
availability-zones:
party: tingnan,clique,hebei
register-with-eureka: false
service-url:
clique: http://admin:[email protected]:8761/eureka/
tingnan: http://admin:[email protected]:8761/eureka/
hebei: http://admin:[email protected]:8761/eureka/
server:
port: 8761
服务器3配置
spring:
profiles:
active:
- prod
application:
name: eureka-server
security:
user:
name: admin
password: admin
eureka:
server:
#清理间隔10s
eviction-interval-timer-in-ms: 10000
#关闭自我保护,默认开启状态
# enable-self-preservation: false
instance:
prefer-ip-address: true
hostname: clique-eureka-server
client:
# false表示不向注册中心注册自己
# register-with-eureka: false
# false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
fetch-registry: false
#优先选择client实例所在的zone的服务
#如果prefer-same-zone-eureka为false,按照service-url下的list取第一个注册中心来注册,并维持心跳检测,不会再向list内的其他的注册中心注册和维持心跳,只有在第一个注册失败的情况,才会依次向其他注册中心注册,总共三次,如果三个service-url都没有注册成功,则注册失败,每隔一个心跳时间会再次尝试。
#如果prefer-same-zone-eureka为true,先通过region取availability-zones内的第一个zone,然后通过这个Zone取service-url下的List,并向list内的第一个注册中心注册和维持心跳,不会再向List内的其他注册中心注册,只有在第一个注册失败的情况下才会依次向其他注册中心注册,总共三次,如果三个service-url都没有注册成功,则注册失败,每隔一个心跳时间会再次尝试。
prefer-same-zone-eureka: true
region: party
availability-zones:
party: hebei,tingnan,clique
register-with-eureka: false
service-url:
clique: http://admin:[email protected]:8761/eureka/
tingnan: http://admin:[email protected]:8761/eureka/
hebei: http://admin:[email protected]:8761/eureka/
server:
port: 8761
注:三个Eureka中配置中只有availability-zones配置的访问顺序有区别
当eureka注册中心配置完成后,我们需要配置各微服务默认访问哪个Eureka中的服务;配置信息如下:
eureka:
instance:
metadata-map:
zone: clique
client:
service-url:
defaultZone: http://admin:[email protected]:8761/eureka/
我这个微服务中只注册到了10.112.2.5服务器,同时通过eureka.instance.metadata-map.zone指定了默认访问哪个分区。即这个微服务访问其他服务时,默认是访问注册到clique这个分区中的服务,只有当这个分别中的服务不可用时才会访问其他分区中的服务