Настройка кластера Spring Cloud Eureka в AWS с использованием эластичного сетевого интерфейса (ENI) на основе DNS - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь настроить кластер eureka в регионе us-east-1.Есть две зоны доступности (зона b & d), и в каждой зоне работает экземпляр сервера eureka.Мы устанавливаем текстовую запись DNS, которая ссылается на ENI серверов в каждой зоне.

Spring boot version - 2.0.5.RELEASE

Ниже приведена дополнительная информация о среде:

Зона b:

IP Address - XX.XXX.XXX.250
Hostname - ip-XX-XXX-XXX-250.ec2.internal
ENI IP Address - XX.XXX.XXX.133
ENI hostname - ip-XX-XXX-XXX-133.ec2.internal

Зона d:

IP Address - XX.XXX.XXX.176
Hostname - ip-XX-XXX-XXX-176.ec2.internal
ENI IP Address - XX.XXX.XXX.161
ENI hostname - ip-XX-XXX-XXX-161.ec2.internal

Конфигурация DNS:

dig -t txt txt.us-east-1.dev-aws.XXXXX.com
;; ANSWER SECTION:
txt.us-east-1.dev-aws.XXXXX.com. 300 IN TXT "us-east-1b.dev-aws.XXXXX.com"
txt.us-east-1.dev-aws.XXXXX.com. 300 IN TXT "us-east-1d.dev-aws.XXXXX.com"

nslookup -q=txt txt.us-east-1b.dev-aws.XXXXX.com
Non-authoritative answer:
txt.us-east-1b.dev-aws.XXXXX.com    text = "ip-XX-XXX-XXX-133.ec2.internal"

nslookup -q=txt txt.us-east-1d.dev-aws.XXXXX.com
Non-authoritative answer:
txt.us-east-1d.dev-aws.XXXXX.com    text = "ip-XX-XXX-XXX-161.ec2.internal"

application.properties

server.port=8761
eureka.client.fetch-registry=true
eureka.client.eureka-server-u-r-l-context=eureka
eureka.client.region=us-east-1
eureka.client.eureka-server-port=8761
eureka.client.use-dns-for-fetching-service-urls=true
eureka.client.eureka-server-d-n-s-name=dev-aws.XXXXX.com
eureka.client.register-with-eureka=true
eureka.server.binding-strategy=ENI
eureka.datacenter=cloud
eureka.environment=AWS-DEV

SpringEurekaServerAwsApplication.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

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

    @Bean
    public EurekaInstanceConfigBean eurekaInstanceConfig(InetUtils inetUtils) {
        EurekaInstanceConfigBean eurekaInstanceConfigBean = new EurekaInstanceConfigBean(inetUtils);
        AmazonInfo info = AmazonInfo.Builder.newBuilder().autoBuild("eureka");
        eurekaInstanceConfigBean.setDataCenterInfo(info);
        eurekaInstanceConfigBean.setHostname(info.get(AmazonInfo.MetaDataKey.localHostname));
        eurekaInstanceConfigBean.setIpAddress(info.get(AmazonInfo.MetaDataKey.localIpv4));
        return eurekaInstanceConfigBean;
    }   
}

Я могу видеть все экземпляры, зарегистрированные в настоящее время в eurekaв обоих случаях, но доступная реплика всегда пуста.Похоже, проблема в облачном сервере eureka.Может ли кто-нибудь помочь разобраться в этой проблеме?

Ниже приведен скриншот панели инструментов eureka:

Зона b enter image description here

Зона d enter image description here

Добавлено в github

@ RyanBaxter Ryan - я могу видеть реплицированныеэкземпляры в «Экземплярах, зарегистрированных в настоящее время в Eureka», но «доступные реплики» пустые.Кроме того, требуется время (не согласованное, около 30-50 минут), чтобы отразить зарегистрированный экземпляр в репликах.Я также могу следить в журналах сервера eureka, похоже, что какая-то конфигурация неверна, но не может ее найти.

2018-10-12 15:46:52.624  INFO 26564 --- [Eureka-PeerNodesUpdater] c.n.eureka.cluster.PeerEurekaNodes       : Removing no longer available peer nodes [http://ip-XX-XXX-XXX-161.ec2.internal:8761/eureka/]
2018-10-12 15:46:52.624  INFO 26564 --- [Eureka-PeerNodesUpdater] c.n.eureka.cluster.PeerEurekaNodes       : Adding new peer nodes [http://ip-XX-XXX-XXX-133.ec2.internal:8761/eureka/]

2018-10-12 16:16:52.730  INFO 26564 --- [Eureka-PeerNodesUpdater] c.n.eureka.cluster.PeerEurekaNodes       : Removing no longer available peer nodes [http://ip-XX-XXX-XXX-133.ec2.internal:8761/eureka/]
2018-10-12 16:16:52.731  INFO 26564 --- [Eureka-PeerNodesUpdater] c.n.eureka.cluster.PeerEurekaNodes       : Adding new peer nodes [http://ip-XX-XXX-XXX-161.ec2.internal:8761/eureka/]

Еще одна проблема - Eureka не отменяет привязку ENI во время выключения из-за нижеуказанного исключения:

2018-10-17 14:26:34.756  INFO 2389 --- [Thread-16] com.netflix.discovery.DiscoveryClient    : Shutting down DiscoveryClient ...
2018-10-17 14:26:34.758  WARN 2389 --- [Thread-16] .s.c.a.CommonAnnotationBeanPostProcessor : Invocation of destroy method failed on bean with name 'scopedTarget.eurekaClient': org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'eurekaInstanceConfig': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)
...