Подключение к зашифрованному ElastiCache Redis из Java с использованием CName
Я использую драйвер Lettuce из данных Spring для подключения к ElastiCache с использованием транзитного шифрования. Когда я пытаюсь подключиться к Route53 CName, назначенному кластеру ElastiCache. Я получаю эту ошибку:
Caused by: com.lambdaworks.redis.RedisException: Cannot retrieve initial cluster partitions from initial URIs [RedisURI [host='my.cname.net', port=6379]]
at com.lambdaworks.redis.cluster.RedisClusterClient.loadPartitions(RedisClusterClient.java:507)
at com.lambdaworks.redis.cluster.RedisClusterClient.initializePartitions(RedisClusterClient.java:481)
at com.lambdaworks.redis.cluster.RedisClusterClient.connectClusterAsyncImpl(RedisClusterClient.java:335)
at com.lambdaworks.redis.cluster.RedisClusterClient.connectClusterAsync(RedisClusterClient.java:273)
at org.springframework.data.redis.connection.lettuce.LettuceClusterConnection.doGetAsyncDedicatedConnection(LettuceClusterConnection.java:1250)
at org.springframework.data.redis.connection.lettuce.LettuceConnection.getAsyncDedicatedConnection(LettuceConnection.java:3466)
at org.springframework.data.redis.connection.lettuce.LettuceConnection.getDedicatedConnection(LettuceConnection.java:3487)
at org.springframework.data.redis.connection.lettuce.LettuceConnection.getConnection(LettuceConnection.java:3460)
at org.springframework.data.redis.connection.lettuce.LettuceConnection.sMembers(LettuceConnection.java:1998)
... 24 common frames omitted
Вот код, который я использую для подключения:
@Bean
public static RedisConnectionFactory connectionFactory() {
Map<String, Object> source = Maps.newHashMap();
source.put("spring.redis.cluster.nodes", "my.cname.net:6379");
RedisClusterConfiguration clusterConfiguration = new RedisClusterConfiguration(new MapPropertySource("RedisClusterConfiguration", source));
clusterConfiguration.setMaxRedirects(10);
LettuceConnectionFactory factory = new LettuceConnectionFactory(clusterConfiguration);
factory.setValidateConnection(false);
factory.setUseSsl(true);
return factory;
}
Теперь, когда я заменяю Cname действительным сетевым именем, присоединенным к кластеру ElastiCache, программа работает. Кто-нибудь знает, почему происходит сбой Программы только при использовании Cname?
1 ответ
У нас была очень похожая проблема с клиентом.NET. Я полагаю, что проблема заключается в том, что сертификат о том, что конечная точка Redis предназначена для домена amazonaws.com, поэтому подключение к кластеру через ваше CName my.cname.net не удается, поскольку этот сертификат недопустим для этого домена. Мы не смогли найти какой-либо способ изменить сертификат, поэтому не могли обойти проблему и вынуждены были использовать реальное сетевое имя в соединении.