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.
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 сервера помогла мне решить эту проблему.