从 Amazon AWS EC2 服务器上的 Node.js 连接到 Redis 服务器时出错

Posted

技术标签:

【中文标题】从 Amazon AWS EC2 服务器上的 Node.js 连接到 Redis 服务器时出错【英文标题】:Error connecting to Redis Server from Node.js on Amazon AWS EC2 server 【发布时间】:2012-06-08 15:29:25 【问题描述】:

我正在尝试在 Amazon AWS Ec2 微实例上运行 node.js 服务器和 Redis 服务器。

我已经安装了 Redis 服务器并且 redis-server 命令运行良好。

我使用 'Forever' 来保持 Redis-Server 运行。它工作正常。

但是当我启动我的节点服务器时,它无法连接到 Redis-Server。

它给出了以下错误 -

Error Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 

做一个'Forever List'表明redis服务器运行良好。

info:   Forever processes running
data:       uid  command script                         forever pid   logfile                        uptime          
data:   [0] _pXw node    app.js                         26670   26671 /home/ubuntu/.forever/_pXw.log 0:0:0:13.463    
data:   [1] ylT1 node    redis-server                   25013   26681 

我已经验证了redis-server启动时是从6379端口启动的。

谁能帮我解释为什么会发生这个错误以及我如何解决这个问题?

我使用以下代码连接到 Redis 。我为 Redis 安装了客户端库。

var redis = require("redis"),
        client = redis.createClient();

当我在本地主机上运行代码时一切正常。

【问题讨论】:

您是否使用 ping-pong 例程检查了 AWS 上的 redis 客户端-服务器连接。接下来,也许您应该尝试以 root 身份永久运行它。 感谢 almypal。我尝试了乒乓球测试,但测试失败了。接下来,我以 root 身份运行它,而没有使用 forever 。测试奏效了。现在我的 node.js 应用程序也可以正常连接。你认为问题永远是这样吗?我的问题现在已经解决了。如果您将回复作为答案发布,我会接受。谢谢! 一个不相关的问题。根据您的指示,我通过 'sudo redis-server &' 在后台运行了 redis-server。现在如何停止 redis-server ?发出“ps”命令不会列出 redis-server。所以我无法让 PID 杀死它。 'Fg' 命令也没有效果。 在 Ubuntu 上,您可以使用 sudo fuser -v 5000/tcp 检查在端口 5000 上运行的服务,然后使用 sudo fuser -vk 5000/tcp 终止该服务。 【参考方案1】:

如果您打算在 AWS 之外使用 Redis,您可以尝试帮助我从本地 Nodejs 应用程序连接在 AWS 上工作的 Redis 服务器的后续步骤:

1) 在 AWS 上:sudo cp /etc/redis/redis.conf.backup /etc/redis/redis.conf。备份可以为您节省大量精力来找出问题所在:)

2) 在 AWS 上:停止 redis-server:sudo /etc/init.d/redis-server stop

3) 在 AWS 上:打开 /etc/redis/redis.conf 并找到一行 bind 127.0.0.1。在 bind 0.0.0.0 下复制并粘贴新行。所以你可以有几行带有 bind 参数。顺便说一句,连接的端口也可以在 redis.conf 中更改

4) 在 AWS 上:启动 redis-server:sudo /etc/init.d/redis-server start

5) 在 AWS 上:输入 redis-cli ping 如果 redis-server 正常启动,您应该会看到 PONG 消息

6) 在 AWS 上:现在为您正在运行的实例打开 Sequrity Group,并使用“类型”添加新规则 - 自定义 TCP 规则,端口范围 - 6379

7) 在您的本地 Nodejs 应用程序中:

var redis = require("redis"); var redisClient = redis.createClient(redis_port, redis_host);

nodejsredisaws

【讨论】:

【参考方案2】:

您是否使用 ping-pong 例程检查了 AWS 上的 redis 客户端-服务器连接。接下来也许你应该尝试以 root 身份运行它而不是永远。

【讨论】:

以上是关于从 Amazon AWS EC2 服务器上的 Node.js 连接到 Redis 服务器时出错的主要内容,如果未能解决你的问题,请参考以下文章

从 EC2 上的自定义 AMI 创建 AWS Opsworks 实例时未启动

从远程服务器连接到 Amazon EC2 上的 mysql

为EC2 Amazon Linux实例设置SFTP Sublime Text 3

Amazon AWS负载均衡器EC2实例解决ip范围

使用 PHP 和 Amazon AWS EC2 的会话

Amazon AWS EC2存储