Eureka作为微服务的注册发现中心,在运作过程中保持稳定性尤为重要,如果一个项目只有一个 Eureka server,万一这个 Eureka server 宕机了,后果不堪设想,因此,我们需要搭建一个高可用的 Eureka server 集群;同样地为了安全考虑,还需要给 Eureka server 添加用户密码验证。
高可用
实现高可用的原理其实很简单,比如我们需要两个 Eureka server,就将这两个 Eureka server 相互注册到对方上,就可实现数据多个 Eureka server 直接的数据互相同步了。
- 互相注册:
 
spring:
  application:
    name: eureka-master
---
spring:
  profiles: peer1
  
eureka:
  instance:
    preferIpAddress: true
    leaseRenewalIntervalInSeconds: 1
  client:
    register-with-eureka: false
    fetch-registry: false
    serviceUrl.defaultZone: http://zhangchenghui:123456@localhost:6002/eureka/
server:
  port: 6001
security:
  user:
    name: zhangchenghui
    password: 123456
        
---
spring:
  profiles: peer2
  
eureka:
  instance:
    preferIpAddress: true
    leaseRenewalIntervalInSeconds: 1
  client:
    register-with-eureka: false
    fetch-registry: false
    serviceUrl.defaultZone: http://zhangchenghui:123456@localhost:6001/eureka/
server:
  port: 6002
security:
  user:
    name: zhangchenghui
    password: 123456
配置文件可用 — 分割开,这样的好处就是可以将不同环境的配置写到一个配置文件中,运行的时候再指定要哪一段配置,比如上面如果在运行的时候 –spring.profiles.active=peer1,那么对应的那段就会应用到当前应用中。
将Eureka项目打包好,运行命令:
java -jar xxxxx.jar --spring.profiles.active=peer1
java -jar xxxxx.jar --spring.profiles.active=peer2
- 将应用注册到 Eureka server 集群上:
 
eureka:
  client:
    serviceUrl:
      defaultZone: http://zhangchenghui:123456@localhost:6001/eureka/,http://zhangchenghui:123456@localhost:6002/eureka/
将这两个 eureka server 同时写到 defaultZone 中,这样就可以将服务注册到 Eureka server 集群上了。
用户验证
- 添加安全模块依赖:
 
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 将 Eureka 的 url 改成以下模式:
 
eureka:
  instance:
    preferIpAddress: true
    leaseRenewalIntervalInSeconds: 1
  client:
	serviceUrl.defaultZone: http://userName:password@eureka-master:6001/eureka/
- 在配置文件添加如下配置:
 
security:
  user:
    name: zhangchenghui
    password: xxxxx
登陆 Eureka,看到以下弹窗,说明添加用户验证成功:
