标签: amazon-rds

使用Play框架将EC2连接到RDS

我有一个小网站,我使用Play框架构建,我试图在EC2服务器上针对Amazon RDS实例运行.我可以在我的机器上运行应用程序对抗RDS实例,一切正常.但是当我将它部署到我的EC2服务器时,它会收到以下错误:

The last packet successfully received from the server was 1,282,977,731,085 milliseconds ago.  The last packet sent successfully to the server was 0 milliseconds ago.
        at play.db.DBPlugin.onApplicationStart(DBPlugin.java:87)
        at play.Play.start(Play.java:381)
        at play.Play.init(Play.java:247)
        at play.server.Server.main(Server.java:85)
Caused by: java.net.ConnectException: Connection refused

我的第一个想法是它是某种安全设置,但我有一个基于Spring的应用程序在Tomcat上运行,在相同的EC2服务器上使用相同的用户名和密码连接到相同的RDS实例,它工作得很好.只有Play应用有连接问题.

我似乎无法解释为什么会发生这种情况,或者如何解决它的想法.

以前见过这样的人吗?

java amazon-ec2 amazon-rds playframework

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

AWS CLI使用elasticbeanstalk创建环境创建RDS

如何使用create-environment或其他子命令创建RDS实例aws elasticbeanstalk?我尝试了几种参数组合无济于事.以下是一个例子.

APP_NAME="randall-railsapp"
aws s3api create-bucket --bucket "$APP_NAME"
APP_VERSION="$(git describe --always)"
APP_FILE="deploy-$APP_NAME-$APP_VERSION.zip"
git archive -o "$APP_FILE" HEAD
aws s3 cp "$APP_FILE" "s3://$APP_NAME/$APP_FILE"

aws --region us-east-1 elasticbeanstalk create-application-version \
--auto-create-application \
--application-name "$APP_NAME" \
--version-label "$APP_VERSION" \
--source-bundle S3Bucket="$APP_NAME",S3Key="$APP_FILE"

aws --region us-east-1 elasticbeanstalk create-environment \
--application-name "$APP_NAME" \
--version-label "$APP_VERSION" \
--environment-name "$APP_NAME-env" \
--description "randall's rails app environment" \
--solution-stack-name "64bit Amazon Linux 2014.03 v1.0.0 running Ruby 2.1 (Puma)" \
--cname-prefix "$APP_NAME-test" \
--option-settings file://test.json
Run Code Online (Sandbox Code Playgroud)

以及内容 …

amazon-web-services amazon-rds aws-cli amazon-elastic-beanstalk

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

MySQL高写延迟

我正在开发一个类似社交的应用程序,目前使用AWS服务进行部署.特别是,DB使用MYSQL在RDS上运行.到目前为止,我们使用有限数量的用户(主要是朋友)测试应用程序,平均每秒写入10次写入IOPS.

真正的问题与db的非常高的写入延迟有关,它始终高于100ms.RDS实例是db.m3.xlarge,远远超出我们的需要.

我试图在一个单独的实例(DB和EC2的相同配置)中执行负载测试,但即使我发送了更多的请求,我也无法重现如此高的延迟.所以我认为这可能是由于表碎片,但我还没有运行表优化,因为在此过程中无法访问db.

你对这个问题有经验吗?

更多信息

  • 我们使用mysql版本5.6.21和INNODB作为存储引擎.
  • 整个数据库大小约为100MB
  • 最大的表(称为Message)有大约790k行.关于此表,以下查询

    insert into Message (user_id, creationDate, talk_id, text, id) 
    values (2015, '2015-02-01 16:40:06.737', 18312, 'Some text ', 904870)
    
    Run Code Online (Sandbox Code Playgroud)

    花了11秒才被执行.

  • 更糟糕的是,查询

    insert into Comment (anonymous, user_id, creationDate, deleted, post_id, text, id) 
    values (1, 107347, '2015-02-01 16:40:01.849', 0, 124888, 'Comment text', 265742)
    
    Run Code Online (Sandbox Code Playgroud)

    花了14秒,但表评论约有160k.

这两个表是由以下生成的:

CREATE TABLE `comment` (
    `id` bigint(20) NOT NULL,
    `anonymous` bit(1) NOT NULL,
    `creationDate` datetime NOT NULL,
    `deleted` bit(1) NOT NULL,
    `text` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL,
    `user_id` bigint(20) NOT …
Run Code Online (Sandbox Code Playgroud)

mysql amazon-rds

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

如何将EC2中的Django连接到RDS中的Postgres数据库?

首次在Django上使用AWS服务.

想知道如何将在EC2实例中运行的Django应用程序配置为RDS中的Postgres数据库?

EC2正在运行ubuntu 14.04

需要什么特殊配置?

django amazon-ec2 amazon-web-services amazon-rds

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

为什么亚马逊RDS内存监视器thrushold让我看到RED?

今天我注意到我的Amazon RDS实例内存监视器阈值显示红线.在这里,我附有相同的屏幕截图.在此输入图像描述

所以,我的问题是什么是内存阈值,以及它为何超过限制?我的实例有什么问题吗?减少/控制这次加息的解决方案是什么?

mysql amazon-web-services amazon-rds

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

在 RDS MySQL 只读副本上创建用户

是否可以/建议创建只能访问 RDS MySQL 只读副本而不是主数据库服务器的用户?我有许多高级用户我想授予访问权限,以便他们可以运行运行缓慢的查询,但不想让他们访问主生产数据库本身。尝试直接在服务器上执行此操作,我得到ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement,因此猜测我必须在 db 参数组或类似的地方执行此操作。无论如何,想法?

mysql amazon-web-services amazon-rds read-replication

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

使用无服务器Aurora时确定连接超时,以寻找增加超时时间或重试连接的方法

我在尝试将无服务器Aurora数据库用作应用程序的一部分时遇到问题。

问题本质上是,当数据库处于冷态时,建立连接的时间可能大于30秒(由于db spinup)-这似乎比Sequelize中的默认超时(使用mysql)长,并且据我所知可以看到我找不到其他方法来增加此超时,或者我需要某种重新尝试连接的方法吗?

这是我当前的配置:

const sequelize = new Sequelize(DATABASE, DB_USER, DB_PASSWORD, {
    host: DB_ENDPOINT,
    dialect: "mysql",
    operatorsAliases: false,
    pool: {
      max: 2,
      min: 0,
      acquire: 120000, // This needs to be fairly high to account for a 
      serverless db spinup
      idle: 120000,
      evict: 120000
    }
});
Run Code Online (Sandbox Code Playgroud)

还有几点要点:一旦数据库变热,那么一切都会正常运行。在技​​术上可行的情况下,保持数据库“热”状态会破坏将其作为无服务器db的意义(成本原因)。如果超时是连接错误,我愿意让我的客户端重试API调用。

这是日志,以防万一。

{
"name": "SequelizeConnectionError",
"parent": {
    "errorno": "ETIMEDOUT",
    "code": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true
},
"original": {
    "errorno": "ETIMEDOUT",
    "code": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true
}
}
Run Code Online (Sandbox Code Playgroud)

mysql amazon-rds node.js serverless aws-aurora

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

验证错误...成员必须满足正则表达式模式:arn:aws:iam::

我正在尝试通过 kinesis 数据流传输 rds,但它给了我这个错误:

botocore.exceptions.ClientError:调用 PutRecord 操作时发生错误 (ValidationException):检测到 1 个验证错误:值 'arn:aws:kinesis:us-west-2:xxxxxxxxxx:stream/rds-temp-leads-stream' at 'streamName' 未能满足约束:成员必须满足正则表达式模式:[a-zA-Z0-9_.-]+

我能做些什么来解决这个问题?


import json
import boto3
from datetime import datetime

from pymysqlreplication import BinLogStreamReader
from pymysqlreplication.row_event import (
  DeleteRowsEvent,
  UpdateRowsEvent,
  WriteRowsEvent,
)

class DateTimeEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, datetime):
            return o.isoformat()

        return json.JSONEncoder.default(self, o)

def main():
  mysql = {
      "host": "",
      "port":,
      "user": "",
      "passwd": "",
      "db": ""}
  kinesis = boto3.client("kinesis", region_name = 'us-west-2')

  stream = BinLogStreamReader(
    connection_settings = mysql,
    server_id=100,
    blocking = True,
    log_file='mysql-bin.000003',
    resume_stream=True, …
Run Code Online (Sandbox Code Playgroud)

python amazon-rds amazon-kinesis

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

在 aws-cdk 上的 aws-rds 上,使数据库可公开访问的设置在哪里?

使用 AWS RDS,控制台和 CLI/API 都有一个开关,使数据库可公开访问,但我找不到使用提供的构造使用新的 aws-cdk 执行此操作的方法。在 Cloud Formation 类(例如 CfnDBInstance)中有一个用于此的布尔值,但我找不到有关如何将其与构造结合使用的文档。CDK 非常了不起,它只用几行代码就完美地设置了一切,除了这一部分。

amazon-web-services amazon-rds aws-cloudformation aws-cdk

7
推荐指数
2
解决办法
1265
查看次数

升级 Knex 后出现“获取连接超时”

在我的公司,我们的应用程序在 NodeJS 上运行,并通过多个 EC2 实例和一个 RDS 数据库运行。

我们的应用程序需要一些升级,因为一些依赖项已经很旧了,我们所做的引起我们注意的升级之一是更新我们的数据库库:mysql(从 2.16.0 到 2.17.0)、knex(从 0.12.2 到 0.19 .1) 和书架(0.10.2 至 0.15.1)。

检查更改日志后,不需要更改代码,因此我们很快设法将其上传到我们的临时服务器。

突然,我们的应用程序变得太慢了。加载所有数据需要几秒钟,而我们的主要用户的仪表板在几毫秒内加载到同一台服务器上,需要大约 30 秒。几分钟后,整个应用程序完全没有响应。

为了检查问题是否仅与依赖项升级有关,我们设法将这些降级到工作版本,并且应用程序恢复到正常速度。又升级了,又慢了。

我们已经开始通过 New Relic 分析 RDS 方面是否有问题。什么都没有。没有高峰,没有高 CPU 使用率,没有慢查询或其他任何事情。然后我们来检查连接池,发现适合我们的knex版本使用“generic-pool”,而新版本使用“tarn”。

所以我们开始调试池,发现它被一个指定的查询填满,完全冻结了一段时间,然后开始抛出“TimeoutError: Knex: 获取连接超时。池可能已满”错误。

但是关于填充所有池并冻结的查询最有趣的是它根本不应该生成(并且在使用不存在此问题的过时版本时不会生成)。

在此处输入图片说明

在我们的应用程序中,我们只在两种情况下对联系人表执行 SELECT 请求:

首先,很明显,当用户想要列出他们的联系人时:

let contacts = await Contacts.forge({ 'list_owner': udata.id }).fetchAll()
Run Code Online (Sandbox Code Playgroud)

其次,在检查联系人匹配以判断某些信息是否应该对指定用户可见时,取决于信息所有者的隐私设置:

let checkContact = await Contacts.where({
        list_owner: target_user,
        contact: udata.id
}).fetch()
Run Code Online (Sandbox Code Playgroud)

经过几次 grepping,我可以保证我们的代码库中没有其他地方可以从联系人表中进行 SELECTS。在我们的调试中,我们没有发现未定义的值,并且我们的调查显示查询在之前的代码运行时运行。但是正如您在屏幕截图中看到的,查询 knex 运行没有条件:

select `contacts`.* from `contacts`
Run Code Online (Sandbox Code Playgroud)

我们相信这就是它填满池的原因(因为请求每个用户的联系人是一项相当大的工作),但与此同时,我们看不出为什么 knex 运行这样的查询,如:

  • knex 升级后未进行任何代码更改
  • 使用旧版 knex 时不存在此问题(我们的生产服务器已启动并使用过时的 knex 版本运行)
  • 我们使用 Redis 进行了大量缓存(但无论如何,数据库没有过载并且旧的 …

mysql amazon-rds node.js bookshelf.js knex.js

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