【问题标题】:AWS Aurora/Python: Connect to only write instanceAWS Aurora/Python:连接仅写入实例
【发布时间】:2018-07-02 15:52:43
【问题描述】:

我有一个带有一个主写入实例和两个只读副本实例的 AWS Aurora (Postgres) 设置。我正在使用 python 连接数据库,如下所示。

from sqlalchemy import create_engine
DATABASE_URL = 'postgresql://' + username + ":" + password + "@" + host + ":" + str(port) + "/" + database
engine = create_engine(DATABASE_URL, echo=DEBUG)

上面的这个设置并不能保证我可以连接到写入实例,有时它会连接到只读副本,当我需要向数据库写入内容时会导致问题。

我的问题是,我怎样才能始终连接到写入实例? 我是在 AWS 端还是在 Python 代码中进行配置?

【问题讨论】:

    标签: amazon-web-services sqlalchemy amazon-aurora


    【解决方案1】:

    您可以在代码中的 host 值中使用 AWS Aurora exposes the following endpoints

    集群端点

    集群终端节点是 Aurora 数据库的终端节点 连接到该数据库的当前主实例的集群 簇。每个 Aurora 数据库集群都有一个集群终端节点和一个主节点 实例。

    阅读器端点

    读取器端点是 Aurora 数据库的端点 连接到可用 Aurora 副本之一的集群 数据库集群。每个 Aurora 数据库集群都有一个读取器终端节点。如果有 多个 Aurora 副本,读取器端点将每个 到 Aurora 副本之一的连接请求。

    实例端点

    实例端点是数据库的端点 连接到该特定数据库的 Aurora 数据库集群中的实例 实例。数据库集群中的每个数据库实例,与实例无关 类型,有自己唯一的实例端点。所以,有一个例子 数据库集群的当前主实例的端点,并且存在 是数据库中每个 Aurora 副本的一个实例终端节点 集群。

    我并不完全清楚您当前使用的是哪个端点。获得host 值的代码部分,或者您用于手动设置该值的方法,是您的代码中唯一相关的部分,您没有包含该部分。听起来您可能正在使用 Instance 端点指向主实例,但如果发生故障转移,该实例将成为只读副本,这会导致您的问题。

    您应该使用集群端点,这将保证您的连接将转到主读/写实例。

    【讨论】:

    • 如果您使用的是集群端点,那么您永远不应连接到只读实例。你得到的实际错误是什么?
    • 我收到:ProgrammingError: (psycopg2.ProgrammingError) permission denied for relation trial
    • 仅供参考:Mark B 的上述评论不正确。集群端点“...在发生故障转移时跟随主实例,也就是说,当当前主实例降级并且其中一个 Aurora 副本被提升时。”
    • @theannouncer 请解释我的评论是如何不正确的。我认为您对报价的理解是错误的。集群端点将始终指向当前的主实例。如果一个主实例被降级,而一个新实例被提升,那么集群端点将停止指向之前的主实例,而是指向新提升的实例。
    • 啊,我明白了,你是对的,我的错。这是在aws方面对“关注”的一些模棱两可的使用,你是对的,我对文档的解释是“关注”,因为“仍然指向同一件事”而不是“将始终指向作家”(为此,我不会使用“跟随”这个词)。感谢您的澄清!
    【解决方案2】:

    实际问题我使 CPU 过载,并且重新配置了 DNS。 我需要增加 CPU 并进行某种限制控制。

    【讨论】:

      猜你喜欢
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 2021-04-18
      相关资源
      最近更新 更多