第一章 Eureka 简介
介绍
Eureka 是 Netflix 开源的服务发现组件,广泛应用于 Spring Cloud 微服务架构中。其核心功能是实现服务的自动注册与发现,帮助微服务之间高效、动态地进行通信。
主要特点:
高可用性:支持多节点集群部署,各节点间数据同步,避免单点故障。
服务注册与发现:服务启动后自动注册到 Eureka Server,消费者通过注册中心发现并调用服务。
自我保护机制:在网络分区或服务短暂失联时,保留已注册服务信息,防止误剔除。
去中心化架构:所有节点地位对等,采用 AP 模型(可用性与分区容错性优先),保障服务持续可用。
Eureka 由 Eureka Server(注册中心)和 Eureka Client(服务提供者/消费者)组成,是构建弹性、可扩展微服务系统的重要基础设施。
第二章 部署环境
1、基础环境
|---------|------------------------------|
| 项目 | 配置说明 |
| 节点数量 | 3 个 Eureka Server 节点 |
| Java 版本 | JDK 8 或以上 |
| 网络要求 | 节点间网络互通,开放 8761、8762、8763 端口 |
| 部署方式 | 容器化部署 |
2、 节点规划:
节点1:eureka1,IP: x.x.x.x,端口:8761
节点2:eureka2,IP: x.x.x.x,端口:8762
节点3:eureka3,IP: x.x.x.x,端口:8763
第三章
一、构建eureka集群镜像
1、编写dockerfile文件,此处基础镜像为arm版本,eureka目录中文件内容:application-dev.yml、Dockerfile、eureka-server-1.0-SNAPSHOT.jar
FROM mdsol/java8-jdk-arm:latest
COPY eureka /opt/eureka
RUN chmod -R 777 /opt/eureka/*
ENTRYPOINT ["java","-jar","/opt/eureka/eureka-server-1.0-SNAPSHOT.jar","--spring.config.location=classpath:/bootstrap.yml,/opt/eureka/application-dev.yml","&"]
- 配置文件
spring:
application:
name: eurekaServer
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
default-property-inclusion: non_null
security:
user:
name: eureka
password: e4!u$8&R*kA111
server:
port: 8761
eureka:
instance:
hostname: x.x.x.x
lease-expiration-duration-in-seconds: 60
server:
enable-self-preservation: false
eviction-interval-timer-in-ms: 30000
client:
#不向Eureka注册自己
register-with-eureka: false
#不检查其他的EurekaServer节点
fetch-registry: false
service-url:
#设置eureka服务器所在的地址,查询服务和注册服务程序都注册到这个地址(服务暴露的地址)
defaultZone: http://x.x.x.x:8761/eureka/
第三章部署过程
使用有状态服务StatefulSet部署eureka集群
- 配置文件使用configmap挂载至eureka集群中
账号密码可以自己调整修改
apiVersion: v1
data:
application.yml: |
spring:
application:
name: eurekaServer
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
default-property-inclusion: non_null
security:
user:
name: usr
password: password
server:
port: 8761
eureka:
instance:
hostname: eureka
lease-expiration-duration-in-seconds: 60
server:
enable-self-preservation: true
eviction-interval-timer-in-ms: 3000
client:
#不向Eureka注册自己
register-with-eureka: true
#不检查其他的EurekaServer节点
fetch-registry: true
service-url:
#设置eureka服务器所在的地址,查询服务和注册服务程序都注册到这个地址(服务暴露的地址)
kind: ConfigMap
metadata:
name: eureka-config-dev
namespace: paas
- service 配置文件内容
service 配置文件内容,看实际环境修改,默认不需要修改。
apiVersion: v1
kind: Service
metadata:
name: eureka-dev
namespace: paas
spec:
ports:
- name: http
port: 8761
protocol: TCP
targetPort: 8761
selector:
app: eureka-dev
type: NodePort
- 修改 StatefulSet文件
需修改参数 EUREKA_CLIENT_SERVICEURL_DEFAULTZONE ,启动命令需配置configmap文件同步修改,可保持默认启动。
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: eureka-dev
name: eureka-dev
namespace: paas
spec:
replicas: 3
selector:
matchLabels:
app: eureka-dev
serviceName: eureka-dev
template:
metadata:
creationTimestamp: null
labels:
app: eureka-dev
spec:
containers:
-
args:
-
--spring.config.location=classpath:/bootstrap.yml,/opt/eureka/application.yml
command:
-
java
-
-jar
-
/opt/eureka/eureka-server-1.0-SNAPSHOT.jar
env:
- name: EUREKA_INSTANCE_HOSTNAME
value: $(POD_NAME)
- name: EUREKA_INSTANCE_ID
value: $(POD_NAME)
- name: EUREKA_CLIENT_SERVICEURL_DEFAULTZONE
image: harbor.dcos.xixian.unicom.local/armtianti/cetp-eureke-arm-dev:latest
imagePullPolicy: IfNotPresent
name: eureka-dev
ports:
- containerPort: 8761
protocol: TCP
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /opt/eureka/application.yml
name: eureka-config-dev
subPath: application.yml
volumes:
- configMap:
defaultMode: 420
items:
- key: application.yml
path: application.yml
name: eureka-config-dev
name: eureka-config-dev
- 查看集群状态
部署成功示例如下:

- 登录eureka集群
此处登录地址 http://masterIP:nodeport 方式登录

至此部署完成,可作为部署eureka三集群参考文档。