搭建 spring cloud eureka server 高可用集群

阿里云产品限时红包,最高 ¥1888 元,立即领取

项目代码

生成项目

通过 start.spring.io 生成项目代码,添加 web, actuator, eureka server 依赖。

通过 start.spring.io 生成代码

解压源码包,在 idea 中打开项目。

application.properties 中添加以下内容:

1
2
3
4
5
6
spring.application.name=spring-cloud-eureka-server

# 表示是否注册自身到eureka服务器,默认为 true
# eureka.client.register-with-eureka=false
# 是否从eureka上获取注册信息,默认为 true
# eureka.client.fetch-registry=false

创建不同实例配置

新建 application-server1.propertiesapplication-server2.propertiesapplication-server3.properties 三个文件,用于配置 3 个 eureka server 实例。

application-server1.properties 内容如下:

1
2
3
4
5
6
spring.profiles=server1
server.port=8761

eureka.instance.hostname=server1

eureka.client.service-url.defaultZone=http://server2:8762/eureka,http://server3:8763/eureka

application-server2.properties 内容如下:

1
2
3
4
5
6
spring.profiles=server2
server.port=8762

eureka.instance.hostname=server2

eureka.client.service-url.defaultZone=http://server1:8761/eureka,http://server3:8763/eureka

application-server3.properties 内容如下:

1
2
3
4
5
6
spring.profiles=server3
server.port=8763

eureka.instance.hostname=server3

eureka.client.service-url.defaultZone=http://server1:8761/eureka,http://server2:8762/eureka

激活注册服务器

主启动类添加 @EnableEurekaServer 来激活注册服务器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package ltd.pinshi.springcloudeurekaserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class SpringCloudEurekaServerApplication {

public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaServerApplication.class, args);
}

}

配置 hosts

由于 3 个实例都运行在一台机器上,需要在 hosts 文件上做下配置。Mac 下为 /etc/hosts,在结尾添加以下映射,保存退出。

1
2
3
127.0.0.1       server1
127.0.0.1 server2
127.0.0.1 server3

启动 Eureka Server 实例

通过 idea 运行

通过 idea 运行 eureka server 实例

在 idea 右上角 Edit Configurations… 新建 3 个运行配置。在 Program arguments 中设置 --spring.profiles.active=server1 相应的启动场景。

点击右上角 Run 来启动实例。

通过 jar 运行

进入项目根目录,执行 mvn clean package。在 target 子目录下会生成 spring-cloud-eureka-server-0.0.1-SNAPSHOT.jar 文件。

通过以下命令分别启动 3 个实例:

1
2
3
java -jar spring-cloud-eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=server1 
java -jar spring-cloud-eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=server2
java -jar spring-cloud-eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=server3

查看实例

浏览器输入 http://localhost:8761,内容如下:


http://localhost:8762http://localhost:8763 内容相似。

需要注意的是 DS Replicas 部分的内容。

通过 Instances currently registered with Eureka 可以看到注册了 3 个实例。

General Info 中的 registered-replicasunavailable-replicasavailable-replicas 可以通过停止某个实例观察变化。

扩展问题

application.properties

1
2
3
4
# 表示是否注册自身到eureka服务器,默认为 true
# eureka.client.register-with-eureka=false
# 是否从eureka上获取注册信息,默认为 true
# eureka.client.fetch-registry=false

大家可以取消这两个选项的注释,查看浏览器的内容显示。