Cloud Composer 无法连接到安装在 Azure VM 中的 SQL Server 数据库

Posted

技术标签:

【中文标题】Cloud Composer 无法连接到安装在 Azure VM 中的 SQL Server 数据库【英文标题】:Cloud Composer cannot connect to SQL Server database installed in Azure VM 【发布时间】:2022-01-22 22:02:31 【问题描述】:

我在 Azure VM 实例中安装了一个源 SQL Server 数据库,我想将数据同步到 Bigquery。我选择了 Apache Airflow 来创建一个 DAG 来完成这项工作。源系统只能通过 *** 网络连接。

我将本地系统连接到网络并使用 Python 包 pymssql 来查询数据库。我能够连接到它并执行查询。我开发了一个 DAG 管道并在我的本地环境中对其进行了测试。现在我想在 GCP 作曲家环境中部署该 DAG 管道。

在创建 composer 环境之前,我已经成功地在 GCP 和 Azure 之间创建了一个 VPC 网络。为了确认连接成功,我创建了一个 VM 实例并远程登录到数据库 IP 以确保我们能够 ping 数据库服务器。从 VM 实例,我们能够 ping 数据库服务器。但是在同一网络中创建composer环境并部署DAG代码时,会抛出以下错误

Traceback (most recent call last):
  File "/home/airflow/gcs/dags/source.py", line 201, in <module>
    conn = pymssql.connect(server='x.x.x.x', user=<username>, password=<password>, database=<dbname>)
  File "src/pymssql/_pymssql.pyx", line 652, in pymssql._pymssql.connect
pymssql._pymssql.OperationalError: (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (x.x.x.x)\nNet-Lib error during Connection timed out (110)\nDB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (x.x.x.x)\nNet-Lib error during Connection timed out (110)\n')

以下是用到的库

pymssql == 2.2.2

过去几天遇到此错误。我知道网络配置应该存在问题,但无法找出该错误。任何帮助表示赞赏。谢谢!

【问题讨论】:

【参考方案1】:

我可以根据经验案例向您建议 3 种尝试解决此问题的方法:

1.- 人们遇到类似问题的大多数情况都使用 TSQL(安装 freetds-bin)得到了解决。以下命令可以帮助您:

sudo apt update
sudo apt install python3-pip, freetds-dev, freetds-bin, libssl-dev

请确保在 /etc/freetds/freetds.conf 中将“tds version = auto”更改为“tds version = 7.4”,通过:

sudo nano /etc/freetds/freetds.conf

修改为: [全球的] ... tds 版本 = 7.4 端口 = 1433

要在 Cloud Composer 中运行 Airflow CLI 命令,请执行以下命令:

gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
SUBCOMMAND \
-- SUBCOMMAND_ARGUMENTS

替换以下内容:

-ENVIRONMENT_NAME 与环境的名称。

-LOCATION 与环境所在的 Compute Engine 区域。

-SUBCOMMAND 与支持的 Airflow CLI 命令之一。

-SUBCOMMAND_ARGUMENTS 带有 Airflow CLI 命令的参数。

2.- 确保已启用 Azure SQL Server 的 TCP/IP 访问。为此,请在 Azure 的 SQL Server 配置管理器中打开对 127.0.0.1:1433 的访问权限,例如:

一个。开始\所有程序\Microsoft SQL Server 20XX\配置工具\SQL Server 配置管理器。

b. SQL Server 网络配置\MSSQLSERVER 的协议。

c。 TCP/IP\属性\IP 地址。找到 127.0.0.1 并将“已启用”更改为“是”。如果需要或需要,对所有 IP 重复此操作。

3.- 最后,如果前面的步骤不起作用,请尝试使用不同的库,例如 pyodbc,通过:

import pyodbc
cnxn = pyodbc.connect('DRIVER=ODBC Driver 13 for SQL Server;SERVER=SERVERNAME;DATABASE=testdb;UID=me;PWD=pass')
cursor = cnxn.cursor()
cursor.execute("select user_id, user_name from users")
rows = cursor.fetchall()
for row in rows:
    print row.user_id, row.user_name

使用以下网址作为指导:Adaptive Server is unavailable or does not exist、pymssql.OperationalError: DB-Lib error message 20009 和 Access Airflow command-line interface。

【讨论】:

以上是关于Cloud Composer 无法连接到安装在 Azure VM 中的 SQL Server 数据库的主要内容,如果未能解决你的问题,请参考以下文章

如果不在防火墙或代理之后,Composer 将无法通过 http 连接到 packagegist 的一些原因是啥?

Vagrant box add - 无法连接到cloud-images.ubuntu.com端口443:超时

无法在 Google Cloud Composer 上安装新的 pipy 包

如何使用App Engine上的Python标准环境连接到Cloud SQL上的Postgres

djongo,无法连接到 cloud.mongodb.com 上的远程数据库

Cloud Foundry Turbine Stream 无法连接到 Command Metric Stream