为了实现服务注册中心Eureka的高可用,我们通常会把Eureka搭建成一个集群,这样,当一台Eureka宕机后会使得注册进它里面的服务提供者都能正常被访问到,从而实现高可用。
上一篇文章中讲述了搭建一个单机版的Eureka,继续上一篇中的工程,新建两个module,eureka-server-7002和eureka-server-7003,修改7001,7002和7003的application.yml配置文件如下:
server:
port: 7001 #eureka服务端的端口号
eureka:
instance:
hostname: eureka7001.com #eureka服务端的实例名称
client:
register-with-eureka: false #不用把自己注册进注册中心
fetch-registry: false
service-url:
#单机 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #集群绑定,三台eureka互相知道对方
server:
port: 7002 #eureka服务端的端口号
eureka:
instance:
hostname: eureka7002.com #eureka服务端的实例名称
client:
register-with-eureka: false #不用把自己注册进注册中心
fetch-registry: false
service-url:
#单机 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7003.com:7003/eureka/
server:
port: 7003 #eureka服务端的端口号
eureka:
instance:
hostname: eureka7003.com #eureka服务端的实例名称
client:
register-with-eureka: false #不用把自己注册进注册中心
fetch-registry: false
service-url:
#单机 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
这里分别都修改了eureka服务端的实例名称,这里是为了区分开三个eureka服务,我们使用eurekaxxxx.com来访问,(在windows上面)所以需要修改host文件从而修改域名映射,这里的三个eurekaxxxx.com都映射127.0.0.1,然后在defaultZone中,因为需要搭建集群嘛,所以在7001中就要写上7002和7003的服务url,以此类推,这样三个eureka服务就能互相感应到对象并且能绑定起来形成一个集群了。我们访问7001
可以看到7001下面有7002和7003。对于Eureka集群来说,每一个节点都是平等的,不存在高低优先级之分,当我们访问到的Eureka连接超时的时候,会自动地连接到另一台Eureka服务器,从而这样无缝地实现了高可用,这与Zookeeper不同,当zookeeper集群中的master宕机的时候,剩下的salver会通过选举的机制去选出master,而这个过程耗时大概是30s-120s,咋这期间整个zookeeper集群是不可用的,所以说zookeeper达不到高可用性,这就是两者的区别。