Перестроение или перемещение установки MSDTC для использования с отказоустойчивого кластера SQL

В этой статье описывается, как перестроить неработающий экземпляр microsoft Distributed Transaction Coordinator (MSDTC) для использования с отказоустойчивой кластеризованной SQL Server установкой.

Применимо к: Windows Server 2019, Windows Server 2016, Windows Server 2012 R2
Исходный номер базы знаний: 294209

Сводка

В следующем блоге содержатся подробные сведения об изменениях в поведении MSDTC с момента выпуска Windows Server 2008.

Рекомендации MSDTC для отказоустойчивого кластера SQL

Цель следующих часто задаваемых вопросов (часто задаваемых вопросов) заключается в том, чтобы ответить на часто задаваемые вопросы с MSDTC при использовании с SQL Server отказоустойчивых кластеризованных экземпляров, чтобы включить текущие рекомендации и рекомендации.

MSDTC — это диспетчер транзакций, который позволяет клиентским приложениям включать несколько различных источников данных в одну транзакцию, а затем координирует фиксацию распределенной транзакции по всем серверам, которые включены в транзакцию. Это помогает гарантировать фиксацию транзакции, если каждая часть транзакции успешно завершается, или выполняется откат в случае сбоя какой-либо части процесса транзакции.

Многие люди спрашивают, почему необходимо установить MSDTC перед установкой SQL Server. Вам больше не нужно выполнять эту операцию. Это было требование, которое требовалось SQL Server 2005 году. Эта версия SQL Server завершила свой жизненный цикл и, таким образом, прекратила требование установки SQL Server.

При развертывании SQL Server в высокодоступной среде, такой как отказоустойчивая кластеризация Windows, существуют определенные рекомендации, которые могут сделать поведение служб MSDTC более предсказуемым.

  • Если в разделе о поддержке транзакций между базами данных и (или) DTC в группе доступности возникает быстрый ответ НЕ ПОДДЕРЖИВАЕТся!.

  • Это верное заявление, и разговор, как правило, затем сосредоточиться на, но почему? Фактически, некоторые администраторы баз данных тестировали различные формы этих типов транзакций и не сталкивались с ошибками.

  • Проблема заключается в том, что тестирование не завершено, и требуемая двухэтапная фиксация может привести к потере данных или к восстановлению базы данных, которая не восстанавливается должным образом в определенных конфигурациях. Фактически, SQL Server тестировщики внедряют сбои в стратегически важных расположениях, чтобы создать сценарии, которые трудно (но не невозможно) создать на рабочем сервере. Дополнительные сведения см. в разделе Not-Supported: AGs with TC/Cross-Database Transaction.

При использовании отказоустойчивого кластера Windows 2008 и более поздних версий не нужно кластерировать MSDTC, чтобы использовать функции службы MSDTC, так как MSDTC был перепроектирован в Windows 2008. В отличие от Windows 2003, при установке отказоустойчивого кластера Windows необходимо было кластерировать MSDTC. Это больше не происходит при использовании Windows 2008, так как по умолчанию служба MSDTC работает локально, даже если установлена отказоустойчивая кластеризация.

Если для экземпляра отказоустойчивой кластеризации SQL Server требуется MSDTC и ресурсы MSDTC требуют отработки отказа с экземпляром SQL Server, рекомендуется создать ресурс MSDTC в роли FailoverCluster, который содержит экземпляр SQL Server и который он использует:

  • Сетевое имя SQL Server\точка доступа клиента
  • Диск в роли SQL Server
  • Присвойтите ресурсу MSDTC имя виртуального сервера SQL.

Настройка и тестирование нового ресурса кластера MSDTC с помощью PowerShell

  1. Создайте новый ресурс MSDTC, заменив содержимое между и включая приведенные <> ниже разделы, а затем выполните.

    $SqlRole = <Actual name of the role containing the SQL Server instance>
    $SqlNetName = <Actual SQL Servernetwork resourcename>
    $VSqlSrv = <Actual SQL Server virtual server name>
    $CluDsk = <Actual disk resource name>
    

    Если ресурс MSDTC не принял предоставленное имя, можно изменить имя с помощью следующей команды PowerShell, заменив новый координатор распределенных транзакций на RealSqlVsName:

    Get-ClusterResource "New Distributed Transaction Coordinator" | %{$_.Name = RealSqlVsName }
    

    Вы можете заменить $VSqlSrv значение RealSqlVsName, если он по-прежнему активен.

  2. Проверьте правила брандмауэра с помощью следующего скрипта:

    Set-NetFirewallRule -Name 'RPC Endpoint Mapper' -Enabled True
    Set-NetFirewallRule -Name 'DTC incoming connections' -Enabled True
    Set-NetFirewallRule -Name 'DTC outgoing connections' -Enabled True
    
  3. Настройте проверку подлинности сети MSDTC с помощью следующего скрипта:

    Set-DtcNetworkSetting -AuthenticationLevel Mutual `
    -DtcName "Local" -InboundTransactionsEnabled $True `
    -LUTransactionsEnabled $True `
    -OutboundTransactionsEnabled $True `
    -RemoteAdministrationAccessEnabled $False `
    -RemoteClientAccessEnabled $False `
    -XATransactionsEnabled $True -verbose
    
  4. Убедитесь, что новый ресурс MSDTC теперь указан с помощью следующей команды:

    Get-Dtc -Verbose |Sort-Object DtcName
    
  5. Протестируйте новый ресурс MSDTC.

    Test-Dtc -LocalComputerName RealSqlVsName -Verbose
    

    Вы можете заменить $VSqlSrv значение RealSqlVsName, если он по-прежнему активен. Используйте $Env:COMPUTERNAME для тестирования локальной установки. Необходимо выполнить правила брандмауэра и команды PowerShell проверки подлинности MSDTC на всех других существующих узлах кластера.

  6. Протестируйте MSDTC.

    В этом примере мы будем использовать базу данных AdventureWorks2012. Необходимо заменить фактическое имя базы данных, с которым вы хотите протестировать. В окне запроса SQL Server выполните следующую инструкцию SQL:

    USE AdventureWorks2012;
    
    GO
    
    BEGIN DISTRIBUTED TRANSACTION; 
    
    -- Enter fake transaction to the database
    
    INSERT SQL_Statement
    
    DELETE SQL_Statement
    
    COMMIT TRANSACTION
    
    GO
    

    Теперь вы увидите, что одна строка затронута и что вставленная запись не существует.

Ссылки

Рекомендуемые параметры MSDTC для использования распределенных транзакций в SQL Server