Настройка NLB кластера из 2-х узлов, для MS Windows 2003 R2 Terminal server.

Возникла тут идея, а не создать ли NLB кластер из 2-х разрозненных терминальных серверов. И тем самым, сделать более-менее отказоустойчивое решение для пользователей терминалов.

По результатам поисков информации в Интернет, удалось выяснить, что сложного в этом ничего нет, и всё настраивается буквально за 20-30 минут.

У меня нет желания расписывать теоретическую часть о том, какие бывают кластеры, чем отличается режим Unicast от Multicast, поэтому, если такие вопросы появятся, напишу отдельную статью.

Итак, приступим.

Дано:
2 сервера HP, с установленным на них MS Windows 2003 Enterprise R2 SP2 Terminal server. Домен Active Directory.
Задача:
Необходимо настроить NLB кластер для этих терминальных серверов. Для всех коммуникаций используется одна сетевая карта. Отдельная сеть для heartbeat кластера, не создаётся.
Настроить службу “Terminal Services Session Directory”. Данная служба нужна для отслеживания пользовательских подключений к терминальным серверам.

Решение:

Запуск и настройка службы “Terminal Services Session Directory”

  1. Microsoft рекомендует запускать её на каком-нибудь надёжном сервере, типа контроллера домена. Так как эта служба будет отслеживать пользовательские сессии на терминальных серверах в кластере, и при необходимости будет переподключать пользователя к его открытой сессии на соответствующем узле кластера. Конечно, запуск этой службы на контроллере домена, на мой взгляд, чересчур, поэтому эту службу я буду запускать на третьем сервере, который используется как файловый. Какого-либо повышения нагрузки на сервер от этой службы я не заметил (решение проверялось на терминальных серверах, с общим количество единовременных подключений до 200 пользователей всего).
  2. Сама служба – это сервис, который необходимо запустить. 
  3. После запуска этой службы, в локальных группах, на этом сервере, появится группа “Session Directory Computers”, в которую необходимо добавить доменные учётные записи серверов терминалов, входящих в кластер.
  4. На этом, работы с этой службой на данном сервере завершены.

Настройка NLB кластера

В принципе, есть специальная mmc оснастка для настройки NLB кластеров. Но, так как мы настраиваем кластер, в который входят ноды только с одной сетевой картой (на самом деле их больше, но таковы условия задачи), использовать эту оснастку не рекомендуется, так как в данном случае она будет отображать ошибки.

  1. На первом (был выбран первый попавшийся из двух) терминальном сервере, который будет входить в состав кластера, открываем свойства сетевого подключения. Затем ставим галку напротив “Network Load Balancing” и нажимаем “Свойства”.
  2. В открывшемся окне, начинаем настраивать кластер NLB. В поле IP address – вводим IP нашего создаваемого кластера. Subnet mask – маска подсети. Full internet name – полное доменное имя кластера. “Cluster operation mode” в нашем случае – Unicast.
  3. На вкладке “Host parameters” настраиваем параметры хоста, входящего в данный кластер. В поле “Priority (unique host identifier)” устанавливаем порядковый номер узла в кластере. Так как у нас это первый узел, то номер, соответственно – 1, далее будет 2 и т.д. (до 32 узлов). В поле “IP address” вводим IP данного узла, а в поле “Subnet mask” – подсеть для этого адреса.
  4. Далее – вкладка “Port Rules”. На этой вкладке настраиваем, на каких портах будет работать наш кластер. Новое правило я не создавал, и использовал созданное по умолчанию. Выбираем его и нажимаем “Редактировать”. В открывшемся окне производим следующие изменения. В разделе “Port range” оставляем порт только для RDP соединений – 3389. В разделе “Filtering mode” выбираем “Affinity” – None, убираем галку “Equal”, и ставим “Load weight” – 50. Я использовал 50, так как у нас всего 2 узла в кластере. Если бы мы хотели перенести всю нагрузку на этот узел, то в этом окне необходимо было бы поставить 100.
  5. Нажимаем “Ок” и идём в свойства протокола TCP\IP. Нажимаем “Дополнительно”, и в открывшемся окне, на вкладке “IP Settings”, добавляем IP адрес, который мы назначили кластеру.
  6. Сохраняем настройки сети. Windows перезапустит сетевое соединение. Теперь эти настройки проведём на втором узле кластера. Всё абсолютно идентично тому, что мы делали, кроме одного пункта. В настройке кластера, на вкладке “Host Parameters”, в разделе “Priority (unique host identifier)”, необходимо установить 2.
  7. Проверить работу кластера (так как оснастка “Network Load Balancing Manager” работает некорректно) можно либо через командную строку, либо посмотрев логии серверов – узлов кластера. В командной строке необходимо запустить команду “wlbs query”, которая выдаст данные о кластере и его узлах. На этом, настройка кластера закончена.

Настройка узлов кластера на работу с “Terminal Services Session Directory”.

Первым делом, необходимо отметить, что работать с этой службой смогут терминальные сервера, которые развёрнуты на Windows 2003 Enterprise или Datacenter edition. Начнём настройку.

  1. Открываем оснастку “Terminal Services Configuration”. Выбираем раздел “Server Settings”, а в нём дважды щёлкаем на пункт “Session Directory”.
  2. В открывшемся окне “Session Directory Settings”, ставим галку “Join session directory”. В поле “Cluster name” – пишем полное доменное имя кластера. В поле “Session directory server name” – пишем полное имя сервера, на котором мы запустили службу “Terminal Services Session Directory”.

Эту операцию необходимо проделать на обоих наших терминальных серверах.

После этого, можно приступить к тестированию работы терминальных серверов в кластере.

Be Sociable, Share!

9 Responses to “Настройка NLB кластера из 2-х узлов, для MS Windows 2003 R2 Terminal server.”

  • Евгений:

    День добрый (ну или другое время суток :) )
    Спасибо за статью, оказалась полезной, но после настройки возник вопрос, вернее проблема.

    Настроил кластер из двух узлов, на первом ошибок нет но на втором (называю их в соответствии как настроил в приоритетах), не доступен сервер с session directory, хотя при подключениях на вторую ноду пользователи попадают. Ошибка такая:

    Event Type: Error
    Event Source: TermServJet
    Event Category: None
    Event ID: 1003
    Date: 16.09.2011
    Time: 14:27:26
    User: N/A
    Computer: host02
    Description:
    Session Directory server name SDserver.domain.com is invalid.

    For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

    Сервера находятся в одном сетевом сегменте, т.е настройки сетевые идентичны кроме последней цифры IP адреса. ОС – WS 2003 R2 64 SP2. Виртуальные, подняты на VMware.

    Не можешь подсказать в чем может быть проблема?

  • admin:

    Евгений, здравствуйте,

    А сервер, где запущен Session Directory, с этого сервера нормально пингуется (по IP, по DNS имени)?
    Пробовали ли указать в настройках “Session Directory Settings” не имя, а IP адрес?

  • Dmitriy:

    Евгений, проверьте, возможно у вас фаерволл блокирует порт по которому идёт подключение к службе Terminal Services Session Directory.

  • Andrey:

    Евгений, такой вопрос.

    У меня две машины с внешними IP адресами, расположенные в разных странах. Можно ли их объединить в NLB кластер?

    Если да, то как это настроить? Откуда брать ip адрес для кластера?

    На этот адрес (адрес кластера) будет мапится имя сайта, сейчас оно указывает на один из серверов непрямую.

  • admin:

    Andrey, здравствуйте,

    Я бы не рекомендовал объединение в NLB кластер терминальных серверов, “смотрящих” в интернет.
    Единственное, что могу посоветовать в вашем случае, это посмотреть в сторону DNS Round Robin.

  • b.s:

    привет! спасибо за материал!
    вопрос есть правда – как можно узнать кто из клиентов и на каком из серверов сейчас висит?

  • admin:

    Привет b.s,

    А разве подключенные пользователи не отображаются у вас в “Диспетчер задач”?. Там все должно быть видно без проблем.

  • Alexey:

    В кластере было два терминальных сервера на 2003 Ent. Server.
    Один из серверов сгорел, купили новый, поставили 2003 R2 Ent. Server.
    Объединил их в кластер, вроде бы всё работает как раньше кроме одного. Раньше кластер не давал логиниться одновременно на оба серврера, т.е. если зашёл на первый, то при попытке зайти на второй из первого выкидывало. Конечно если заходить на кластер, то корректно распределяет на один из двух менее загруженный, как и раньше. Проблема в том, что иногда возникает ситуация, что пользователь залонинен на обоих серверах одновременно. Я может чего-то не знаю просто?

  • admin:

    Alexey, здравствуйте,

    Подскажите, а со службой “Terminal Services Session Directory” все нормально? Она работает?

Leave a Reply