在微服务架构这样的分布式环境中,我们需要充分考虑发生故障的情况,所以在生产环境中必须对各个组件进行高可用部署,对于微服务如此,对于服务注册中心也一样。
问题:
Spring-Cloud为基础的微服务架构,所有的微服务都需要注册到注册中心,如果这个注册中心阻塞或者崩了,那么整个系统都无法继续正常提供服务,所以,这里就需要对注册中心搭建,高可用(HA)集群。
Eureka Server的设计一开始就考虑了高可用问题,在Eureka的服务治理设计中,所有节点即是服务提供方,也是服务消费方,服务注册中心也不例外。是否还记得在单节点的配置中,我们设置过下面这两个参数,让服务注册中心不注册自己:
eureka.client.register-with-eureka-false
eureka.client.fetch-registry-false
单机Eureka注册中心服务会出现单点故障问题。
构建cloud-eureka-server7002工程
修改Pom
<dependencies>
<!-- 服务注册发现Eureka-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
修改映射配置
找到C:\Windows\System32\drivers\etc\hosts
#添加如下配置
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
修改7001YML文件
#修改7001主机yml文件
server:
port: 7001
eureka:
instance:
# eureka服务端的实例名字
hostname: eureka7001.com
client:
#表 示是否将自己注册到Eureka Server
register-with-eureka: false
# 表示是否从Eureka Server获取注册的服务信息
fetch-registry: false
# 设置与 Eureka server交互的地址查询服务和注册服务都需要依赖这个地址
service-url:
defaultZone: http://eureka7002.com:7002/eureka/
修改7002YML文件
#修改7001主机yml文件
server:
port: 7002
eureka:
instance:
# eureka服务端的实例名字
hostname: eureka7002.com
client:
#表 示是否将自己注册到Eureka Server
register-with-eureka: false
# 表示是否从Eureka Server获取注册的服务信息
fetch-registry: false
# 设置与 Eureka server交互的地址查询服务和注册服务都需要依赖这个地址
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
编写主启动类
/**
* 主启动类
*/
@Slf4j
@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7002 {
public static void main(String[] args) {
SpringApplication.run(EurekaMain7002.class,args);
log.info("*************** Eureka 服务启动成功 ***********");
}
}
将支付微服务8001发布到Eureka集群上
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
将订单微服务80发布到Eureka集群上
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
测试
- 先启动EurekaServer集群
- 在启动服务提供者provider服务
- 在启动消费者服务