У меня есть приложение 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