在eureka的服务治理设计中,所有的节点既是服务提供方,也是服务消费方,注册中心也不例外。eureka server的高可用集群,其实就是将自己作为服务向其他注册中心注册自己,这样几个节点的eureka就可以互相注册,实现服务清单的互相同步,达到高可用的效果。

本文,记录在本地搭建2个eureka服务,互相注册为一个集群,生产环境可以部署更多的节点。示例中两个项目分别为eureka-server,port为8761,和eureka-server1,port为8762。这里列出重点步骤。

1.引入依赖 eureka-server

1
2
3
4
5
<!--eureka-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2.启动类 eureka-server

添加注解

1
@EnableEurekaServer

3.配置文件 eureka-server

eureka-server注册到 eureka-server2上,并且,register-with-eureka: true, fetch-registry: true,两个参数,需要设置为true,让他们可以互相注册,同步服务清单;由于这里我使用的ip来做地址,而不是服务名,所以需要打开prefer-ip-address: true。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
instance:
hostname: peer1
prefer-ip-address: true
# 允许使用ip地址来定义注册中心的地址,默认是false
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8762/eureka/
server:
enable-self-preservation: false
# 默认情况下,eureka间隔60s将服务清单中没有续约的服务剔除(默认90s内没有续约),本地测试,关闭保护机制,直接让它实时剔除

4.引入依赖 eureka-server2

1
2
3
4
5
<!--eureka-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

5.启动类 eureka-server2

添加注解

1
@EnableEurekaServer

6.配置文件 eureka-server2

eureka-server2注册到 eureka-server上,并且,register-with-eureka: true, fetch-registry: true,两个参数,需要设置为true,让他们可以互相注册,同步服务清单;由于这里我使用的ip来做地址,而不是服务名,所以需要打开prefer-ip-address: true。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server:
port: 8762
spring:
application:
name: eureka-server
eureka:
instance:
hostname: peer2
prefer-ip-address: true
# 允许使用ip地址来定义注册中心的地址,默认是false
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka/
server:
enable-self-preservation: false
# 默认情况下,eureka间隔60s将服务清单中没有续约的服务剔除(默认90s内没有续约),本地测试,关闭保护机制,直接让它实时剔除

7.服务注册

在其他服务向eureka集群注册时,可以只注册到一个节点,也可以向多节点注册。因为集群中节点会自动同步服务列表,所以上述2种方式均可。
这里给出一个示例,比如company-server,向注册中心注册,写法如下:

1
2
3
4
eureka:
client:
service-url:
default: http://127.0.0.1:8761/eureka

可以发现,注册到eureka集群,和注册到单体eureka上,对于注册者而言,是相同的,无需额外处理。当然,也可以如下,向多个节点注册:

1
2
3
4
eureka:
client:
service-url:
default: http://127.0.0.1:8761/eureka,http://127.0.0.1:8762/eureka

这里采用第一种写法,注册完后,启动eureka集群(由于启动有先后,会报错,因为互相注册,对方可能还没起来,等都起来了,就好了),然后再启动company-server,访问2个注册中心,结果如下:
在这里插入图片描述
在这里插入图片描述
可以看到,尽管我们只向eureka-server注册了,但是eureka-server2也可以看到这个服务。