一、 什么是高可用
高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。
二、 Eureka如何实现高可用
完成第一个注册中心项目,环境无需改变,本文高可用是模拟操作,所以我们的操作是启动两个注册中心项目,通过修改配置文件达到同样的效果。
首先修改hosts文件,在文件下面添加以下两行代码
C:\Windows\System32\drivers\etc路径下,hosts文件
修改Server端代码
打开cloud-demo-eureka-server项目,在src/main/resource下创建application-server-1.yml和application-server-2.yml
注意yml文件当中hosthome节点的修改
application-server-1.yml内容如下
server:
port: 8761 # 你的端口
spring:
security:
user:
name: admin
password: admin
application:
name: service-registry
eureka:
instance:
hostname: server1 # 你的地址
client:
registerWithEureka: true
fetchRegistry: true # fetchRegistry表示是否从eureka服务器获取注册信息
serviceUrl:
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
defaultZone: http://admin:admin@server2:8762/eureka/
复制代码
application-server-2.yml内容如下
server:
port: 8762 # 你的端口
spring:
security:
user:
name: admin
password: admin
application:
name: service-registry
eureka:
instance:
hostname: server2 # 你的地址
client:
registerWithEureka: true
fetchRegistry: true # fetchRegistry表示是否从eureka服务器获取注册信息
serviceUrl:
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
defaultZone: http://admin:admin@server1:8761/eureka/
复制代码
注意观察:defaultZone:http://admin:admin@server1:8761/eureka/ 这里的配置为两个注册中心server端互相注册。registerWithEureka和fetchRegistry两个属性要设置为true
原application.yml改为如下内容:(启动两次修改此配置文件即可,server-1,和server-2分别启动一次)
spring:
profiles:
active:
- server-1
复制代码
修改完成启动项目
启动第一个项目肯定会报错,因为互相注册导致无法找到另一个服务,不用惊慌,把两个服务全部启动。访问http://localhost:8761或http://localhost:8762 ,DS Replicas显示为另一个服务
这里可以发现SERVICE-REGISTRY这个服务已经启动了两个了。下面我修改客户端cloud-demo-eureka-client代码
修改客户端代码
打开cloud-demo-eureka-client项目,打开src/main/resource/application.yml,修改内容,将两个注册中心地址都填写在defaultZone节点中,并启动服务,如下图显示内容,则启动成功。
spring:
application:
name: service-eureka-client #服务名称
server:
port: 8800 #端口
eureka:
client:
service-url:
defaultZone: http://admin:admin@server1:8761/eureka/,http://admin:admin@server2:8762/eureka/
复制代码
下面我们关闭server1的eureka-server,之后访问http://localhost:8762
下面我们再次开启server1的eureka-server服务,访问http://localhost:8762