隧道到红移集群

Posted

技术标签:

【中文标题】隧道到红移集群【英文标题】:Tunneling to redshift cluster 【发布时间】:2019-04-22 00:14:35 【问题描述】:

我是红移新手。目前,我能够创建一个 redshift 集群并通过 SQL Workbench 连接它,但我期待通过我的 MAC 终端通过ssh 隧道我的 redshift 集群。我做了一些研究,并能够创建一个具有相同 VPC ID 和子网组的 ec2 实例,我用它来创建我的 Redshift 集群。我也已经在我的 ec2 实例上安装了 psql。当我使用 psql 命令连接到 redshift 时,我无法理解哪里出错了:

psql -h my redshift endpoint -p 5439 -d database name -U user -c " my query "

它给了我错误 psql: could not translate host name "my redshift endpoint" to address: Name or service not known

【问题讨论】:

请显示您用于隧道到 EC2 实例的命令。它应该涉及使用ssh -L 将远程端口转发到本地端口。 是的,我在这里使用的是命令 "ssh -I "test.pem" -L 5439:redshiftendpoint:5439 ec2-user@ec2instance.compute.amazonaws.com" 【参考方案1】:

第一步是使用ssh 与EC2 实例建立隧道,并使用将本地端口转发到远程端口的命令:

ssh -i KEYPAIR.pem -L 5439:REDSHIFT-ENDPOINT:5439 ec2-user@EC2-PUBLIC-IP

地点:

KEYPAIR.pem 应该是用于访问 EC2 实例的密钥对的名称 REDSHIFT-ENDPOINT 是 Redshift 端点的 DNS 名称 EC2-PUBLIC-IP 是 EC2 实例的 IP 地址

这个命令说:

使用密钥对创建 ssh 连接 将发送到本地端口 5439 的所有流量转发到远程计算机,然后让远程计算机将该流量发送到 REDSHIFT-ENDPOINT:5439(用您的端点替换 REDSHIFT-ENDPOINT

然后,您可以在localhost:5439 上连接到 Redshift,就好像它在您自己的计算机上运行一样。该流量将被发送到远程计算机,远程计算机会将其发送到REDSHIFT-ENDPOINT:5439

例如,如果您想使用psql 连接到 Redshift,请使用:

psql -h localhost -p 5439 -U <username>

【讨论】:

我是否必须更改 psql 或 ec2 实例中的任何设置。因为我仍然对你的建议有同样的问题。谢谢。 请描述执行每个步骤时会发生什么,包括响应需要多长时间。例如,当您运行ssh 时,它可能会出现挂起。这没关系!然后,您应该为psql 使用单独的终端会话。除非您提供有关正在发生的事情的更多信息,否则我无法为您提供帮助。【参考方案2】:

试试psql -h localhost -p 5439 -d -U -c " my query "或者psql -p 5439 -d -U -c " my query ",不带参数不能用switch-h,不用的话默认是localhost

【讨论】:

对不起,我没看到我忘了提到我在“-h”之后使用我的红移端点【参考方案3】:

感谢 John Rotenstein 给予我见解,我实际上错过了与我的安全组关联的入站规则,只允许来自 redshift 私有 IP 的流量。我的 ec2 实例和 redshift 都在同一个 VPC 中,因此应该使用私有 IP 而不是公共 IP。也忘了把redshift的ssh公钥放到ec2的authorized_key文件中。一旦我这样做了,它就起作用了。

【讨论】:

以上是关于隧道到红移集群的主要内容,如果未能解决你的问题,请参考以下文章

隧道集群通信覆盖系统

隧道集群无线电覆盖方案

如何为 ipython 集群(ipcluster)设置 ssh 隧道

将 Hive 表迁移到红移

S3 到红移 nifi

尝试将胶水表复制到红移时出现“在 awaitResult 中引发的异常:”错误