上一篇我们讲述了 Eureka 的单节点搭建,但是通常情况在生产环境我们都会追求服务的高可用,显然单节点的服务满足不了我们的需求。那么 Eureka 的集群如何构建呢?下面我们一起来学习下。
首先,在上一节的基础上增加三个配置文件 application-eureka1.yml
application-eureka2.yml
application-eureka3.yml
如图:
修改application.yml
文件,这一步主要是将fetch-registry
register-with-eureka
这两个属性注释掉,当然也可以显式的指定为true
,然后增加了defaultZone
属性的配置信息
spring:
application:
#服务名
name: eureka-server
profiles:
active: eureka1
eureka:
client:
#是否从Eureka上获取注册信息
#fetch-registry: false
#是否注册自身到Eureka服务器
#register-with-eureka: false
serviceUrl:
#注册中心地址
defaultZone: http://pengq.eureka1:8081/eureka/,http://pengq.eureka2:8082/eureka/,http://pengq.eureka3:8083/eureka/
#关闭自我保护机制,保证不可用服务及时踢出
server:
enable-self-preservation: false
(这里的 pengq.eureka1 是由于需要模拟三台机器的相互注册,修改 hosts文件得到的,如果一台单独的机器只部署一个eureka服务则不需此步骤),hosts文件如图:
fetch-registry:表示是否从eureka server获取注册信息,如果是单一节点,不需要同步其他eureka server节点,则可以设置为false,但此处为集群,应该设置为true,默认为true,可不设置。
register-with-eureka:表示是否将自己注册到eureka server,因为要构建集群环境,需要将自己注册到及群众,所以应该开启。默认为true,可不显式设置。
application-eureka1.yml 配置:
server:
port: 8081
eureka:
instance:
instance-id: eureka1
application-eureka2.yml 配置:
server:
port: 8082
eureka:
instance:
instance-id: eureka2
application-eureka3.yml 配置:
server:
port: 8083
eureka:
instance:
instance-id: eureka3
下面我们启动这个项目,首先配置IDEA启动项,如图,这里我们配置了三个启动项,并分别把 spring.profiles.active
指向了 eureka1,eureka2,eureka3.
将我们配置好的启动项分别启动,这样我的Eureka集群就搭建好了。如果需要在 Linux上搭建eureka集群,只需要将我们项目构建的jar 启动即可。启动命令如下:
nohuo java -jar spring-cloud-eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=eureka1 &
首先,我们依然在父工程下建立 spring-cloud-eureka-client 模块,然后在pom文件中引入依赖:
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
添加配置:
spring:
application:
#服务名
name: eureka-client
eureka:
client:
serviceUrl:
#注册中心地址
defaultZone: http://pengq.eureka1:8081/eureka/,http://pengq.eureka2:8082/eureka/,http://pengq.eureka3:8083/eureka/
server:
port: 8084
创建启动类,添加注解 @SpringBootApplication
@EnableEurekaClient
启动,再次刷新 Eureka 的 监控界面,看已经注册上了。
源码地址:https://github.com/QUPENGRANDOM/spring-cloud-parent.git