标签: aws-ec2

AWS/ELB连接耗尽问题

此问题已在AWS论坛上提出,未作任何回复.以下是原始问题


嗨!

我们正在对ELB背后的API实例进行滚动升级,并且在等待连接耗尽完成时会看到令人震惊的很长时间.方案如下:

我们运行两个相同的系统,4个c3.large在ELB后面,一个系统用于开发,一个系统用于生产.两个系统之间的唯一区别是生产系统持续提供请求.

当没有流量时,对于所有4个实例,dev系统的滚动升级大约需要3分钟.在生产系统中,这些时间在6到17分钟之间波动.出于原因,我们需要平均每小时进行2次滚动升级,然后滚动升级的17+分钟开始成为问题.

我们所有的API调用都是<100ms,因此没有长时间运行的请求应该保持连接耗尽这么长时间.我们一直在改变ELB上的空闲时间和连接耗尽时间的值,没有很好的结果.

当降低连接耗尽超时时,我们看到来自API的502响应,因为它强制地断开连接并且降低空闲超时似乎没有效果.

总而言之,我们想知道如何减少这些时间.由于我们的请求都是<100ms,理论上不应该花费一两秒钟来消耗实例的连接.我们在这里缺少什么?

最后一点:我们尝试关闭连接排放,这似乎比降低连接耗尽时间更好.平均每次测试运行只有1或2个错误,有些运行没有错误.这是因为响应时间如此之快?我们的响应也相对较小,因此TCP响应可能保存在OS输出缓冲区中,因此即使关闭连接耗尽也可以响应?将连接耗尽超时设置为0并关闭后有什么区别?

附加信息:

  • 所有流量都是HTTPS
  • SSL终止发生在实例上
  • 在nginx上启用了keep-alive(试图在这里改变值而没有任何结果)

谢谢!

nginx amazon-web-services amazon-elb aws-ec2

7
推荐指数
1
解决办法
3854
查看次数

Ansible无法连接到AWS EC2实例

我正在尝试使用Ansible从Codeship构建连接到AWS EC2实例.这已经在另一个AWS区域(eu-west-1)中完美地工作了,但是现在我想在us-east-1中设置服务器并且我收到以下错误:

<ec2-52-11-9-45.compute-1.amazonaws.com> ESTABLISH SSH CONNECTION FOR USER: ec2-user
<ec2-52-11-9-45.compute-1.amazonaws.com> SSH: EXEC ssh -C -vvv -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ec2-user -o ConnectTimeout=10 -o ControlPath=/home/rof/.ansible/cp/ansible-ssh-%h-%p-%r -tt ec2-52-11-9-45.compute-1.amazonaws.com '( umask 22 && mkdir -p "$( echo $HOME/.ansible/tmp/ansible-tmp-1461915330.37-230126286487108 )" && echo "$( echo $HOME/.ansible/tmp/ansible-tmp-1461915330.37-230126286487108 )" )'
fatal: [ec2-52-11-9-45.compute-1.amazonaws.com]: UNREACHABLE! => {"changed": false, "msg": "ERROR! SSH encountered an unknown error. The output was:\nOpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014

debug1: Reading configuration data /home/rof/.ssh/config
debug1: Reading …
Run Code Online (Sandbox Code Playgroud)

ssh ansible codeship aws-ec2

7
推荐指数
1
解决办法
1242
查看次数

在python2 boto中使用aws配置文件

我希望我的python脚本(连接到aws)使用来自〜/ .aws/credentials的aws配置文件

所以,我有〜/ .aws/credentials文件:

[default]
aws_access_key_id = XXX
aws_secret_access_key = AAA
region = eu-west-1

[test]
aws_access_key_id = WWW
aws_secret_access_key = ZZZ
region = eu-west-1
Run Code Online (Sandbox Code Playgroud)

我的python代码

import boto.ec2

conn = boto.ec2.EC2Connection(profile_name='test')
print conn
print conn.get_all_instances()
Run Code Online (Sandbox Code Playgroud)

输出是

EC2Connection:ec2.us-east-1.amazonaws.com
[]
Run Code Online (Sandbox Code Playgroud)

所以,它似乎没有从配置中获取配置文件.该地区是错误的.

env | grep -i aws <- returns nothing
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

谢谢.

=====更新=====

我有一个〜/ .aws/config文件,看起来像

? cat config
[default]
output = text
region = eu-west-1

[profile test]
output = text
region = eu-west-1
Run Code Online (Sandbox Code Playgroud)

=====更新=====

显然,它需要连接细节..但不是区域.所以,如果我这样做

reg = next(x for x in boto.ec2.regions() if x.name=='eu-west-1') …
Run Code Online (Sandbox Code Playgroud)

python amazon-ec2 boto amazon-web-services aws-ec2

6
推荐指数
1
解决办法
3252
查看次数

Node.js Forever.js正常运行时间已停止

我正在EC2实例上运行节点脚本.我正在使用forever.js来运行它,因为即使我断开SSH连接,我也想运行它.

我跑:

forever start app.js
Run Code Online (Sandbox Code Playgroud)

然后列出正在运行的进程:

forever list
Run Code Online (Sandbox Code Playgroud)

并且无论我做什么uptime都说STOPPED.

ubuntu@ip-xx-xxx-xxx-xxx:~$ forever list
info:    Forever processes running
data:        uid  command             script          forever pid   id logfile                        uptime  
data:    [0] 79f1 /usr/local/bin/node app.js 17099   17100    /home/ubuntu/.forever/79f1.log STOPPED 
Run Code Online (Sandbox Code Playgroud)

javascript linux node.js forever aws-ec2

6
推荐指数
2
解决办法
7511
查看次数

Elastic BeanStalk 中的 Django 收到太多无效的 HTTP_HOST 标头错误

我已经在AWS Elastic Bean Stalk服务器上部署了我的Django 应用程序。现在我从不同的 IP 地址(包括 localhost 和 http)收到太多无效的 http 主机错误,如下所示

SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): 172.31.0.67

SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): 172.31.22.203

SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): check.proxyradar.com

SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): testp2.czar.bielawa.pl
'PATH_TRANSLATED': '/opt/python/current/app/coinn/coinn/wsgi.py/testproxy.php',
Run Code Online (Sandbox Code Playgroud)

在 Elastic BeanStalk 安全组中,我提供了以下访问权限

Type | Protocol | Port | Source
HTTP | TCP      | 80   | Anywhere …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-elastic-beanstalk aws-ec2

6
推荐指数
1
解决办法
1990
查看次数

使用"DescribeInstanceStatus"例程过滤EC2实例 - AWS SDK

我正在尝试使用.NET中的AWS SDK过滤EC2实例,虽然我已经在SO和其他解决此问题的网站上看到了无数线程,但我在我的最终工作中没有尝试过.

所以,作为最后一个资源,我来找你们帮忙.任何人都可以了解我所缺少的东西吗?我知道我很可能做了一些愚蠢的事,但我不能浪费太多时间来解决这个问题.

这是我用来通过它的标签名称过滤EC2实例(获取它的元数据)的代码块:

DescribeInstanceStatusRequest req = new DescribeInstanceStatusRequest ();
req.Filters.Add (new Filter() { Name = "tag:Name", Values = new List <string> () { "some_random_name" } });

// Executing request & fetching response
DescribeInstanceStatusResponse resp = m_ec2Client.DescribeInstanceStatus (req);
Run Code Online (Sandbox Code Playgroud)

但我继续遇到这个例外:

过滤器'标记:名称'无效

我已经通过文档中列出的几个过滤器(例如"tag-key","tag-value","tag:key = value")替换了过滤器名称(示例中的"tag:Name"),但没有任何效果.

谢谢大家 :)

.net c# amazon-web-services aws-sdk aws-ec2

6
推荐指数
1
解决办法
1170
查看次数

Bash脚本循环遍历AWS Command Line Client的输出

我正在获取EC2实例的列表,然后尝试遍历它们,但是由于某种原因,我无法使该循环正常工作。

output="$(aws ec2 describe-instances --filters 'Name=tag:Environment,Values=development' --query '[Reservations[*].Instances[*].PublicDnsName]' --output text)"

echo $output 显示如下:

ec2-55-55-555-555.eu-west-1.compute.amazonaws.com
ec2-66-66-666-666.eu-west-1.compute.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

然后我创建一个像这样的数组:

instances=(${output//'\n'/ })
Run Code Online (Sandbox Code Playgroud)

echo ${instances[0]}echo ${instances[1]}给出正确的输出。

然后尝试遍历数组:

for i in $instances; do echo instance: "$i"; done

但是我得到:

实例:ec2-55-55-555-555.eu-west-1.compute.amazonaws.com ec2-66-66-66-666-666.eu-west-1.compute.amazonaws.com

代替:

instance: ec2-55-55-555-555.eu-west-1.compute.amazonaws.com
instance: ec2-66-66-666-666.eu-west-1.compute.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?是否有更好的方法遍历结果,也许使用json输出格式?

bash loops aws-cli aws-ec2

6
推荐指数
2
解决办法
7575
查看次数

如何使用boto3指定core-os ec2实例的根卷大小?

我无法从文档和源代码中找出如何定义根设备的大小.

您可以使用BlockDeviceMappings部分指定N个附加块设备,您可以在其中声明其大小.但是没有办法设置根卷的大小.因此,它始终创建一个根卷大小为8GB的实例,这是默认值.

amazon-web-services coreos boto3 aws-ec2

5
推荐指数
3
解决办法
3277
查看次数

如何确保在 AWS ECS 上更新 Docker 镜像?

我使用 Docker Hub 来存储私有 Docker 镜像,存储库有一个 webhook,一旦镜像更新,它就会调用我构建的服务:

  • 更新 ECS 任务定义
  • 更新 ECS 服务
  • 注销旧的 ECS 任务定义

该服务正在相应地运行。运行 ECS 后,使用新任务定义创建新任务,停止使用旧任务定义的任务,然后服务使用新定义返回。

关键是 Docker 映像不会更新,一旦服务在新任务定义中启动,它就会保留旧映像。

难道我做错了什么?如何确保更新 docker 镜像?

amazon-web-services amazon-ecs docker aws-ec2

5
推荐指数
1
解决办法
1646
查看次数

如何监控networkx图创建的状态?

我有一个数据集,它是一个代表网络的 csv/txt 文件。文件中的每一行都包含两个以逗号分隔的节点名称。我的数据文件联系了大约 330k 个节点和大约 550k 个边。我正在尝试使用以下代码创建一个非常基本的图形(是的,我知道它会非常混乱):

import networkx as nx
import matplotlib.pyplot as plt
import sys
import numpy as np

f = open('dataFile.txt', 'rb')
G = nx.read_edgelist(f, delimiter=',', nodetype=str)
f.close()

print(nx.number_of_nodes(G))
print(nx.number_of_edges(G))

plt.figure(1)
nx.draw(G)
plt.savefig("graph.pdf")
Run Code Online (Sandbox Code Playgroud)

我在 AWS EC2 m4.4xlarge 实例上运行它,它与 100% 的 CPU 和仅 1% 的内存挂钩。

我对此持怀疑态度,因为我认为 networkx 是内存密集型的,而不是 CPU 猪。现在,它正在 nx.draw 命令上旋转。有什么方法可以监控图形生成的深度?

python networkx aws-ec2

3
推荐指数
1
解决办法
3234
查看次数