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

17

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

在文档中,我发现了一行关于使用-instances参数。 对于多个实例,请使用逗号分隔的列表。但不确定如何实现。 https://cloud.google.com/sql/docs/sql-proxy。 我正在使用Google容器引擎,并且对于单个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

非常感谢任何帮助!

2个回答

34

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

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

我在这里使用了3306和3307端口,但您可以使用任何端口!请确保您的容器引擎配置允许节点在这些端口之间进行通信(也许默认情况下是这样的,但我不使用GKE)。

大多数MySQL驱动程序默认连接到3306端口,但有一种方法可以指定另一个端口。您需要安排您的代码连接到您选择的第二个数据库的不同端口。


1
谢谢,我正在使用这个来连接一个pod到1)主数据库进行读写流量2)只读副本进行只读流量。令人惊讶的是,这个答案是我能找到这些信息的唯一地方。 - jorfus
我在同一个实例上连接两个不同的数据库时,出现了“访问被拒绝”的错误。你认为使用不同的端口会有帮助吗?我还没有完全理解套接字路径的概念。 - ahong
最好使用MaxScale :) - c4f4t0r

6
你可以在同一个端口上创建两个实例,但是你必须像这样定义不同的IP地址:
-instances=project:region:db=tcp:127.0.0.1:3306,project:region:db-2=tcp:127.0.0.2:3306

你可以在Github的cloudsql-proxy存储库上看到一个例子。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接