簡體   English   中英

Cloud Composer 無法連接到 Azure VM 中安裝的 SQL 服務器數據庫

[英]Cloud Composer cannot connect to SQL Server database installed in Azure VM

我有一個源 SQL 服務器數據庫安裝在 Azure VM 實例中,我想將數據同步到 Bigquery。 我選擇了 Apache Airflow 創建一個 DAG 來完成這項工作。 源系統只能通過 VPN 網絡連接。

我將本地系統連接到網絡並使用 Python Package 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

最近幾天面臨這個錯誤。 我知道網絡配置應該存在問題,但無法找出該錯誤。 任何幫助表示贊賞。 謝謝!

根據經驗案例,我可以向您建議 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 和 arguments 用於 Airflow CLI 命令。

2.- 確保啟用 Azure SQL 服務器的 TCP/IP 訪問。 為此,請在 Azure 中的 SQL 服務器配置管理器中打開對 127.0.0.1:1433 的訪問,例如:

一個。 開始\所有程序\Microsoft SQL 服務器 20XX\配置工具\SQL Server 配置管理器。

灣。 SQL 服務器網絡配置\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

使用以下 URL 作為指導: Adaptive Server 不可用或不存在pymssql.OperationalError: DB-Lib 錯誤消息 20009Access Airflow 命令行界面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM