Под «Двумя одноранговыми серверами 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. Вы можете выбрать метод, который соответствует вашей среде и предпочтениям.