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

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

сервер является частью кластера Rackspace с внутренними и внешними IPs. Хост работает на порту 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));

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

любые предложения по заставить это работать?

6 ответов


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

netstat -nlpt | grep 6379

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

после установления он слушает, где вы ожидаете это к, с удаленного узла, который должен иметь доступ попробуйте:

redis-cli -h REMOTE.HOST ping

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

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


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

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

bind 127.0.0.1

to

bind 0.0.0.0

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

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

redis-cli -h 192.168.x.x ping

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

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


в дополнение к превосходному ответу, данному Orabîg:

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

#bind 127.0.0.1
protected-mode no

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


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

    • также примечание Я включаю скриншот настройки виртуального окна в подключитесь к redis, если вы находитесь в windows и подключаетесь к виртуальной машине virtualbox.

enter image description here


Orabig является правильным.

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

in/etc/redis / redis.conf

bind 10.0.2.15

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

sudo systemctl restart redis

Он должен работать!


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