springboot搭建eureka服务

springboot配置阿里云镜像:https://start.aliyun.com

1、单体eureka配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
pom文件中添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

有的教程中还引入spring-boot-starter-web,其实不用。因为上面的依赖已经包含了它。在pom中点此依赖进去,一共点4次spring-cloud-netflix-eureka-server,发现web的依赖。
------------------------------------------------------------------------------------------------------------
eureka:
client:
#是否将自己注册到Eureka Server,默认为true,由于当前就是server,故而设置成false,表明该服务不会向eureka注册自己的信息
register-with-eureka: false
#是否从eureka server获取注册信息,由于单节点,不需要同步其他节点数据,用false
fetch-registry: false
#设置服务注册中心的URL,用于client和server端交流
service-url:
defaultZone: http://localhost:1995/eureka/
# ps:不想注册,设置成false即可,实例演示结果:注册中心没有实例信息。找控制台204信息也没有找到。
spring:
cloud:
service-registry:
auto-registration:
enabled: false
------------------------------------------------------------------------------------------------------------
启动类上添加此注解标识该服务为配置中心
@EnableEurekaServer
2、集群eureka配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 共享配置部分
eureka:
client:
#是否将自己注册到Eureka Server,默认为true,由于当前就是server,故而设置成false,表明该服务不会向eureka注册自己的信息
register-with-eureka: true
#是否从eureka server获取注册信息,由于单节点,不需要同步其他节点数据,用false
fetch-registry: true
#设置服务注册中心的URL,用于client和server端交流
service-url:
defaultZone: http://localhost:1995/eureka/,http://localhost:1996/eureka/,http://localhost:1997/eureka/,http://localhost:1998/eureka/

spring:
application:
name: eureka

# 使用---将yml文件分成多个部分,相当于多个yml文件组合配置,第一个---之前的部分被后面的所有用---隔开的配置共享
---
eureka:
instance:
hostname: eureka-1995
server:
port: 1995

spring:
profiles: 1995

---
eureka:
instance:
hostname: eureka-1996

server:
port: 1996

spring:
profiles: 1996

---
eureka:
instance:
hostname: eureka-1997

server:
port: 1997

spring:
profiles: 1997

---
eureka:
instance:
hostname: eureka-1998

server:
port: 1998

spring:
profiles: 1998
3、 eureka自我保护:

自我保护模式正是一种针对网络异常波动的安全保护措施,使用自我保护模式能使Eureka集群更加的健壮、稳定的运行。默认情况下,如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障(比如网络故障或频繁的启动关闭客户端),Eureka Server自动进入自我保护模式。不再剔除任何服务,当网络故障恢复后,该节点自动退出自我保护模式。

  • eureka如果不配置eureka.server.enable-self-preservation为false,则默认开启自我保护机制。
  • 当心跳检测有超过一定阈值的结点停止心跳时,eureka会触发自我保护机制。
  • 自我保护机制开启后,停止心跳的服务不会被eureka直接剔除,这样会防止因为网络故障导致的心跳检测不到,但是结点依旧运行正常的情况下结点被剔除。
  • eureka依旧可以正常注册新的服务,但是不会同步到心跳停止的服务上去。
  • 在间隔一段时间后,eureka会重新向停止心跳的服务发送心跳检测,如果恢复正常会同步注册表相关的信息。
4、eureka优化配置
4.1 server端优化
  • 通过设置自我保护优化

    • 如果服务少的话不开启自我保护,因为服务太少,如果只是故障两三个节点也会占比很大,很容易达到eureka自我保护阈值。
    • 如果服务多的话可以开启自我保护,这样可以有效防止网络波动带来的大面积心跳检测失败。
    • 开启true关闭false:enable-self-preservation: false
    • 自我保护阈值设定:renewal-percent-threshold: 0.85
  • 剔除服务时间间隔

    • 清理无效节点,默认60*1000毫秒,即60秒
    • 自定义无效服务剔除间隔:eviction-interval-timer-in-ms: 1000
  • 关闭从readOnly读注册表

    • use-read-only-response-cache: false
  • readWrite 和 readOnly 同步时间间隔。

    • response-cache-update-interval-ms: 1000
4.2 client端优化
  • 拉取注册表间隔
    • 表示eureka client间隔多久去拉取服务器注册信息,默认为30秒
    • 可以自定义注册表拉取间隔:registry-fetch-interval-seconds: 5
  • 心跳续约间隔
    • eureka客户端需要多长时间发送心跳给eureka服务器,表明他仍然或者,默认30秒
    • 自定义心跳续约间隔:lease-renewal-interval-in-seconds: 10
  • 心跳过期时间
    • eureka服务器在接受到实力的最后一次发出的心跳后,需要等待多久才可以将此实力删除
    • 自定义心跳过期时间:lease-expiration-duration-in-seconds: 10
4.3 集群搭建
  • service-url配置url时,将所有url打乱配置,即不同的server中的url配置顺序不要一样,这样可以让节点被均匀访问。
5、分区

eureka提供了region和zone两个概念来进行分区,这两个概念均来自于亚马逊的AWS:

  • region:可以简单理解为地理上的分区,比如亚洲地区,或者华北地区,再或者北京等等,没有具体大小的限制。根据项目具体的情况,可以自行合理划分region。
  • zone:可以简单理解为region内的具体机房,比如说region划分为北京,然后北京有两个机房,就可以在此region之下划分出zone1,zone2两个zone。