Ts session broker-посередник служб терміналів, blog of khlebalin dmitriy

Нещодавно я писав про те, що нам необхідно отримати в результаті, про це тут:

При виборі сервера перевіряється наявність у користувача незавершеного сеансу. Якщо такий сеанс знайдений, термінальна сесія відновлюється. Якщо у користувача немає сеансів ні на одному з серверів ферми, він буде перенаправлений на сервер з найменшим числом сесій. Порівняння числа сесій відбувається з урахуванням питомої ваги кожного сервера. Наприклад, якщо в фермі знаходиться два сервера з питомою вагою 50 і 100, то на перший сервер перенаправлятиметься в два рази менше сесій ніж на другий.

Файли TS Session Broker знаходяться в каталозі:% systemroot% \ system32 \ tssesdi r. Інформація про поточні з'єднаннях зберігається в базі даних tsesdir.edb. Для кожного сеансу визначені:

  • ім'я сервера на якому встановлена ​​сесія,
  • ідентифікатор цієї сесії (присвоюється термінальним сервером в момент встановлення з'єднання),
  • логін користувача,
  • домен, якому належить користувач,
  • протокол, використаний при з'єднанні (RDP, ICA і.т.п.),
  • дата і час створення сесії,
  • дата і час відключення сеансу,
  • роздільну здатність (число пікселів по ширині і висоті),
  • глибина кольору,
  • ідентифікатор, що визначає чи є з'єднання повноекранним робочим столом або воно налаштоване на запуск єдиної програми при відкритті сеансу.

Останній параметр, разом з ім'ям користувача і доменом, використовується при відновленні сеансу. Якщо користувач з'єднується з допомогою клієнта віддаленого робочого столу в якому заданий запуск іншої програми при старті, він не буде перенаправлений в вимкнуту сесію.

Розташування бази даних tsesdir.edb можна змінити за допомогою ключа реєстру WorkingDirectory, що знаходиться в гілці: HKLM \ System \ CurrentControlSet \ Services \ Tssdis \ Parameters.

Іноді термінальні сервера доводиться перезавантажувати в процесі технічного обслуговування або через збій. Посередник сеансів служб терміналів повинен визначати такі ситуації і припиняти розподіляти сесії на недоступні сервера. Відбувається це за наступним алгоритмом.

  1. Посередник сеансів служб терміналів виявляє невдале перенаправлення сесії.
  2. Через деякий інтервал часу (за замовчуванням хвилину) він починає пінгувати «підозрілий» сервер.
  3. Якщо сервер залишається не доступний (не відповідає на пінг) протягом заданого числа спроб, він видаляється з бази даних посередника сеансів служб терміналів.
  4. При перезапуску служби tssdis стан бази даних відновлюється.

Параметри цього процесу можна гнучко налаштувати за допомогою ключів реєстру, які перебувають в гілці: HKLM \ System \ CurrentControlSet \ Services \ Tssdis \ Parameters. Розглянемо їх більш детально.

  • PingMode. За замовчуванням дорівнює 0. Рекомендується не зраджувати цей параметр. Решта значення використовуються виключно з метою налагодження.
  • TimeServerSilentBeforePing. За замовчуванням дорівнює 60. Визначає проміжок часу в секундах після закінчення якого посередник сеансів служб терміналів починає пінгувати термінальний сервер після невдалої спроби підключення.
  • TimeBetweenPings. За замовчуванням дорівнює 10. Встановлює число секунд між спробами пинга.
  • NumberFailedPingsBeforePurge. За замовчуванням дорівнює 3. Задає число спроб пропінгувати сервер перед видаленням з бази даних.
  • RecoverWhenStart. За замовчуванням дорівнює 1. Визначає необхідність відновлення бази даних при перезапуску служби tssdis.

Після внесення змін службу tssdis необхідно перезапустити. При значеннях за замовчуванням, непрацюючий сервер видаляється з бази даних приблизно за дві хвилини. Іноді може виникнути ситуація коли термінальний сервер не в змозі приймати нові підключення, але може відповідати на пінг. У цьому випадку посередник сеансів служб терміналів буде працювати некоректно.

ВСТАНОВЛЕННЯ ТА НАЛАШТУВАННЯ

Докладну інструкцію з встановлення та налаштування посередника сеансів служб терміналів можна знайти на сайтеMicrosoft Technet. Умовно його можна розбити на три основних етапи.

  1. Встановити роль термінального сервера зі службою TS Session Broker.
  2. Додати термінальні сервера в групу Session Directory Computers (локальна група на сервері з встановленим TS Session Broker).
  3. Налаштувати термінальні сервера на використання TS Session Broker.

Окремо хотілося б розповісти про особливості балансування посередником сеансів служб терміналів.

При включенні сервера в ферму, термінальні підключення до нього починають розподілятися між усіма учасниками ферми. У разі якщо з'єднання йде по імені сервера і посередник сеансів служб терміналів намагається направити користувача на інший сервер, виникне помилка:

ОСОБЛИВОСТІ ПРАКТИЧНОГО ВИКОРИСТАННЯ

При використанні посередника сеансів служб терміналів, від користувачів можуть надходити скарги на необхідність двічі вводити облікові дані при відкритті сеансу. Приклади таких тем на форумах Technet:

Проблема пов'язана з тим, що сервер, отримавши облікові дані користувача при початковому з'єднанні, перенаправляє його на інший термінальний сервер. При цьому облікові дані не передаватимуться або повторно для входу на перенаправлений сервер користувач змушений вводити їх вдруге. Для Windows XP з пакетом оновлень SP3 і більш старших версій операційних систем це може бути вирішено за допомогою Cred SSP. Дана технологія дозволяє програмам передавати облікові дані користувача з локального комп'ютера. Прочитати про це можна в статті: KB951608

Більш детально це буде розглянуто в одному з наступних матеріалів.

Іноді виникає ситуація коли посередник сеансів служб терміналів перестає направляти з'єднання на один або кілька серверів в фермі. Допомагає перезапуск служби tssdis, але через деякий час проблема виникає знову. Для усунення цього можна скористатися статьейKB955365.

Суть проблеми полягає в наступному. Під час відкриття сеансу навантаження на сервер зазвичай вище ніж при звичайній роботі. У зв'язку з цим, для одного сервера за замовчуванням можливо не більше 16 одночасних запитів на підключення. Це зроблено для того, щоб уникнути браку ресурсів на термінальному сервері відразу ж після його включення в ферму.

Лічильник незавершених підключень зростає на одиницю в момент перенаправлення сеансу за допомогою посередника сеансів служб терміналів. Відповідно, після завершення підключення і відкриття користувачем сеансу він зменшується на одиницю. Якщо лічильник одночасних підключень досягає 16, посередник сеансів служб терміналів припиняє надсилати до нього сесії.

Якщо сесія відключається в процесі перенаправлення, посередник сеансів служб терміналів не применшує показання лічильника і з часом на один або кілька серверів перестають спрямовуватися нові підключення.

В якості вирішення можна збільшити число одночасних підключень. Це встановлюється ключем реєстру LB_MaxNumberOfPendingRedirections, що знаходиться в гілці

Якщо такого ключа немає, його необхідно створити.

У деяких випадках для того щоб розібратися з проблемами в роботі посередника сеансів служб терміналів корисно включити режим логування. Даний процес описаний в статті KB327508.

Для збереження балки в файл необхідно додати ключ TraceOutputMode зі значенням 3 в гілку HKLM \ SYSTEM \ CurrentControlSet \ Services \ Tssdis \ Parameters

і перезапустити службу. Файл логу за замовчуванням знаходиться в каталозі. % Systemroot% \ system32 \ tssesdir. Туди заносяться такі події:

  • Запуск служби TS Broker;
  • Зупинка служби;
  • Приєднання сервера до ферми;
  • Вихід сервера з ферми;
  • Вхід користувача;
  • Відключення користувача;
  • Відновлення сеансу;
  • Вихід користувача;
  • Повідомлення системного журналу подій пов'язані з роботою посередника сеансів служб терміналів.

У звичайному режимі роботи логирование краще відключати. Для цього параметр TraceOutputMode треба встановити рівним 0.

Іноді для проведення технічних робіт на сервері потрібно заборонити встановлювати нові сесії. Така заборона не завадить сервера брати участь в розподілі надходять на нього підключень. У деяких випадках це можна робити з метою зниження навантаження на сервер, який відповідає за первинний прийом з'єднань.

Всім гарної роботи!

Сподобалося це:

Схожі статті