Sql-Server

SQL Server 多實例 IP 配置 - 服務未啟動

  • December 23, 2021

在為第一個實例分配特定 IP 地址時,我在配置多實例 SQL Server 時遇到了問題。

專用 IP 設置

我將單個實例配置為專用 IP 地址的步驟是:

  1. 打開 SQL Server 配置管理器 (SSCM)
  2. 向下導航到樹:
SQL Server Configuration Manager (local)
+-- SQL Server Network Configuration
   +-- Protocols for <INSTANCENAME>
  1. 然後在右窗格中點兩下TCP/IP ,在****協議選項卡中打開 TCP/IP 的屬性
  2. 然後我確保Enabled設置為yes並且Listen All的選項設置為No
  3. 我將選項卡切換到IP 地址並確保
  • 對於所有 IPv4 和 IPv6 地址,“已啟用”設置為**“否**”,我要分配給此實例的 IP 地址除外。對於這個 IP 地址,我將設置設置為Yes
  • 對於所有 IP 地址, TCP 動態埠都是空的。
  • 對於我要分配給此實例的 IP 地址,我分配TCP 埠 1433
  1. 然後我關閉所有視窗,SSCM 顯示標準消息:
---------------------------
Warning
---------------------------
Any changes made will be saved; however, they will not take 
effect until the service is stopped and restarted.
---------------------------
OK   
---------------------------
  1. 我重新啟動特定實例,它通常會允許通過專用 IP 地址連接到我的實例。
  2. 我測試實例正在偵聽給定的 IP 地址和埠:
c:\> netstat -abon
TCP    10.58.212.112:1433     0.0.0.0:0              LISTENING         2172
[sqlservr.exe]

以上結果來自工作伺服器

到現在為止還挺好。我已經無數次這樣做了,從來沒有遇到過任何問題。

案子

兩天前,測試伺服器上新配置的實例的 SQL Server 服務在為實例配置 10.58.194.5 地址後無法啟動。我嘗試了以下步驟來修復“損壞”的測試實例:

  1. 修復共享工具
  2. 修復實例
  3. 解除安裝並重新安裝 SQL Server
  4. 執行 ProcMon 以找出問題所在。

但到目前為止沒有任何幫助。

ERRORLOG 文件的相關輸出如下:

2021-12-17 08:00:03.76 spid17s     Error: 26024, Severity: 16, State: 1.
2021-12-17 08:00:03.76 spid17s     Server failed to listen on 10.58.194.5 <ipv4> 1433. Error: 0x2741. 
                                   To proceed, notify your system administrator.
2021-12-17 08:00:03.76 spid17s     Error: 17182, Severity: 16, State: 1.
2021-12-17 08:00:03.76 spid17s     TDSSNIClient initialization failed with error 0x2741, status code 0xa. 
                                   Reason: Unable to initialize the TCP/IP listener. 
2021-12-17 08:00:03.76 spid17s     Error: 17182, Severity: 16, State: 1.
2021-12-17 08:00:03.76 spid17s     TDSSNIClient initialization failed with error 0x2741, status code 0x1. 
                                   Reason: Initialization failed with an infrastructure error. Check for previous errors. 
2021-12-17 08:00:03.76 spid17s     Error: 17826, Severity: 18, State: 3.
2021-12-17 08:00:03.76 spid17s     Could not start the network library because of an internal error in the network library. 
                                   To determine the cause, review the errors immediately preceding this one in the error log.
2021-12-17 08:00:03.76 spid17s     Error: 17120, Severity: 16, State: 1.
2021-12-17 08:00:03.76 spid17s     SQL Server could not spawn FRunCommunicationsManager thread. 
                                   Check the SQL Server error log and the operating system error log for information about possible related problems.

這是我第一次無法將 SQL Server 實例配置/設置為特定 IP 地址。

事件日誌條目

嘗試啟動服務時(最新的優先),Windows 的應用程序事件日誌中記錄了以下錯誤:

Level | Date / Time         | Source               | Event ID
Error | 17.12.2021 11:00:45 | MSSQL$<INSTANCENAME> | 17120
Error | 17.12.2021 11:00:45 | MSSQL$<INSTANCENAME> | 17826
Error | 17.12.2021 11:00:45 | MSSQL$<INSTANCENAME> | 17182
Error | 17.12.2021 11:00:45 | MSSQL$<INSTANCENAME> | 17182
Error | 17.12.2021 11:00:45 | MSSQL$<INSTANCENAME> | 26024

這些事件 ID 類似於 ERRORLOG 中的資訊。

系統事件日誌中的其他條目是:

Level | Date / Time         | Source                  | Event ID
Error | 17.12.2021 11:00:45 | Service Control Manager | 7024 

詳情如下:

The service "SQL Server (<INSTANCENAME>)" has been stopped with the following error: 
The requested address is invalid in this context.

XML 詳細資訊為:

- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name="Service Control Manager" Guid="{555908d1-a6d7-4695-8e1e-26931d2012f4}" EventSourceName="Service Control Manager" /> 
  <EventID Qualifiers="49152">7024</EventID> 
  <Version>0</Version> 
  <Level>2</Level> 
  <Task>0</Task> 
  <Opcode>0</Opcode> 
  <Keywords>0x8080000000000000</Keywords> 
  <TimeCreated SystemTime="2021-12-17T10:00:45.876740800Z" /> 
  <EventRecordID>15418</EventRecordID> 
  <Correlation /> 
  <Execution ProcessID="736" ThreadID="372" /> 
  <Channel>System</Channel> 
  <Computer>SERVER.DOMAIN.TLD</Computer> 
  <Security /> 
  </System>
- <EventData>
  <Data Name="param1">SQL Server (<INSTANCENAME>)</Data> 
  <Data Name="param2">%%10049</Data> 
  <Binary>4D005300530051004C00240041004C004C00470045004D00450049004E000000</Binary> 
  </EventData>
  </Event>

網路介面卡配置

測試伺服器上只配置了一個網卡。它是一個虛擬的。名稱為Ethernet0,類型為Ethernet Adapter for vmxnet3

網路配置如下:

IP address:        10.58.194.4
Subnet mask:       255.255.255.192
Standard gateway:  10.58.194.2

我們用於 SQL Server 實例的其他 IP 地址是:

10.58.194.5 / 255.255.255.192
10.58.194.6 / 255.255.255.192
10.58.194.7 / 255.255.255.192
10.58.194.28 / 255.255.255.192
10.58.194.29 / 255.255.255.192

單個 NIC 配置為接受六個 IP 地址的連接。

問題

有人知道我該如何解決這個問題嗎?


通過評論附加資訊

如果我在 TCP/IP 配置中將Listen All選項設置為Yes,則實例將啟動。但這不是我想要的。我無法使用別名或 IP 地址連接到實例。然後 sqlserver.exe 程序不再偵聽埠 1433。

在考慮我觀察到sqlserver.exe 程序不再監聽埠 1433之後,似乎伺服器無法將 IP 地址綁定到我的第一個實例的埠 1433。

將Listen All配置為yes並將 IP 地址配置為具有 port1433後,sqlserver.exe不再偵聽 port 的任何 IP 地址 ( 0.0.0.0) 1433。這就像埠號輸入框的配置設置已損壞。SQL Server 錯誤日誌顯示:

2021-12-17 16:27:36.35 spid17s     Error: 26058, Severity: 16, State: 1.   
2021-12-17 16:27:36.35 spid17s     A TCP provider is enabled, but there are no TCP listening ports configured. 
                                   The server cannot accept TCP connections.`

旁注

我能夠設置和配置同一天收到的生產伺服器,以使用特定 IP 沒有任何問題。唯一的區別可能是我收到的生產伺服器的六個 IP 地址按如下順序排列

10.xx.xxx.111 / 255.255.255.0 -- server
10.xx.xxx.112 / 255.255.255.0 -- instance_1
10.xx.xxx.113 / 255.255.255.0 -- instance_2
10.xx.xxx.114 / 255.255.255.0 --...
10.xx.xxx.115 / 255.255.255.0
10.xx.xxx.116 / 255.255.255.0

我正在記錄答案,以便為其他人提供在為單個 SQL Server 實例配置 IP 地址時找出 IP 地址可能導致問題的方法。

以下 IP 地址是分配給伺服器上的 NIC 和伺服器本身的 IP:

IP address:        10.58.194.4       (server)
Subnet mask:       255.255.255.192
Standard gateway:  10.58.194.2
IP address:        10.58.194.5       (instance 1)
IP address:        10.58.194.6       (instance 2)
IP address:        10.58.194.7       (instance 3)
IP address:        10.58.194.28      (instance 4)
IP address:        10.58.194.29      (instance 5)

以下是 IP 範圍的一部分以及從網路角度來看它們的實際用途:

IP address:        10.58.194.0       (reserved; don't use)
IP address:        10.58.194.1       (reserved; don't use)
IP address:        10.58.194.2       (virtual Gateway)
IP address:        10.58.194.3       (reserved; don't use)
IP address:        10.58.194.4       (Actual Gateway Data Centre 1)
IP address:        10.58.194.5       (Actual Gateway Data Centre 2)
IP address:        10.58.194.6       (reserved; don't use)
IP address:        10.58.194.7       (reserved; don't use)

如您所見,伺服器的 IP 地址與實際網關數據中心 1的 IP 地址相匹配。為第一個 SQL Server 實例保留的 IP 地址是實際網關數據中心 2的 IP 地址。

發生了什麼事情?

在伺服器的初始配置期間,IP 地址部分由網路技術人員使用。因為伺服器的目前物理網關在伺服器上執行,10.58.194.5所以能夠配置為執行和啟動10.58.194.4

NIC 上附加 IP 地址的配置不是問題,因為它最初只是系統資料庫中的一個條目。然後將伺服器移交給 DBA 團隊。

然後出現了 DBA 人(我),並嘗試在實際網關數據中心 2的 IP 地址上配置一個新的 SQL Server 實例。因為這個地址實際上被用作 Windows Server 的目前網關,所以 SQL Server 實例無法啟動。

提示 1

執行 anipconfig會顯示伺服器上處於活動狀態的實際 IP 地址:

Ethernet-Adapter Ethernet0:

   Verbindungsspezifisches DNS-Suffix: 
   Verbindungslokale IPv6-Adresse  . : 
   IPv4-Adresse  . . . . . . . . . . : 10.58.194.4
   Subnetzmaske  . . . . . . . . . . : 255.255.255.192
   IPv4-Adresse  . . . . . . . . . . : 10.58.194.7
   Subnetzmaske  . . . . . . . . . . : 255.255.255.192
   IPv4-Adresse  . . . . . . . . . . : 10.58.194.28
   Subnetzmaske  . . . . . . . . . . : 255.255.255.192
   IPv4-Adresse  . . . . . . . . . . : 10.58.194.29
   Subnetzmaske  . . . . . . . . . . : 255.255.255.192
   Standardgateway . . . . . . . . . : 10.58.194.2

這向我們展示了這一點,...194.5並且...194.6即使它們已為 NIC 配置,也不能用於伺服器/實例。

提示 2

在不同的 IP 範圍內執行tracert到不同的伺服器將同樣表明該 IP 地址10.58.194.5被用作伺服器的目前網關。

解決方案

我們的問題的解決方案是將伺服器移動到不同的 IP 範圍,並記錄該範圍的前七個 IP 地址是為網路技術人員保留的。

引用自:https://dba.stackexchange.com/questions/305098