【问题标题】:Cloud SQL (postgres) foreign data wrapper connection time out to replica instanceCloud SQL(postgres)外部数据包装器连接超时到副本实例
【发布时间】:2020-09-23 04:35:37
【问题描述】:

嘿,当连接到副本实例时,我们在 CloudSQL 中使用 postgres_fdw 扩展时遇到了一些问题。我们将问题转发给 GCP 支持,但他们的回答与我们的问题并没有真正的关系。因此,我们在这里再试一次:

问题

我们在应用程序中使用了postgres_fdw 扩展,以便能够跨数据库运行连接。

我们在主实例上有 2 个数据库(其中有一个副本实例)

  • 分析
  • 动物(这个名字有历史原因:D)

并且曾经有一个来自 analytics -> animal 的外部数据包装器连接。

使用 documentation 中描述的 CloudSQL ma​​ster 实例的 IP 地址可以正常工作。

外部数据包装器设置同步到副本实例,因此仍指向主实例(-> 仍使用主实例的 IP)。

“图表”如下所示:

master --postgres_fdw(IP address A)--> master(IP地址A)

副本 --postgres_fdw(IP address A)--> master(IP地址A)

为了避免在查询副本时遇到主实例,我们想将设置更改为:

master --postgres_fdw(IP address B)-->副本(IP地址B)

副本 --postgres_fdw(IP address B)--> 副本(IP地址B)

我们希望通过在设置时更改 IP 地址来更改这一点,以便我们的外部数据包装器始终指向副本实例(也在主实例上 - 这很好)。

但是,通过其 IP 和外部数据包装器连接到副本无法正常工作。导入架构(在主服务器上)时,我们总是会遇到连接超时

我们在主服务器上运行的设置脚本

BEGIN;

    CREATE EXTENSION IF NOT EXISTS postgres_fdw;

    --- Update foreign data server
    DROP SERVER IF EXISTS "animal_fdw" CASCADE;
    CREATE SERVER "animal_fdw" FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '$FDW_HOST', dbname '$TARGET_DB_NAME');

    --- Create user mapping for default agrando user and metabase
    CREATE USER MAPPING FOR "$USER" SERVER "animal_fdw" OPTIONS(user '$USER', password '$PASSWORD');

    --- Update Schema
    DROP SCHEMA IF EXISTS "$SCHEMA_NAME";
    CREATE SCHEMA "$SCHEMA_NAME";

    --- The following line times out
    IMPORT FOREIGN SCHEMA public from SERVER "animal_fdw" into "$SCHEMA_NAME"
COMMIT;
  • $FDW_HOST=<IP_Address_A> (master) 时工作​​
  • $FDW_HOST=<IP_Address_B>(副本)时IMPORT FOREIGN SCHEMA public from SERVER "animal_fdw" into "$SCHEMA_NAME" 超时

日志

Thu, 10 Sep 2020 14:56:24 GMT
DROP SERVER
Thu, 10 Sep 2020 14:56:24 GMT
CREATE SERVER
Thu, 10 Sep 2020 14:56:24 GMT
CREATE USER MAPPING
Thu, 10 Sep 2020 14:56:24 GMT
CREATE USER MAPPING
Thu, 10 Sep 2020 14:56:24 GMT
CREATE USER MAPPING
Thu, 10 Sep 2020 14:56:24 GMT
DROP SCHEMA
Thu, 10 Sep 2020 14:58:36 GMT
CREATE SCHEMA
Thu, 10 Sep 2020 14:58:36 GMT
ERROR:  could not connect to server "animal_fdw"
Thu, 10 Sep 2020 14:58:36 GMT
DETAIL:  could not connect to server: Connection timed out
Thu, 10 Sep 2020 14:58:36 GMT
    Is the server running on host "<IP Address B>" and accepting
Thu, 10 Sep 2020 14:58:36 GMT
    TCP/IP connections on port 5432?

我们已经在所有环境中进行了尝试,以确保环境没有影响我们还确保我们的 IP 地址没有拼写错误

【问题讨论】:

  • 你找到解决这个问题的方法了吗?
  • 嘿Yogi,很遗憾我们还没有找到解决方案。我们目前遇到的问题是,我们的副本现在将外部数据包装器指向主实例:/

标签: postgresql google-cloud-sql foreign-data-wrapper


【解决方案1】:

您使用了只读副本,好吗?不能这样用。

【讨论】:

  • 如果不应该评论,您的答案需要是一个解决方案
  • 感谢 Rui,但正如我们的支持案例中提到的那样,我认为这是“答案”。与我们的问题并没有真正的关系。如果您仔细阅读上面的案例,您会发现它可以从副本连接到普通实例(在主服务器上运行模式导入时)。当然,我们也可以以正常方式连接到副本。它只是在主实例中超时(在模式导入期间)。我们永远不会在副本上导入模式(我看到这不会起作用,因为它是一个写操作),但我们从 master 复制模式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
  • 1970-01-01
  • 2023-02-07
相关资源
最近更新 更多