在微服务中我们要考虑到发生故障的情况,所以说对服务注册中心也要进行高可用部署。
官方对于Eureka 高可用的描述:
Eureka can be made even more resilient and available by running multiple instances and asking them to register with each other. In fact, this is the default behaviour, so all you need to do to make it work is add a valid serviceUrl to a peer, e.g.
就是通过多个eureka实例进行互相注册,然后修改每个实例的serviceUrl即可。Eureka Server的高可用实际上就是将自己作为服务向其他服务注册中心注册自己,这样就可以形成一组互相注册的服务注册中心,以实现服务清单的互相同步,达到高可用的效果。
之前的有配置:
eureka:
client:
register-with-eureka: false
fetch-registry: false
让服务注册中心不注册自己。
创建application-peer1.yml
文件
eureka:
instance:
hostname: peer1
client:
register-with-eureka: true # 当然这个默认就是true,表示向eureka注册自己
fetch-registry: true # 这个的意思是从eureka server拉取注册表,集群中从相邻的eureka server拉取注册表
service-url:
defaultZone: http://peer2:8762/eureka/
server:
port: 8761
spring:
application:
name: eureka-server
向peer2注册自己。
创建application-peer2.yml
文件,配置
eureka:
instance:
hostname: peer2
client:
register-with-eureka: true # 当然这个默认就是true,表示向eureka注册自己
fetch-registry: true # 这个的意思是从eureka server拉取注册表,集群中从相邻的eureka server拉取注册表
service-url:
defaultZone: http://peer1:8761/eureka/
server:
port: 8762
spring:
application:
name: eureka-server
向peer1注册自己
当然二个application.yml
的defaultZone
也可以设置成http://peer1:8761/eureka,http://peer2:8762/eureka/
修改vim /etc/hosts文件配置映射
127.0.0.1 peer1
127.0.0.1 peer2
通过spring.profiles.active
属性来启动不同的环境,当然生产上肯定就是二台不同的服务了,这边只是在单机上模拟Eureka Server的高可用。
启动的时候指定不一样的配置文件,
java -jar eureka-server-1.0-SNAPSHOT.jar --spring.profiles.active=peer1
java -jar eureka-server-1.0-SNAPSHOT.jar --spring.profiles.active=peer2
访问http://localhost:8761/
访问http://localhost:8762/
服务提供者消费者配置也要做一些修改,这边以服务提供者为例,其实严格意义上一个服务可以做服务提供者也可以做服务消费者
server:
port: 8088
spring:
application:
name: ServiceA
eureka:
instance:
hostname: localhost
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka,http://peer2:8762/eureka/
此时如果断开peer1,则AService也会向peer2上注册。所以依然能够访问到AService服务,从而实现服务注册中心的高可用。