【问题标题】:How to connect Data Fusion to Cloud SQL Proxy如何将 Data Fusion 连接到 Cloud SQL 代理
【发布时间】:2021-07-17 23:31:38
【问题描述】:

我正在尝试使用私有 IP 将 Data Fusion 与 Cloud SQL MySQL 连接起来。我已经阅读了很多资源,似乎这是可能的(至少我仍然不相信这是不可能的)。到目前为止我所拥有的:

  • 具有私有 IP 的 Data Fusion 私有实例。
  • 具有私有 IP 的 Cloud SQL for MySQL 实例。
  • 部署在虚拟机上的 Cloud SQL 代理。
  • 一切都连接到同一个默认 VPC 网络。
  • 防火墙完全打开(IP 范围的入口、出口:0.0.0.0/0 和所有协议端口)

从我的 VM 实例中,我可以使用以下命令 mysql -u root –host 127.0.0.1 –port 3306 连接到 MySQL 数据库。尝试在 Cloud Fusion 中使用相同的参数时,我无法建立连接。应该做什么,我可以检查什么以确保所有这些设置正确。

编辑

我最初接受了 Ajai 的回答,但后来因为我无法在新项目中建立连接而无法接受。这里可能缺少一个元素,需要在某处完成的事情。

【问题讨论】:

    标签: google-cloud-platform google-cloud-sql google-cloud-data-fusion cloud-sql-proxy


    【解决方案1】:

    我已经成功地重新创建了环境,这里是详细的步骤,也许你错过了一个步骤:

    1. 在具有私有 Google 访问权限Configuring Private Google Access 的 VPC 中创建子网
    2. 创建附加到同一 VPC 的私有云数据融合实例
    3. 创建防火墙规则,允许分配的服务网络范围访问端口 3307 上的代理虚拟机
    4. 创建附加到同一 VPC 的私有 CloudSQL MySQL 实例
    5. 按照Set up VPC Network Peering 中概述的步骤在 Cloud Data Fusion 和同一 VPC 之间创建了 VPC 对等互连
    6. 在步骤 1 中在子网中部署了 VM
    7. 通过Install the Cloud SQL Auth proxy 中概述的步骤部署了 CloudSQL 代理
    8. 使用以下命令行执行 Cloud SQL 代理(注意,0.0.0.0 允许绑定到所有 IP):
        *./cloud_sql_proxy -instances=<Instance Connection Name>=tcp:0.0.0.0:3307
    
    1. 在 CDF 控制台上运行测试: Successful Connection

    验证上述内容后,您可以将 CloudSQL 代理作为 linux 服务或启动脚本自动执行。

    附:感谢您引用我们的文章!

    编辑:

    如果您想使用代理的 docker 版本,请按照 Ajai 的回答使用以下代替步骤 7 和 8:

    sudo docker run -d \
      -p 0.0.0.0:3307:3307 \
      gcr.io/cloudsql-docker/gce-proxy:latest /cloud_sql_proxy \
      -instances=<instance connection name>=tcp:0.0.0.0:3307
    

    编辑 2

    关于代理需要指出的两个关键点是您可能已经拥有 3306 绑定到同一实例上的 MySQL。使用像 3307(或其他数字)这样的端口可以减少这种可能性。请注意,对于与 CloudSQL 本身的出站连接,CloudSQL 代理确实使用 3307 How the Cloud SQL Auth proxy works

    第二件事是将其设置为监听 0.0.0.0;如上所述,这绑定到所有 IP,允许代理侦听所有传入连接,而不是仅来自 127.0.0.1 的连接。

    【讨论】:

      【解决方案2】:

      到目前为止,您的方法似乎是正确的。在私有 CDF 实例与私有 CloudSQL MYSQL 实例之间进行连接的唯一方法是通过 CloudSQL 代理。

      但是,在采用这种方法时需要检查一些事项,

      虚拟机设置

      • 创建私有 GCE 虚拟机(无外部 IP)
      • 拥有所有范围(允许完全访问所有 Cloud API)
      • 已将操作系统更改为“容器化优化操作系统”。这带有预安装的 docker
      • 将以下内容作为自动化启动脚本,
      docker pull gcr.io/cloudsql-docker/gce-proxy:1.16
      
      docker run -d \
        -p 0.0.0.0:3306:3306 \
        gcr.io/cloudsql-docker/gce-proxy:1.16 /cloud_sql_proxy \
        -instances=<cloudsql-connection-name>=tcp:0.0.0.0:3306
      

      最后一步应该使用特定的 docker 映像启动并运行代理。更详细的文档可以在这里找到(https://cloud.google.com/sql/docs/mysql/connect-docker)

      CloudSQL 驱动程序

      另外需要注意的是,基于 MySQL 版本,5.1.39 驱动程序可能不会一直工作。请查看 Hub 以获取 CloudSQL MySQl 特定驱动程序

      如果这些建议都不适合您,我会尝试更新答案。

      了解问题的其他资源

      对于任何想了解为什么私有 CDF 实例无法直接连接到私有 CloudSQL MySQL 实例的人,这里有几个资源可以讨论它,

      【讨论】:

      • 谢谢。您如何获得在云融合连接部分的连接字符串中输入的 IP?这是您的云 SQL 实例的私有 IP 还是其他什么?
      • 连接字符串中的ip是代理vm的私有静态ip。
      • 非常感谢。这是工作。是否可以使用本文所述的 Cloud SQL 代理来完成这项工作,例如 mastercifucom.wordpress.com/2020/07/10/… 或者使用 docker 会带来一些特定的东西吗?
      • 很高兴它成功了!这是来自 cloudsql 文档的官方文档 - cloud.google.com/sql/docs/mysql/…
      猜你喜欢
      • 2020-11-12
      • 2019-12-10
      • 2017-01-07
      • 2021-07-16
      • 1970-01-01
      • 2018-06-10
      • 2020-04-20
      • 2021-02-12
      • 1970-01-01
      相关资源
      最近更新 更多