Назад | Перейти на главную страницу

Почему мое Java-приложение может подключиться к кластеру AWS elasticache Redis с библиотекой салата, но не напрямую с помощью redis-cli?

У меня есть приложение java, работающее в экземпляре EC2, в котором используется салат (https://lettuce.io/), чтобы поговорить с кластером Redis в AWS ElasticCache.

Приложение Java может подключиться без проблем. Вот результат netstat:

tcp6       0      0 10.0.56.94:45846        10.0.34.61:6379         ESTABLISHED
tcp6       0      0 10.0.56.94:33198        10.0.33.125:6379        ESTABLISHED
tcp6       0      0 10.0.56.94:57526        10.0.32.189:6379        ESTABLISHED

Я вошел в тот же экземпляр ec2 и попытался использовать redis-cli для подключения того же кластера. Однако у меня нет успеха с redis-cli.

Redis uri для java-приложения выглядит примерно так:

rediss://my-project-0001-001.my-project.abczy.use1.cache.amazonaws.com:6379,my-project-0002-001.my-project.abczy.use1.cache.amazonaws.com:6379,my-project-0003-001.my-project.abczy.use1.cache.amazonaws.com:6379

Однако, если я применяю этот uri к redis-cli, выдается ошибка: «недопустимая схема uri».

Ошибка подавляется, если я заменяю rediss с участием redis в uri. Но я все еще не могу подключиться к кластеру.

Есть альтернативы, которые я пробовал (и они просто «ничего не делают»: вообще нет сообщений об ошибках. Просто ничего не показывает).

Подключиться к узлу напрямую

redis-cli -c -h my-project-0001-001.my-project.abczy.use1.cache.amazonaws.com -p 6379 -a auth_token

Подключиться к конечной точке конфигурации

redis-cli -c -h  clustercfg.my-project.abczy.use1.cache.amazonaws.com -p 6379 -a auth_token

Используйте IP напрямую

# Use netstat to find out the IPs
redis-cli -c -h 10.0.34.61 -p 6379 -a auth_token

Используйте IP напрямую без -c флаг

redis-cli -h 10.0.34.61 -p 6379 -a auth_token

Как узнать, почему не подключается redis-cli? Есть ли способ отследить маршруты?

Согласно документации, redis-cli не поддерживает SSL или TLS:

Чтобы получить доступ к данным с узлов ElastiCache для Redis с включенным шифрованием при передаче, вы используете клиентов, которые работают с Secure Socket Layer (SSL). Однако redis-cli не поддерживает SSL или безопасность транспортного уровня (TLS).

https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/in-transit-encryption.html#connect-tls

Вы можете использовать stunnel как обходной путь:

setuid = root
setgid = root
pid = /var/run/stunnel.pid
debug = 7 
delay = yes
options = NO_SSLv2
options = NO_SSLv3
[redis-cli]
   client = yes
   accept = 127.0.0.1:6379
   connect = my-project-0001-001.my-project.abczy.use1.cache.amazonaws.com:6379
[redis-cli-replica1]
   client = yes
   accept = 127.0.0.1:6380
   connect = my-project-0002-001.my-project.abczy.use1.cache.amazonaws.com:6379
[redis-cli-replica2]
   client = yes
   accept = 127.0.0.1:6381
   connect = my-project-0003-001.my-project.abczy.use1.cache.amazonaws.com:6379

начать stunnel

sudo stunnel /etc/stunnel/redis-cli.conf

подключиться с помощью redis-cli:

 redis-cli -c -h localhost-p 6379 -a auth_token