Spring Cloud的Eureka Server的高可用就是不同的Eureka相互注册,从而实现注册信息相互复制的功能。它们都存有相同的信息,当其中一个注册中心挂掉后,不影响程序的正常功能,一般是多台服务器,也可以在同一个服务器。
一:本次是模拟2台服务器,因为是在一个机器上,所以,需要修改Host文件
windos是在这个路径下,C:\Windows\System32\drivers\etc,可以把它先脱到桌面,然后重命名为.txt文件,打开修改后去掉后缀名再放到原来的我位置,这样就可以修改了,这个文件默认是只读的,右键选择属性,把只读去掉就可以了。
打开Host,修改如下增加2个127.0.0.1的映射
二:修改程序的配置文件
把原来的application.yml复制2个出来,重命名为下图
application.yml里面可以写上通用的配置属性
#文件存放通用的配置
spring:
application:
name: api-eureka
profiles:
active: server1
server:
eviction-interval-timer-in-ms: 4000 # 设置清理的间隔时间,而后这个时间使用的是毫秒单位(默认是60秒)
enable-self-preservation: false #关闭保护模式
renewal-percent-threshold: 0.9
application-server1.yml的内容
server:
port: 8001
eureka:
instance:
hostname: server1
#hostname:${spring.cloud.client.ipAddress} 不同的主机可以加上这句话
#prefer-ip-address: true 不同的主机可以加上这句话
instance-id: eureka-8001
lease-renewal-interval-in-seconds: 30 # 续约更新时间间隔(默认30秒),eureka客户端向服务端发送心跳的时间间隔
lease-expiration-duration-in-seconds: 90 # 设置心跳的周期间隔,续约到期时间(默认90秒)
client:
# 表示是否注册自身到eureka服务器
register-with-eureka: true
# 是否从eureka上获取注册信息
fetch-registry: false
service-url:
defaultZone: http://server2:8002/eureka/ #/如果是多台机器,用过http://IP地址:8002/eureka/进行相互注册,客户端最好都注册到多个注册中心,虽然注册到一个注册中心也可以实现相互复制,但是如果主eurka挂了,
#/那么后续就无法再注册服务了,这也是网上的服务注册多个到eureka用逗号分隔的原因,只要有一个活的eureka,就可以实现复制
application-server2.yml的内容
server:
port: 8002
eureka:
instance:
hostname: server2
#hostname:${spring.cloud.client.ipAddress} 不同的主机可以加上这句话
#prefer-ip-address: true 不同的主机可以加上这句话
instance-id: eureka-8002
lease-renewal-interval-in-seconds: 30 # 续约更新时间间隔(默认30秒),eureka客户端向服务端发送心跳的时间间隔
lease-expiration-duration-in-seconds: 90 # 设置心跳的周期间隔,续约到期时间(默认90秒)
client:
# 表示是否注册自身到eureka服务器
register-with-eureka: true
# 是否从eureka上获取注册信息
fetch-registry: false
service-url:
defaultZone: http://server1:8001/eureka/ #/如果是多台机器,用过http://IP地址:8002/eureka/进行相互注册,客户端最好都注册到多个注册中心,虽然注册到一个注册中心也可以实现相互复制,但是如果主eurka挂了,
#/那么后续就无法再注册服务了,这也是网上的服务注册多个到eureka用逗号分隔的原因,只要有一个活的eureka,就可以实现复制
三:配置idea启动2个注册中心
新建2个启动项,选择同一个服务选择不同的配置信息
然后依次启动这2个服务,启动第一个服务时,会报错,因为第一个服务时注册到第二个服务里的,此时第二个服务还没启动,等启动第二个服务后,就正常了
或者通过jar包启动
java -jar XXXXXX.jar --spring.profiles.active=server1
java -jar XXXXXX.jar --spring.profiles.active=server2
四:启动C服务注册到注册中心
其他服务最好都注册到注册中心,当然注册到某一个注册中心也可以,本次注册到一个注册中心,
defaultZone: http://localhost:8001/eureka/
启动C服务后,输入第server1注册中心的地址,发现C服务被注册进来了,同时可以看到第二个server2注册中心
输入第server2注册中心的地址,发现C服务同样被注册进来了,我们只是把C服务注册到了server1,但是server2里也有,说明信息进行了同步,同时可以看到第一个注册中心