postgresql - Cloud SQL (postgres) 外部数据包装器连接超时到副本实例

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

问题

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

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

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

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

使用 CloudSQL ma​​ster 实例的 IP 地址可以正常工作,如 documentation 中所述.

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

“图表”看起来像这样:

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

replica --postgres_fdw(IP address A)--> master (IP address A)

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

master --postgres_fdw(IP address B)--> replica (IP address B)

replica --postgres_fdw(IP address B)--> replica (IP address B)

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

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

我们在 master 上运行的设置脚本

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> 时工作(大师)
  • IMPORT FOREIGN SCHEMA public from SERVER "animal_fdw" into "$SCHEMA_NAME" $FDW_HOST=<IP_Address_B> 时超时(副本)

日志

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 地址没有拼写错误

最佳答案

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

https://stackoverflow.com/questions/64021094/

相关文章:

javascript - 来自 firebase 的图像的 html2canvas jsPdf 访问

angular - 如何避免@types 包引入的补丁级别增加带来重大变化的问题?

linux - 是否可以为 `git clone` 操作指定超时?

python - 如何在 Kotlin 中正确反转链表?

java - 如何将上下文传播到 Project Reactor 中的下游运算符?

python - 如何使用 python 编辑相机帧?

html - css的级联顺序

firebase - 使用带有 Flutter Web App 的 http 包发布到 Cloud

javascript - 如何在 React Native 中更改原生 Picker fontSiz

python - 有没有办法在 python 中抓取没有 Selenium 的 JavaScript