Я только что установил 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-адреса без везения.
Любые предложения по работе с этим?
Сначала я проверил бы, чтобы убедиться, что он прослушивает IP-адреса, которые вы ожидаете:
netstat -nlpt | grep 6379
В зависимости от того, как вы начинаете/останавливаете, вы, возможно, не перезапустили экземпляр, если считаете, что имеете. Netstat скажет вам, если он слушает, где вы думаете. Если нет, перезагрузите его и убедитесь, что он перезагрузился. Если он перезагрузится и все еще не прослушивается, где вы ожидаете, обязательно проверьте свой файл конфигурации.
После установки он прослушивает, где вы ожидаете, от удаленного устройства node, у которого должен быть доступ:
redis-cli -h REMOTE.HOST ping
Вы также можете попробовать это с локального хоста, но использовать IP-адрес, ожидаемый от него, вместо имени хоста или локального хоста. Вы должны увидеть это PONG в ответ в обоих случаях.
Если нет, ваш брандмауэр блокирует вас. Это будут либо локальные IPTables, либо, возможно, межсетевой экран между узлами. Вы можете добавить оператор регистрации в свою конфигурацию IPtables, чтобы регистрировать подключения через 6379, чтобы узнать, что происходит. Кроме того, попытка повторить пинг из локального и нелокального на тот же IP-адрес должна быть иллюстративной. Если он отвечает локально, но не удаленно, я склоняюсь к промежуточному брандмауэру в зависимости от сложности ваших правил IP-таблиц node.
Я придерживался той же проблемы, и предыдущий ответ мне не помог (хотя хорошо написано).
Решение находится здесь: проверьте /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 защищен любым способом, который соответствует вашим потребностям.
В дополнение к отличному ответу, сделанному Орабигом:
Я решил эту проблему, полностью удалив раздел bind
и установив protected-mode
в no
.
#bind 127.0.0.1
protected-mode no
Никогда не используйте этот метод на общедоступных серверах.
Орабиг прав.
Вы можете связать 10.0.2.15 в Ubuntu (VirtualBox), затем выполнить переадресацию портов с хоста на гостевой Ubuntu.
в файле /etc/redis/redis.conf
bind 10.0.2.15
затем перезапустите redis:
sudo systemctl restart redis
Он будет работать!
если вы загрузили redis самостоятельно (не apt-get install redis-server), а затем отредактировали redis.conf с помощью
вышеприведенные предложения, убедитесь, что ваш запуск redis с конфигурацией
так: ./src/redis-server redis.conf
Настройка tcp-keepalive на 60 (была установлена в 0) в конфигурации redis сервера помогла мне решить эту проблему.
redis-cli -h hostname