【发布时间】:2014-06-25 15:03:04
【问题描述】:
我习惯于拥有可以通过 ssh 使用的远程服务器,但我正在考虑将 Amazon Web Services 用于一个新项目,以便以更低的成本为我提供更好的性能和弹性,但我很难理解如何使用它。
这就是我想做的:
第一次:
- 创建 Postgres 数据库
- 连接到亚马逊服务器
- 下载代码到服务器
每月一次:
- 将大数据文件下载到服务器
- 运行代码(用 python 编写)以加载数据库数据
- 运行代码(用 Java 编写)以根据数据库中的数据创建 Lucene 搜索索引文件
连续:
- 在 servlet 容器中运行 Java 代码,这将使用 lucense 搜索索引文件,但不需要访问数据库。
注意:从技术上讲,我可以在本地创建数据库填充,问题是生成的 lucene 索引文件大约为 5GB,而且我没有足够好的 Internet 连接 将该大小的文件上传到亚马逊。
到目前为止,我所做的只是创建一个 Postgres 数据库,但我不明白如何连接到它或获得与我的服务器的 ssh/telnet 连接(我请求了直接连接,但这似乎是不同的服务)。
目前更新
仅供参考:
- 所以我使用 RDS 创建了一个 Postgres 数据库
- 我使用 EC2 创建了一个 Ubuntu linux 安装
- 我使用 ssh 连接到 linux 安装
- 我安装了所需的软件(使用 apt-get)
- 我将数据文件下载到我的 linux 安装中
我认为根据安装应该能够从我的 EC2 实例甚至从我的本地计算机连接到我的 Postgres 数据库但是在这两种情况下它都会超时。
* 更新 2 **
可能与安全有关,但我终其一生都无法理解我对安全组的意义,以及为什么他们不能让 EC2 实例默认与我的数据库通信。
我检查过 RDS 和 EC2 都具有相同的 vpc id,并且两者都在同一个可用区中。 Postgres 正在使用端口 5432(不是 3306),但还不能访问它。因此,以我的工作 EC2 实例为起点,我是否应该在创建数据库之前创建一个新的安全组,如果是,我需要在其中输入什么值,以便我可以在我的 ec2 ssh 会话中使用 psql 访问数据库 - 就是这样现在所有阻碍我的事情以及我需要做的所有事情
* 更新 3 *
最后我可以访问我的数据库,我的数据库有三个安全组(我认为另外两个是在我创建一个新的 EC2 实例时创建的)我删除了其中两个,并在其余的入站选项卡上设置了规则到
- 所有流量
- 端口 0-65535
- 所有协议
- IP地址0.0.0.0/0
(出站标签已经有相同的规则)并且有效!
我意识到这不是最安全的设置,但至少是它的进步。
我假设只允许从我的 EC2 实例访问我可以更改入站规则的 IPAddress,但我不知道如何计算 ipaddress 的 CIDR?
我的新问题是我的数据文件已成功下载到我的 EC2 实例,但我无法解压缩它,因为我没有足够的磁盘空间。我假设我必须使用 S3 我已经创建了一个存储桶,但是我如何让它在我的 EC2 实例中作为磁盘空间可见,这样我就可以
- 将我的数据文件移到其中
- 将数据文件解压到其中
- 针对解压缩的数据文件运行我的代码以加载数据库
(请注意,数据文件是 Xml 格式,必须使用自定义代码进行处理才能将其放入数据库,它不能直接使用某些通用工具加载到数据库中)
更新 4
S3 对我来说是错误的解决方案,我可以使用 EBS,它基本上是磁盘存储,不是作为服务访问,而是通过单击 EC2 控制台中的卷。确保在与实例相同的可用区中创建卷,每个位置可能有多个,例如我的 EC2 实例是在 eu-west-1a 中创建的,但我第一次创建卷时是在 eu-west- 1b,因此无法使用。
然后将卷附加到实例
但我无法从 linux 命令行看到音量,似乎还有其他要求。
更新 5
好的,必须格式化磁盘并将其安装在 linux 中才能正常工作 我现在有用于将数据上传到数据库的代码,但它的运行速度非常慢,比我家里的廉价本地服务器慢得多。我猜是因为数据一次加载一条记录,瓶颈不是微数据库而是我的微实例,看起来我需要用更昂贵的实例重做
更新 6
更新到大型 Computative 实例仍然很慢。我现在认为问题是服务器和数据库之间的网络延迟可能需要将 postgres 服务器直接安装到我的实例上以删除该部分。
【问题讨论】:
-
好吧,首先,我告诉你亚马逊网络服务很棒。但是祝你好运,它是相当复杂的
-
这个问题是题外话,你最好在Server Fault提问。
-
@Austin100 我认为开发人员(堆栈溢出)比系统管理员(服务器故障)更感兴趣这个问题
标签: java python amazon-web-services amazon-ec2