部署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 注册中心
public 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 setting
eureka:
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 setting
eureka:
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 setting
eureka:
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 节点上
129 节点上
130 节点上
3. 部署服务
创建 producer 服务
public class ProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class, args);
}
}
配置文件 注册到三个 EurekaServer 中
server:
port: 18000
spring:
application:
name: producer-server
#Eureka setting
eureka:
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 接口
public class ProducerController {
public String sayhalo(){
return "sayhalo";
}
}
启动 producer 服务 可以看到 在三个注册中心都已经注册上了
创建 consumer 服务
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
server:
port: 18001
spring:
application:
name: consumer-server
#Eureka setting
eureka:
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 接口
public interface ProducerFeign {
public String sayhalo();
}
public class ConsumerController {
ProducerFeign feign;
public String getproducer(){
return feign.sayhalo();
}
}
启动 consumer 服务 可以看到在三个 eureka 注册中心都已经注册上了
调用 producer 服务的 sayhalo 接口 可以看到通过 consumer 服务调用 producer 服务的 sayhalo 接口成功
4. 测试高可用
关闭 128 节点的 eureka 可以看到在其它两个注册中心上已经没有 128 节点的 eureka 服务了
我们再次请求接口 是没有问题的 我们把 128 节点启动 在其它节点可以看到它注册上来了
上边是 eureka 正常退出的情况,我们模拟下因网络波动或者无法抗拒的原因导致的非正常退出情况
我直接把 130 的 node 关机 可以看到 eureka 集群上还是可以看到这个节点,但是上边出现了一行红色的字 这是因为 Eureka 的自我自我保护机制,它会认为服务可能网络波动在等待服务上线 可以参考文末的 Eureka 自我保护机制
现在是 128 129 两台 Eureka,我同时也起了两个生产者服务,也断掉了一台。
这时候我们压测一下,可以看到成功率是百分之百的。
5.Code
代码已上传 github. Eureka 集群部署 Demo
参考
Ubuntu-Server 20.04 安装详细过程 (图文)
Spring Cloud Eureka 自我保护机制
以上是关于部署Eureka集群实现高可用服务的主要内容,如果未能解决你的问题,请参考以下文章