部署Eureka集群实现高可用服务

Posted 程序员不秃头

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了部署Eureka集群实现高可用服务相关的知识,希望对你有一定的参考价值。

因生产环境需要,遂部署 Eureka 集群进行迁移,记录在此

文中链接无法点击的可以在文末点击阅读原文

1. 环境准备

服务器:Ubuntu-Server 20.04 TLS JDK:jdk-11.0.8 SpringBoot: 2.3.7.RELEASE SpringCloud:Hoxton.SR9

Ubuntu 安装可以参考文末链接

2. 部署 Eureka 集群

这里推荐使用阿里云脚手架创建 Eureka 服务项目 脚手架生成 

启动类启动 Eureka 注册中心

@EnableEurekaServer@SpringBootApplicationpublic class EurekaServerApplication {
public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); }
}

编写 yml 配置

192.168.73.128 配置文件

server: port: 21000
spring: application: name: eureka-server
#Eureka settingeureka: instance: hostname: 192.168.73.128 client: register-with-eureka: true #是否将自己注册到注册中心上 fetch-registry: true #是否从Eureka上获取注册信息 service-url: defaultZone: http://192.168.73.129:21000/eureka/,http://192.168.73.130:21000/eureka/

192.168.73.129 配置文件

server: port: 21000
spring: application: name: eureka-server
#Eureka settingeureka: instance: hostname: 192.168.73.129 client: register-with-eureka: true #是否将自己注册到注册中心上 fetch-registry: true #是否从Eureka上获取注册信息 service-url: defaultZone: http://192.168.73.128:21000/eureka/,http://192.168.73.130:21000/eureka/

192.168.73.130 配置文件

server: port: 21000
spring: application: name: eureka-server
#Eureka settingeureka: instance: hostname: 192.168.73.130 client: register-with-eureka: true #是否将自己注册到注册中心上 fetch-registry: true #是否从Eureka上获取注册信息 service-url: defaultZone: http://192.168.73.128:21000/eureka/,http://192.168.73.129:21000/eureka/

分别在当前主机注册其它两台主机 达到三台主机都互相注册

打 jar 包,分别放到三台服务器上启动~

128 节点上 部署Eureka集群实现高可用服务

129 节点上 部署Eureka集群实现高可用服务

130 节点上 部署Eureka集群实现高可用服务

3. 部署服务

创建 producer 服务

@EnableEurekaClient@SpringBootApplicationpublic class ProducerApplication {
public static void main(String[] args) { SpringApplication.run(ProducerApplication.class, args); }
}

配置文件 注册到三个 EurekaServer 中

server: port: 18000
spring: application: name: producer-server
#Eureka settingeureka: instance: prefer-ip-address: true #使用ip进行注册 client: register-with-eureka: true #是否将自己注册到注册中心上 fetch-registry: true #是否从Eureka上获取注册信息 service-url: defaultZone: http://192.168.73.128:21000/eureka/,http://192.168.73.129:21000/eureka/,http://192.168.73.130:21000/eureka/

提供 sayhalo 接口

@RestController@RequestMapping("producer")public class ProducerController { @GetMapping("sayhalo") public String sayhalo(){ return "sayhalo"; }}

启动 producer 服务 可以看到 在三个注册中心都已经注册上了 部署Eureka集群实现高可用服务 部署Eureka集群实现高可用服务 部署Eureka集群实现高可用服务

创建 consumer 服务

@EnableFeignClients@EnableEurekaClient@SpringBootApplicationpublic class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); }}
server: port: 18001
spring: application: name: consumer-server
#Eureka settingeureka: instance: prefer-ip-address: true #使用ip进行注册 client: register-with-eureka: true #是否将自己注册到注册中心上 fetch-registry: true #是否从Eureka上获取注册信息 service-url: defaultZone: http://192.168.73.128:21000/eureka/,http://192.168.73.129:21000/eureka/,http://192.168.73.130:21000/eureka/

使用 feign 调用 producer 服务的 sayhalo 接口

@FeignClient("producer-server")public interface ProducerFeign {
@GetMapping("producer/sayhalo") public String sayhalo();
}
@RestController@RequestMapping("consumer")public class ConsumerController {
@Autowired ProducerFeign feign;
@GetMapping("getproducer") public String getproducer(){ return feign.sayhalo(); }
}

启动 consumer 服务 可以看到在三个 eureka 注册中心都已经注册上了 部署Eureka集群实现高可用服务 部署Eureka集群实现高可用服务 部署Eureka集群实现高可用服务

调用 producer 服务的 sayhalo 接口 部署Eureka集群实现高可用服务 可以看到通过 consumer 服务调用 producer 服务的 sayhalo 接口成功

4. 测试高可用

关闭 128 节点的 eureka 可以看到在其它两个注册中心上已经没有 128 节点的 eureka 服务了 部署Eureka集群实现高可用服务 部署Eureka集群实现高可用服务

我们再次请求接口 是没有问题的 部署Eureka集群实现高可用服务 我们把 128 节点启动 在其它节点可以看到它注册上来了 部署Eureka集群实现高可用服务 部署Eureka集群实现高可用服务

上边是 eureka 正常退出的情况,我们模拟下因网络波动或者无法抗拒的原因导致的非正常退出情况

我直接把 130 的 node 关机 可以看到 eureka 集群上还是可以看到这个节点,但是上边出现了一行红色的字 这是因为 Eureka 的自我自我保护机制,它会认为服务可能网络波动在等待服务上线 可以参考文末的 Eureka 自我保护机制 部署Eureka集群实现高可用服务

现在是 128 129 两台 Eureka,我同时也起了两个生产者服务,也断掉了一台。

这时候我们压测一下,可以看到成功率是百分之百的。  

5.Code

代码已上传 github. Eureka 集群部署 Demo

参考

Ubuntu-Server 20.04 安装详细过程 (图文)

Spring Cloud Eureka 自我保护机制


以上是关于部署Eureka集群实现高可用服务的主要内容,如果未能解决你的问题,请参考以下文章

Eureka的高可用

SpringCloud组件:Eureka高可用集群部署

spring cloud 搭建注册中心Eureka(集群模式)

springcloud-eureka高可用集群搭建

Eureka高可用集群服务端和客户端配置

Eureka高可用集群环境搭建