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

Я только что установил 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-адреса без везения.

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

Ответ 1

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

netstat -nlpt | grep 6379

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

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

redis-cli -h REMOTE.HOST ping

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

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

Ответ 2

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

Решение находится здесь: проверьте /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 защищен любым способом, который соответствует вашим потребностям.

Ответ 3

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

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

#bind 127.0.0.1
protected-mode no

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

Ответ 4

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

Ответ 5

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

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

введите описание изображения здесь

Ответ 6

Орабиг прав.

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

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

bind 10.0.2.15

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

sudo systemctl restart redis

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