我知道Redis Cluster仍然不稳定,但是很久以来它已经通过了所有的单元测试,所以我开始使用它。
我想知道如果节点需要身份验证,Redis群集是否可以正常工作。我倾向于认为是,因为他们通过不同的端口连接并使用不同的协议,但我不确定,也无法在spec上找到任何文档或任何内容来确认这一点。
此外,如果redis群集协议飞过身份验证障碍,那么它不是安全漏洞吗?我的数据库可以被外界访问吗? (该端口至少必须是可访问的,以便它可以与其他节点通信)
如果任何协议通过互联网飞行,您将需要加密(“ssl”),例如跨数据中心。这通常会影响性能。在Redis的当前安全规范中 -
http://redis.io/topics/security
建议不支持ssl,您需要SSL代理。这通常会导致系统性能下降,例如您必须考虑的延迟。
理想情况下,群集节点应该位于同一位置。如果它们不能,那么集群的设计应该限制跨站点数据传输,或者在没有任何实时约束的情况下离线。
我还选择在每个节点的基础上禁用/启用命令(请参阅上面的安全规范中的详细信息)。我不确定它是否在群集模式下受支持。
SSH隧道可能是一个简单的解决方案:
快速示例:ssh -f -L 1234:localhost:6379 server.com -NC
这会将任何传入连接到localhost:1234路由到远程server.com:6379。因此,您可以在redis配置文件中将local.com:6379替换为localhost:1234。
您可以查看man ssh
以获取更多信息。
由于Redis在群集中的运行方式,因此无法使用具有SSL的Redis群集。
要使SSL在Redis部署中工作,您需要安装和配置stunnel或隧道应用程序。
从Redis文档:请注意,要使Redis群集正常工作,您需要为每个节点:用于与客户端通信的普通客户端通信端口(通常为6379),以便向需要访问群集的所有客户端开放,以及所有其他群集节点(使用客户端端口进行密钥迁移)。必须可以从所有其他群集节点访问群集总线端口(客户端端口+ 10000)。
您可以将stunnel配置为在某个端口接收流量,并将流量重定向到6379或redis-server正在侦听的任何其他端口。在集群模式下,redis-server宣布其“cluster_port”,以便客户端和其他节点可以连接到与其连接的此端口。如果覆盖设置“cluster_announce_port”,则ssl-clients将成功连接到节点,但是redis-cli和cluster_port上的节点间通信将失败。
似乎AWS ElastiCache / Redis Enterprise支持带集群的SSL,但不支持Open Source Redis。