我正在尝试远程访问我的小Debian服务器上托管的redis数据库,但我无法让它工作。希望有人可以帮我解决这个问题。
以下是我采取的步骤。
我根据this教程设置了我的redis。 使用提供的安装shell脚本,我得到了以下日志,显示了所有创建的目录/文件:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
现在我可以使用service redis_6379 start/stop/restart
开始/停止/重启。
此时我可以连接到我的redis 本地。
root@smg:/home/local: redis-cli ping
PONG
这是我日志的输出。
12505:M 11 Jun 16:18:48.248 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
12505:M 11 Jun 16:18:48.248 # Server initialized
12505:M 11 Jun 16:18:48.248 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
12505:M 11 Jun 16:18:48.249 * DB loaded from disk: 0.000 seconds
12505:M 11 Jun 16:18:48.249 * Ready to accept connections
我继续修改了网络下redis/6379.conf
中的绑定设置以绑定到bind 0.0.0.0
,这应该允许所有IP使用端口6379连接到我的服务器。
我也为iptables设置了一个类似于-A INPUT -p tcp -m tcp --dport 6379 -j ACCEPT
的传入规则。
如果需要,我可以提供完整的iptables日志。
我重启了我的redis。检查ps aux | grep redis
我确认我的服务器正在运行。
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 12505 0.0 0.1 43216 4008 ? Ssl 16:18 0:08 /usr/local/bin/redis-server *:6379
我现在检查我的redis是否真的在监听所有端口。所以我检查netstat -nlpt | grep 6379
并得到以下输出。我认为输出确认redis正在监听所有外部IP,但我不太确定。
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 12505/redis-server
基本上现在一切都已设置为远程连接,但如果我尝试从我的服务器连接,则会收到连接超时。
root@smg:/home/local: redis-cli -h [serverIP]
Could not connect to Redis at [serverIP]:6379: Connection timed out
我在StackOverflow上的许多线程中看到了Connection Refused
错误,但没有关注连接超时的事情。
我真的不知道为什么我会得到这个Timeout。希望你们中的一个人更了解它。
提前致谢!
答案 0 :(得分:0)
我的朋友。
警告:无法强制执行TCP的待办事项设置511,因为/ proc / sys / net / core / somaxconn设置为较低的值128.
更改/ proc / sys / net / core / somaxconn
sysctl -w net.core.somaxconn=65535
在/etc/sysctl.conf中更改为 vm.overcommit_memory = 1
答案 1 :(得分:0)
Connection timed out
表示您的本地计算机无法访问redis计算机的6379
端口。检查防火墙规则(如果您使用AWS,则为security groups
,如果您使用GCP,则为Firewall rules
),并为您的源计算机允许6379
端口的redis计算机。