Настройка групп доступности Always On и экземпляров отказоустойчивого кластера с несколькими подсетями

Применимо к:SQL Server в Linux

Если группа доступности AlwaysOn (AG) или экземпляр отказоустойчивого кластера (FCI) охватывает несколько сайтов, каждый сайт обычно имеет собственную сеть, что часто означает, что у каждого сайта есть собственный IP-адрес.

Например, адреса сайта A начинаются с, а адреса B сайта начинаются с192.168.1.<x>192.168.2.<x>, где <x> является частью IP-адреса, уникального для сервера. Без какой-либо маршрутизации на сетевом уровне эти серверы не могут взаимодействовать друг с другом.

Для этого существует два способа:

  • настройте сеть, которая связывает две разные подсети (то есть VLAN)
  • настройка маршрутизации между подсетями

Решение на основе виртуальной локальной сети

Предварительные требования: Для решения на основе виртуальной локальной сети каждый сервер, участвующий в группе доступности или кластере независимости от сбоев (FCI), должен иметь две сетевые карты (сетевой адаптер с двумя портами будет одной точкой сбоя на физическом сервере), чтобы можно было назначить IP-адреса как в собственной подсети, так и в виртуальной локальной сети. Это требование в дополнение к любым другим потребностям сети, таким как iSCSI, который также нуждается в собственной сети.

Создание IP-адресов для AG или FCI осуществляется на VLAN. В следующем примере VLAN имеет подсеть 192.168.3.<x>, поэтому IP-адрес, созданный для AG или FCI, — это 192.168.3.104. Так как Always On availability group (AG) или экземпляру отказоустойчивого кластера (FCI) назначен один IP-адрес, никакой дополнительной настройки не требуется.

Схема конфигурации с несколькими подсетями с помощью виртуальной локальной сети с серверами на двух сайтах, использующих одну группу доступности или IP-адрес FCI.

Настройка с использованием Pacemaker

В Windows кластер отказоустойчивости Windows Server (WSFC) изначально поддерживает несколько подсетей и обрабатывает несколько IP-адресов посредством зависимости ИЛИ от IP-адреса. В Linux отсутствует зависимость OR, но можно обеспечить поддержку нескольких подсетей в собственном коде с помощью Pacemaker, хотя при этом нельзя использовать обычную командную строку Pacemaker. Вместо этого нужно изменить базу информации о кластере (CIB). Файл CIB является XML-файлом с конфигурацией Pacemaker.

Схема многоподсетевой конфигурации, используя Pacemaker, с двумя серверами на узле A в подсети 192.168.1.x и одним сервером на узле B в подсети 192.168.2.x, с IP-адресами AG или FCI в каждой подсети.

Обновление БД информации о кластере

  1. Экспорт базы информации о кластере.

    sudo pcs cluster cib <filename>
    

    В этом примере <filename> — это имя, которым вы хотите назвать CIB.

  2. Измените созданный файл. Найдите раздел <resources>. Вы видите различные ресурсы, созданные для группы доступности или FCI. Найдите объект, связанный с IP-адресом. <instance_attributes> Добавьте раздел со сведениями для второго IP-адреса либо до, либо после существующего, но перед <operations>. Синтаксис выглядит примерно так:

    <instance_attributes id="<NameForAttribute>">
        <nvpair id="<NameForIP>" name="ip" value="<IPAddress>"/>
    </instance_attributes>
    

    В этом примере <NameForAttribute> это уникальное имя этого атрибута, <NameForIP> связанное с IP-адресом, <IPAddress> является IP-адресом второй подсети.

    Ниже приводится пример.

    <instance_attributes id="virtualip-instance_attributes">
        <nvpair id="virtualip-instance_attributes-ip" name="ip" value="192.168.1.102"/>
    </instance_attributes>
    

    По умолчанию в экспортированном XML-файле CIB есть только один <instance_attributes />. Если есть две подсети, вам потребуется две <instance_attributes /> записи.

    Ниже приведен пример записей для двух подсетей:

    <instance_attributes id="virtualip-instance_attributes1">
        <rule id="Subnet1-IP" score="INFINITY" boolean-op="or">
            <expression id="Subnet1-Node1" attribute="#uname" operation="eq" value="Node1" />
            <expression id="Subnet1-Node2" attribute="#uname" operation="eq" value="Node2" />
        </rule>
        <nvpair id="IP-In-Subnet1" name="ip" value="192.168.1.102"/>
    </instance_attributes>
    <instance_attributes id="virtualip-instance_attributes2">
        <rule id="Subnet2-IP" score="INFINITY">
            <expression id="Subnet2-Node1" attribute="#uname" operation="eq" value="Node3" />
        </rule>
        <nvpair id="IP-In-Subnet2" name="ip" value="192.168.2.102"/>
    </instance_attributes>
    

    Следует использовать boolean-op="or", если в подсети более одного сервера.

  3. Импортировать измененный CIB и перенастроить Pacemaker.

    sudo pcs cluster cib-push <filename>
    

    В этом примере <filename> — имя файла CIB с измененными сведениями ОБ IP-адресе.

Проверка изменений и отработки отказа

  1. После успешного применения CIB с обновленной конфигурацией, отправьте ping на DNS-имя, ассоциированное с ресурсом IP-адреса в Pacemaker. Он должен отражать IP-адрес, связанный с подсетью, в которой в данный момент размещаются группа доступности Always On или экземпляр отказоустойчивого кластера.

  2. Выполните отработку отказа группы доступности Always On или экземпляра отказоустойчивого кластера в другой подсети.

  3. После полного подключения Always On группы доступности или экземпляра отказоустойчивого кластера отправьте ping на DNS-имя, связанное с IP-адресом. Он должен отражать IP-адрес во второй подсети.

  4. При необходимости переведите Always On AG или FCI обратно в исходную подсеть.