源码见文章底部
1、修改 host 文件,后边配置会用到,要保持名称一致。
host位置:(C:\Windows\System32\drivers\etc\hosts) Linux(/etc/hosts)
127.0.0.1 f-eureka1
127.0.0.1 f-eureka2
127.0.0.1 f-eureka3
2、选择单文件配置还是多文件配置:
根据 Eureka 配置的复杂程度,简单的话就选择单文件配置,多的话选择多文件配置。
3、单文件配置 application.yml
spring:
application:
name: f-eureka
server1:
server: f-eureka1
port: 8711
server2:
server: f-eureka2
port: 8712
server3:
server: f-eureka3
port: 8713
# 单文件配置
---
spring:
profiles: f-eureka1
eureka:
instance:
hostname: f-eureka1
client:
# 自己就是注册中心,不用注册自己
registerWithEureka: true
# 要不要去注册中心获取其他服务的地址
fetchRegistry: true
serviceUrl:
defaultZone: http://${server2.server}:${server2.port}/eureka/,http://${server3.server}:${server3.port}/eureka/
---
eureka:
instance:
hostname: f-eureka2
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://${server1.server}:${server1.port}/eureka/,http://${server3.server}:${server3.port}/eureka/
---
eureka:
instance:
hostname: f-eureka3
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://${server1.server}:${server1.port}/eureka/,http://${server2.server}:${server2.port}/eureka/
4、多文件配置 application-f1.yml、application-f2.yml、application-f3.yml
application-f1.yml
server:
port: 8711
server2:
server: f-eureka2
port: 8712
server3:
server: f-eureka3
port: 8713
# 多文件配置
eureka:
instance:
hostname: f-eureka1
client:
# 自己就是注册中心,不用注册自己
registerWithEureka: true
# 要不要去注册中心获取其他服务的地址
fetchRegistry: true
serviceUrl:
defaultZone: http://${server2.server}:${server2.port}/eureka/,http://${server3.server}:${server3.port}/eureka/
spring:
# 集群环境下请保证一致
application:
name: f-eureka
application-f2.yml
server:
port: 8712
server1:
server: f-eureka1
port: 8711
server3:
server: f-eureka3
port: 8713
eureka:
instance:
hostname: f-eureka2
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://${server1.server}:${server1.port}/eureka/,http://${server3.server}:${server3.port}/eureka/
spring:
application:
name: f-eureka
application-f3.yml
server:
port: 8713
server1:
server: f-eureka1
port: 8711
server2:
server: f-eureka2
port: 8712
eureka:
instance:
hostname: f-eureka3
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://${server1.server}:${server1.port}/eureka/,http://${server2.server}:${server2.port}/eureka/
spring:
application:
name: f-eureka
5、启动项目
6、检查
在启动第一个和第二个后控制台会存在报错,是正常现象,等待全部启动完毕就可以了。
启动第一个后访问地址:http://localhost:8711/
三个全部启动成功,访问地址:http://localhost:8711/
集群搭建完成。
如果要打 jar 包:
java -jar demo.jar --spring.profiles.active=application-f1.yml
源码地址:https://gitee.com/biyanfa/f-cloud/tree/eureka-cluster/
自我保护机制:
解决方式有三种:
- 关闭自我保护模式(
eureka.server.enable-self-preservation
设为false
),不推荐。 - 降低
renewalPercentThreshold
的比例(eureka.server.renewal-percent-threshold
设置为0.5
以下,比如0.49
),不推荐。 - 部署多个 Eureka Server 并开启其客户端行为(
eureka.client.register-with-eureka
不要设为false
,默认为true
),推荐。
Eureka 的自我保护模式是有意义的,该模式被激活后,它不会从注册列表中剔除因长时间没收到心跳导致租期过期的服务,而是等待修复,直到心跳恢复正常之后,它自动退出自我保护模式。这种模式旨在避免因网络分区故障导致服务不可用的问题。例如,两个客户端实例 C1 和 C2 的连通性是良好的,但是由于网络故障,C2 未能及时向 Eureka 发送心跳续约,这时候 Eureka 不能简单的将 C2 从注册表中剔除。因为如果剔除了,C1 就无法从 Eureka 服务器中获取 C2 注册的服务,但是这时候 C2 服务是可用的。
所以,Eureka 的自我保护模式最好还是开启它。
推荐 Eureka 的自我保护机制
https://www.cnblogs.com/xishuai/p/spring-cloud-eureka-safe.html
参考地址:
https://www.cnblogs.com/xmf3628/p/11999956.html
https://blog.csdn.net/qq_35976271/article/details/101693174