Я пытаюсь настроить кластер 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](https://i.stack.imgur.com/vN3Mm.jpg)
Зона d ![enter image description here](https://i.stack.imgur.com/U9VEB.jpg)
Добавлено в 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!)