使用 Cloud sql 代理连接到多个 CloudSQL 实例?

Posted

技术标签:

【中文标题】使用 Cloud sql 代理连接到多个 CloudSQL 实例?【英文标题】:Connecting to multiple CloudSQL instances using Cloud sql proxy? 【发布时间】:2017-04-09 03:50:40 【问题描述】:

我正在尝试使用云 sql 代理连接到 2 个不同的云 sql 实例...

在文档中,我找到了关于 Use -instances parameter. For multiple instances, use a comma-separated list. 的一行,但不知道如何制作。 https://cloud.google.com/sql/docs/sql-proxy。我正在使用 Google Container 引擎,并且使用单个 CloudSQL 实例效果很好:

- name: cloudsql-proxy
  image: b.gcr.io/cloudsql-docker/gce-proxy:1.05
  command: ["/cloud_sql_proxy", "--dir=/cloudsql",
            "-instances=starchup-147119:us-central1:first-db=tcp:3306",
            "-credential_file=/secrets/cloudsql/credentials.json"]
  volumeMounts:
  - name: cloudsql-oauth-credentials
    mountPath: /secrets/cloudsql
    readOnly: true
  - name: ssl-certs
    mountPath: /etc/ssl/certs

但是对于多个我已经尝试过-instances 部分:

-instances=starchup-147119:us-central1:first-db,starchup-147119:us-central1:second-db=tcp:3306  
and  
-instances=starchup-147119:us-central1:first-db=tcp:3306,starchup-147119:us-central1:second-db=tcp:3306

但它们都给出了各种错误; ECONNREFUSED 127.0.0.1:3306ER_DBACCESS_DENIED_ERRORER_ACCESS_DENIED_ERROR

非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

您不能在同一个 TCP 端口上托管两个数据库。相反,在逗号分隔的列表中为每个数据库指定端口:

-instances=project:region:db=tcp:3306,project:region:db-2=tcp:3307

我在这里使用了 3306 和 3307,但是你可以使用任何你想要的端口!确保您的 Container Engine 配置的其余部分允许在这些端口上的节点之间进行通信(也许默认情况下是这样,我不使用 GKE)。

大多数 mysql 驱动程序默认连接到端口 3306,但可以指定另一个端口。您必须安排您的代码连接到您为第二个数据库选择的不同端口。

【讨论】:

谢谢,我正在使用它来将 pod 连接到 1) 用于读/写流量的主数据库 2) 用于只读流量的只读副本。令人惊讶的是,这个答案是我唯一能找到该信息的地方。 我因在同一实例上与不同数据库建立两个连接而收到“拒绝访问”。你认为使用不同的端口会有帮助吗?还不太了解套接字路径的概念。 最好使用 maxscale :)【参考方案2】:

您可以在同一个端口上创建两个实例,但您必须像这样定义不同的 IP:

-instances=project:region:db=tcp:127.0.0.1:3306,project:region:db-2=tcp:127.0.0.2:3306

您可以在Github cloudsql-proxy repository 上查看示例。

【讨论】:

以上是关于使用 Cloud sql 代理连接到多个 CloudSQL 实例?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Cloud Run 安全地连接到 Cloud SQL?

Cloud Composer 工作器无法连接到外部数据库

使用代理将 DataFlow 作业连接到 Cloud MySQL 是不是安全(通过 os.system)

连接到 Cloud SQL 时,Cloud Functions “连接被拒绝”

通过启用 IAM 登录的 cloud-sql-proxy 从 Cloud Run 连接到 Cloud SQL

无法使用 Java SocketFactory 库连接到 Cloud SQL