Redis - подключение к удаленному серверу

90

Я только что установил Redis с помощью инструкций в кратком руководстве по http://redis.io/topics/quickstart на моем сервере Ubuntu 10.10. Я запускаю службу как dameon (поэтому ее можно запустить init.d)

Сервер является частью кластера Rackspace с внутренними и внешними IP-адресами. Хост работает на порту 6379 (стандарт для Redis)

Я добавил строку в iptables, чтобы разрешить входящие соединения с порта 6379, как показано ниже:

 ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:6379 

В моем PHP-коде на другом сервере я пытаюсь подключиться к новому серверу Redis здесь:

$this->load->helper("iredis");

$hostname = "IP ADDRESS HERE";

$redis = new iRedis(array('hostname' => $hostname, 'port' => 6379));

Как только я это сделаю - я всегда получаю отказ от соединения. В моем файле redis.conf у меня локальная команда компиляции закомментирована, поэтому она должна прослушиваться больше, чем IP-адрес localhost. Я могу подключиться к базе данных на локальной машине просто не на другом сервере. Я пробовал внешние и внутренние IP-адреса без везения.

Любые предложения по работе с этим?

  • 0
    Вы можете подключиться с помощью инструмента командной строки Redis? redis-cli -h hostname
  • 0
    Ошибка сервера имеет канонический вопрос об отказе в соединении .
Теги:
redis
configuration

6 ответов

104
Лучший ответ

Сначала я проверил бы, чтобы убедиться, что он прослушивает IP-адреса, которые вы ожидаете:

netstat -nlpt | grep 6379

В зависимости от того, как вы начинаете/останавливаете, вы, возможно, не перезапустили экземпляр, если считаете, что имеете. Netstat скажет вам, если он слушает, где вы думаете. Если нет, перезагрузите его и убедитесь, что он перезагрузился. Если он перезагрузится и все еще не прослушивается, где вы ожидаете, обязательно проверьте свой файл конфигурации.

После установки он прослушивает, где вы ожидаете, от удаленного устройства node, у которого должен быть доступ:

redis-cli -h REMOTE.HOST ping

Вы также можете попробовать это с локального хоста, но использовать IP-адрес, ожидаемый от него, вместо имени хоста или локального хоста. Вы должны увидеть это PONG в ответ в обоих случаях.

Если нет, ваш брандмауэр блокирует вас. Это будут либо локальные IPTables, либо, возможно, межсетевой экран между узлами. Вы можете добавить оператор регистрации в свою конфигурацию IPtables, чтобы регистрировать подключения через 6379, чтобы узнать, что происходит. Кроме того, попытка повторить пинг из локального и нелокального на тот же IP-адрес должна быть иллюстративной. Если он отвечает локально, но не удаленно, я склоняюсь к промежуточному брандмауэру в зависимости от сложности ваших правил IP-таблиц node.

  • 16
    Итак, чтобы быть ясным, вы отрицаете ответ на опубликованную проблему, потому что у вас есть связанная (но явно не идентичная) проблема, которую она не решает? Хотя я согласен с тем, чтобы опубликовать ваше решение, опровергнуть правильный ответ, потому что ваша проблема была другой, не кажется правильным. Тем не менее, ваше решение не является хорошим выбором для вопроса, потому что у OP есть несколько IP-адресов, и он может не захотеть прослушивать все из них, а OP специально ссылался на раздел bind в файле конфигурации в вопросе. Таким образом, ваше решение не отвечает на поставленный вопрос.
  • 2
    Что ж, я снова прочитал вопрос, и для меня не было так очевидно, что OP установил правильный conf для этой строки 'bind'. Кроме того, я не уверен, что какой-либо брандмауэр вовлечен в его дело. Во всяком случае, я могу удалить свой -1, если вы думаете, что это грубо. Я только что обнаружил, что ваш ответ был совершенно не по теме, и что он не очень помог бы большинству пользователей, приходящих сюда с очень распространенной проблемой ... (параметр bind по умолчанию)
Показать ещё 5 комментариев
258

Я придерживался той же проблемы, и предыдущий ответ мне не помог (хотя хорошо написано).

Решение находится здесь: проверьте /etc/redis/redis.conf и не забудьте изменить значение по умолчанию

bind 127.0.0.1

к

bind 0.0.0.0

Затем перезапустите службу (service redis-server restart)

Теперь вы можете проверить, что redis прослушивает нелокальный интерфейс с помощью

redis-cli -h 192.168.x.x ping

(замените 192.168.x.x своим IP-адресом)

Важное примечание:, как указано несколькими пользователями, не безопасно, чтобы установить это на сервере, который находится в Интернете. Вы должны быть уверены, что redis защищен любым способом, который соответствует вашим потребностям.

  • 14
    Это был правильный ответ для меня.
  • 1
    То же самое и здесь, вы должны разрешить удаленные подключения с сервера Redis, прежде чем думать о настройках брандмауэра или проблемах сети. Спасибо Орабиг
Показать ещё 17 комментариев
7

В дополнение к отличному ответу, сделанному Орабигом:

Я решил эту проблему, полностью удалив раздел bind и установив protected-mode в no.

#bind 127.0.0.1
protected-mode no

Никогда не используйте этот метод на общедоступных серверах.

  • 1
    Для тех, кто использует незащищенный метод: пожалуйста, защитите свой Redis Server !! или вы потеряете все свои файлы :( Мой сервер был взломан, потому что я не защищаю Redis Server. Злоумышленник хочет, чтобы я заплатил некоторую сумму денег (достаточно большую для меня). Злоумышленник что-то вроде этого: duo.com/ блог / ...
0

Орабиг прав.

Вы можете связать 10.0.2.15 в Ubuntu (VirtualBox), затем выполнить переадресацию портов с хоста на гостевой Ubuntu.

в файле /etc/redis/redis.conf

bind 10.0.2.15

затем перезапустите redis:

sudo systemctl restart redis

Он будет работать!

0
  • если вы загрузили redis самостоятельно (не apt-get install redis-server), а затем отредактировали redis.conf с помощью вышеприведенные предложения, убедитесь, что ваш запуск redis с конфигурацией так: ./src/redis-server redis.conf

    • Также обратите внимание на то, что я включаю скриншот настройки виртуальной коробки в подключитесь к redis, если вы находитесь на окнах и подключаетесь к виртуальному боксу vm.

Изображение 3930

0

Настройка tcp-keepalive на 60 (была установлена ​​в 0) в конфигурации redis сервера помогла мне решить эту проблему.

Сообщество Overcoder
Наверх
Меню