Redis – 连接到远程服务器
我刚刚使用Ubuntu 10.10服务器上的http://redis.io/topics/quickstart上的快速入门指南中的说明成功安装了Redis。 我正在运行该服务作为dameon(所以它可以运行init.d)
该服务器是具有内部和外部IP的Rackspace集群的一部分。 主机运行在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更多地进行监听。 我可以连接到本地机器上的数据库而不是另一台服务器上。 我已经尝试了外部和内部的IP没有运气。
任何build议让这个工作?
首先,我会检查它是否正在监听您期望的IP:
netstat -nlpt | grep 6379
根据你开始/停止的方式,你可能没有真正重新启动实例。 netstat会告诉你它是否在听你认为的地方。 如果没有,请重新启动并确保重新启动。 如果它重新启动,仍然没有听到你的期望,检查你的configuration文件只是为了确保。
在build立之后,它正在听你期望的地方,从应该有权访问的远程节点上尝试:
redis-cli -h REMOTE.HOST ping
您也可以从本地主机尝试,但使用您期望它监听的IP而不是主机名或本地主机。 在这两种情况下你都应该看到PONG的反应。
否则,您的防火墙将阻止您。 这可能是本地的IPTables,也可能是节点之间的防火墙。 您可以添加一个日志语句到您的IPtablesconfiguration来logging超过6379的连接,看看发生了什么。 此外,试图从本地和非本地到相同的IP重新ping,应该是说明性的。 如果它本地响应,但不是远程响应,则依赖于您的节点IP表规则的复杂性,我会倾向于介入防火墙。
我被困在同样的问题,前面的答案没有帮助我(虽然写得好)。
解决方法是:检查你的/etc/redis/redis.conf
,并确保改变默认值
bind 127.0.0.1
至
bind 0.0.0.0
然后重新启动你的服务( service redis-server restart
)
你现在可以检查redis是否在非本地接口上进行监听
redis-cli -h 192.168.xx ping
(用您的IP地址replace192.168.xx)
重要提示:正如几位用户所说,将其设置在暴露于Internet的服务器上并不安全 。 您应该确定您的redis受到任何适合您的需求的保护。
除了Orabîg给出的优秀答案之外,
我通过完全删除bind
部分并将protected-mode
设置为no
来解决此问题。
#bind 127.0.0.1 protected-mode no
切勿在公开暴露的服务器上使用此方法。
在服务器的redisconfiguration中将tcp-keepalive设置为60(它被设置为0)帮助我解决了这个问题。
-
如果你自己下载了redis(不是apt-get install redis-server),然后用上面的build议编辑redis.conf,请确保你的启动redis的configuration是这样的:
./src/redis-server redis.conf
redis-server./src/redis-server redis.conf
- 还侧注意我包括虚拟框设置的连接到Redis的屏幕截图,如果你在Windows上,并连接到一个virtualbox虚拟机。
奥拉比是正确的。
您可以在Ubuntu(VirtualBox)中绑定10.0.2.15,然后执行从主机到客户端Ubuntu的端口转发 。
在/etc/redis/redis.conf中
bind 10.0.2.15
然后,重新启动redis:
sudo systemctl restart redis
它应该工作!