Реализация двух одноранговых серверов Eureka: методы и примеры кода

Под «Двумя одноранговыми серверами Eureka» подразумевается сценарий, в котором у вас есть два сервера Eureka, которые знают друг о друге. Eureka – это сервер реестра и обнаружения служб, используемый в архитектурах микросервисов.

В этой настройке оба сервера Eureka действуют как одноранговые, то есть обмениваются данными и синхронизируют информацию своего реестра. Эта настройка обеспечивает избыточность и отказоустойчивость при обнаружении служб.

Вот несколько методов, которые можно использовать для реализации двух одноранговых серверов Eureka:

Метод 1: Spring Cloud Netflix

// Eureka Server 1
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer1Application {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer1Application.class, args);
    }
}
// Eureka Server 2
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer2Application {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer2Application.class, args);
    }
}
// application.properties (for both servers)
spring.application.name=eureka-server
server.port=8761
# Eureka server 1 configuration
eureka.client.serviceUrl.defaultZone=http://localhost:8762/eureka/
# Eureka server 2 configuration
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

Метод 2: автономный Netflix Eureka
Вы также можете запустить два автономных экземпляра серверов Eureka без использования Spring Cloud.

Сначала загрузите JAR-файл сервера Eureka из репозитория Netflix. Затем создайте два отдельных файла конфигурации для каждого сервера:

eureka-server1.properties:

server.port=8761
eureka.client.serviceUrl.defaultZone=http://localhost:8762/eureka/

eureka-server2.properties:

server.port=8762
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

Запустите серверы, используя следующие команды в отдельных окнах терминала:

java -jar eureka-server.jar --spring.config.name=eureka-server1
java -jar eureka-server.jar --spring.config.name=eureka-server2

Метод 3: Kubernetes
Если вы используете Kubernetes, вы можете развернуть два экземпляра сервера Eureka как отдельные модули и использовать службы Kubernetes для связи.

Вот пример конфигурации YAML для двух серверов Eureka:

eureka-server1.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: eureka-server1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: eureka-server1
  template:
    metadata:
      labels:
        app: eureka-server1
    spec:
      containers:
        - name: eureka-server1
          image: eureka-server:latest
          ports:
            - containerPort: 8761
          env:
            - name: EUREKA_CLIENT_SERVICEURL_DEFAULTZONE
              value: http://eureka-server2:8762/eureka/
---
apiVersion: v1
kind: Service
metadata:
  name: eureka-server1
spec:
  selector:
    app: eureka-server1
  ports:
    - protocol: TCP
      port: 8761
      targetPort: 8761

eureka-server2.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: eureka-server2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: eureka-server2
  template:
    metadata:
      labels:
        app: eureka-server2
    spec:
      containers:
        - name: eureka-server2
          image: eureka-server:latest
          ports:
            - containerPort: 8761
          env:
            - name: EUREKA_CLIENT_SERVICEURL_DEFAULTZONE
              value: http://eureka-server1:8761/eureka/
---
apiVersion: v1
kind: Service
metadata:
  name: eureka-server2
spec:
  selector:
    app: eureka-server2
  ports:
    - protocol: TCP
      port: 8761
      targetPort: 8761

Это всего лишь несколько способов реализации двух одноранговых серверов Eureka. Вы можете выбрать метод, который соответствует вашей среде и предпочтениям.