0%

eureka集群安装

一、服务端

1. 依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- eureka 服务端依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- 安全配置,服务之间注册需要校验 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-security</artifactId>
</dependency>
<!-- 健康检查,用于服务之间的心跳检测 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2. 启动类添加注解

1
@EnableEurekaServer

3.1 节点一的yml配置

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
server:
port: 9991
servlet:
context-path: /
spring:
application:
name: yrl-eureka
security:
user:
name: eureka
password: eureka
eureka:
instance:
hostname: eureka1.com #eureka服务端主机名称,每个启动的实例应该配置不同,不配置的时候将根据操作系统的主机名来获取
# instance-id: yrl-eureka9991 # 不加的话,默认是主机名+服务名+端口,加上之后屏蔽服务器相关信息
instance-id: ${spring.application.name}:${server.port}:@project.version@ # 不加的话,默认是主机名+服务名+端口,加上之后屏蔽服务器相关信息
prefer-ip-address: false #是否优先使用 IP 地址作为主机名的标识,测试环境下使用false,生产情况下使用true
metadata-map:
test: 123
client:
# false表示不向注册中心注册自己
register-with-eureka: true
#false 本身就是注册中心,不需要抓取服务
fetch-registry: true
#设置与注册中心交互的地址
service-url:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@eureka2.com:9992/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka3.com:9993/eureka/
registry-fetch-interval-seconds: 30 #表示eureka客户端间隔多久去拉取服务注册信息,默认30s,如果要迅速获取服务注册状态,可以减小该值
server:
enable-self-preservation: false # 心跳保护机制,默认开启,微服务少的情况下关闭,剔除挂掉的节点;微服务多的情况下开启,防止网络抖动节点心跳丢失而被剔除
eviction-interval-timer-in-ms: 1000 # 逐出实例时间,默认60 * 1000(清理无效节点的时间间隔)
renewal-percent-threshold: 0.85 #自我保护机制触发的阈值,默认0.85
use-read-only-response-cache: false #是否使用从readOnly读取注册表,默认true,三级缓存机制保证高可用,但是一致性减弱了
response-cache-update-interval-ms: 1000 # readwrite 和readOnly 同步时间间隔,默认30 * 1000

3.2 节点二的yml配置

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
server:
port: 9992
servlet:
context-path: /
spring:
application:
name: yrl-eureka
security:
user:
name: eureka
password: eureka
eureka:
instance:
hostname: eureka2.com #eureka服务端主机名称,每个启动的实例应该配置不同,不配置的时候将根据操作系统的主机名来获取
# instance-id: yrl-eureka9992 # 不加的话,默认是主机名+服务名+端口,加上之后屏蔽服务器相关信息
instance-id: ${spring.application.name}:${server.port}:@project.version@ # 不加的话,默认是主机名+服务名+端口,加上之后屏蔽服务器相关信息
prefer-ip-address: false #是否优先使用 IP 地址作为主机名的标识,测试环境下使用false,生产情况下使用true
metadata-map:
test: 456
client:
# false表示不向注册中心注册自己
register-with-eureka: true
#false 本身就是注册中心,不需要抓取服务
fetch-registry: true
#设置与注册中心交互的地址
service-url:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@eureka3.com:9993/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka1.com:9991/eureka/
registry-fetch-interval-seconds: 30 #表示eureka客户端间隔多久去拉取服务注册信息,默认30s,如果要迅速获取服务注册状态,可以减小该值
server:
enable-self-preservation: false # 心跳保护机制,默认开启,微服务少的情况下关闭,剔除挂掉的节点;微服务多的情况下开启,防止网络抖动节点心跳丢失而被剔除
eviction-interval-timer-in-ms: 1000 # 逐出实例时间,默认60 * 1000(清理无效节点的时间间隔)
renewal-percent-threshold: 0.85 #自我保护机制触发的阈值,默认0.85
use-read-only-response-cache: false #是否使用从readOnly读取注册表,默认true,三级缓存机制保证高可用,但是一致性减弱了
response-cache-update-interval-ms: 1000 # readwrite 和readOnly 同步时间间隔,默认30 * 1000

3.3 节点三的yml配置

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
server:
port: 9993
servlet:
context-path: /
spring:
application:
name: yrl-eureka
security:
user:
name: eureka
password: eureka
eureka:
instance:
hostname: eureka3.com #eureka服务端主机名称,每个启动的实例应该配置不同,不配置的时候将根据操作系统的主机名来获取
# instance-id: yrl-eureka9993 # 不加的话,默认是主机名+服务名+端口,加上之后屏蔽服务器相关信息
instance-id: ${spring.application.name}:${server.port}:@project.version@ # 不加的话,默认是主机名+服务名+端口,加上之后屏蔽服务器相关信息
prefer-ip-address: false #是否优先使用 IP 地址作为主机名的标识,测试环境下使用false,生产情况下使用true
metadata-map:
test: 789
client:
# false表示不向注册中心注册自己
register-with-eureka: true
#false 本身就是注册中心,不需要抓取服务
fetch-registry: true
#设置与注册中心交互的地址
service-url:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@eureka1.com:9991/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka2.com:9992/eureka/
registry-fetch-interval-seconds: 30 #表示eureka客户端间隔多久去拉取服务注册信息,默认30s,如果要迅速获取服务注册状态,可以减小该值
server:
enable-self-preservation: false # 心跳保护机制,默认开启,微服务少的情况下关闭,剔除挂掉的节点;微服务多的情况下开启,防止网络抖动节点心跳丢失而被剔除
eviction-interval-timer-in-ms: 1000 # 逐出实例时间,默认60 * 1000(清理无效节点的时间间隔)
renewal-percent-threshold: 0.85 #自我保护机制触发的阈值,默认0.85
use-read-only-response-cache: false #是否使用从readOnly读取注册表,默认true,三级缓存机制保证高可用,但是一致性减弱了
response-cache-update-interval-ms: 1000 # readwrite 和readOnly 同步时间间隔,默认30 * 1000

二、 客户端

1. 依赖

1
2
3
4
5
6
7
8
9
10
<!-- eureka 客户端依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--健康检查-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2. 启动类添加注解

1
@EnableDiscoveryClient

3. yml配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server:
port: 9302
spring:
application:
name: test-pay
eureka:
client:
service‐url:
defaultZone:
http://eureka:eureka@eureka1.com:9991/eureka/,http://eureka:eureka@eureka2.com:9992/eureka/,http://eureka:eureka@eureka3.com:9993/eureka/
fetch-registry: true
register-with-eureka: true
instance:
prefer‐ip‐address: true

management:
endpoints:
web:
exposure:
include: '*'

三、控制台

当服务出现在available-replicas中才算搭建成功

四、健康检查

1
2
3
managementUrl=http://192.168.243.1:9993/actuator
healthUrl=http://192.168.243.1:9993/actuator/health
serviceUrl=http://192.168.243.1:9993/

五、cap原则

1
2
3
4
5
一致性(Consistency)
可用性(Availability)
分区容错性(Partition tolerance)
1.eureka是ap,去中心化,每个节点是平等的,15分钟内,可用实例低于85%,开启心跳保护,不会剔除心跳异常的实例,保证可用性,仍然能够接受新服务注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用),所以实例调用需要有熔断机制保证
2.zookpeer是cp,由leader提供服务,ZooKeeper选举Leader时候会造成服务一定时间内的不可用,保证了一致性,不保证可用性