Ошибка: сброс соединения по одноранговому узлу при подключении к кэш-памяти Elastic с использованием метода stunnal
Я использую эластичный кеш одноузлового шарда Redis 4.0 более поздней версии.
Я включил In-Transit Encryption и дал маркер авторизации redis.
По этой ссылке я создал один бастионный хост со станналом
https://aws.amazon.com/premiumsupport/knowledge-center/elasticache-connect-redis-node/
Я могу подключиться к узлу Redis эластичного кэша, используя следующий способ
redis-cli -h имя хоста -p 6379 -a мой пароль
и я могу сделать Telnet также. НО, когда я пинг (ожидаемый ответ "PONG") на Redis-Cli после подключения, это дает
"Ошибка: сброс соединения по пиру"
Я проверил группу безопасности с обеих сторон. Любая идея? Машина Bastion Host Ubuntu 16.04
2 ответа
Как я уже упоминал в вопросе, я выполнял команду следующим образом:
redis-cli -h имя хоста -p 6379 -a мой пароль
Правильный способ подключения к кластеру ElastiCache через stunnel должен использовать "localhost" в качестве адреса хоста, например:
redis-cli -h localhost -p 6379 -a мой пароль
Существует объяснение использования адреса localhost:
когда вы создаете туннель между вашим бастионным сервером и хостом ElastiCache через stunnel, программа запускает службу, которая прослушивает локальный порт TCP (6379), инкапсулирует соединение с использованием протокола SSL и передает данные между локальным сервером и сервером. удаленный узел.
вам нужно запустить stunnel, проверить, прослушивает ли служба адрес localhost (127.0.0.1), и подключиться, используя "localhost" в качестве адреса назначения: "
Старт воронки.
$ sudo stunnel /etc/stunnel/redis-cli.conf
Используйте команду netstat для подтверждения запуска туннелей:
$ netstat -tulnp | grep -i stunnel
Теперь вы можете использовать redis-cli для подключения к зашифрованному узлу Redis с использованием локальной конечной точки туннеля:
$ redis-cli -h localhost -p 6379 -a MySecretPassword
localhost:6379> установить foo "bar"
Хорошо
localhost:6379> получить фу
"бар"
"Ошибка: сброс соединения по пиру" означает, что Redis убивает ваше соединение, не отправляя никакого ответа.
Одна из возможных причин - вы пытаетесь подключиться к узлу Redis без использования SSL, так как ваше соединение будет отклонено сервером Redis без ответа [1]. Убедитесь, что вы подключаетесь через правильный порт в туннельном прокси. Если вы подключаетесь напрямую с хоста бастиона, вы должны использовать локальный хост.
Другой вариант заключается в том, что вы неправильно настроили свой stunnel, чтобы он не включал версию SSL, поддерживаемую Redis. Вы должны дважды проверить, что файл конфигурации точно такой же, как тот, который приведен в документации по поддержке.
Если это не решит вашу проблему, вы можете попытаться создать клиентскую базу, включенную в открытый исходный код AWS.[2] Вам нужно проверить репозиторий, следовать инструкциям в файле readme, а затем выполнить команду BUILD_SSL=yes, выполнить redis-cli.
[1] https://github.com/madolson/redis/blob/unstable/src/ssl.c#L464[2] https://github.com/madolson/redis/blob/unstable/SSL_README.md
Скорее всего, в экземпляре ElastiCache Redis используется шифрование при передаче и шифрование в состоянии покоя, и по умолчанию интерфейс командной строки Redis несовместим с шифрованием.
Для подключения кластера Redis вам необходимо настроить stunnel
https://datanextsolutions.com/blog/how-to-fix-redis-cli-error-connection-reset-by-peer/