使用 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:3306
、ER_DBACCESS_DENIED_ERROR
和 ER_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?
使用代理将 DataFlow 作业连接到 Cloud MySQL 是不是安全(通过 os.system)
连接到 Cloud SQL 时,Cloud Functions “连接被拒绝”