Windows Server 2012: SMB Transparent Failover | Булдаков.ru | записки сисадміна

SMB Transparent Failover одна з ключових функцій протоколу SMB 3 SMB Transparent Failover одна з ключових функцій протоколу SMB 3.0. На файлових серверах на базі Windows Server 2012 можна зберігати дані різних додатків (наприклад, файли віртуальних машин Hyper-V, бази даних сервера SQL). Зазначені додатки припускають, що їх дані знаходяться в сховищі, яке надійно і завжди доступно. У зв'язку з цим вони не обробляють помилки введення-виведення. У разі, якщо сховище стає недоступним, дані можуть бути пошкоджені, а подальша їх запис неможливий.

SMB Transparent Failover дозволяє налаштовувати загальнодоступні папки при використанні відмовостійкої кластеризації (Failover Clustering) таким чином, що вони стають високодоступних. Це дозволяє адміністраторам кластера проводити операції з підтримки вузлів кластера без переривання роботи додатків, чиї дані зберігаються на кластерізованний файловому сервері. У разі збою апаратного забезпечення файловий сервер буде переключено на працюючий вузол без затримок, що так само дозволить працювати з додатком, яке зберігає свої дані на файловому сервері, не переривати свою роботу.

вимоги:

  • Відмов кластер на базі Windows Server 2012, що складається як мінімум з двох вузлів. Майстер перевірки конфігурації кластера повинен відпрацьовувати на обох вузлах без помилок.
  • Кластерізованний файловий сервер з однієї або більше загальнодоступними папками, які працюють в режимі безперервної доступності (continuously available).
  • Клієнти на базі Windows 8 або Windows Server 2012.

Щоб використовувати SMB Transparent Failover і клієнт і сервер повинні підтримувати SMB 3.0. На поточний момент ця підтримка реалізована тільки для Windows 8 і Windows Server 2012. Клієнти використовують попередні версії SMB (1.0, 2.0, 2.1) використовувати такі папки зможуть, але не зможуть використовувати функцію SMB Transparent Failover.

Як працює?

Коли SMB клієнт підключається до папки він визначає для неї значення параметра ContinuouslyAvailable. Якщо він включений (значення виставлено в True), то папка знаходиться на відмов кластеру і працює в режимі continuously available. Це автоматично означає, що папка підтримує SMB Transparent Failover. Коли SMB клієнт відкриває в папці файл від імені додатки, він запитує постійний дескриптор файлу. Коли SMB сервер отримує запит на відкриття файлу з постійним дескриптором, він звертається до фільтру Resume Key, щоб зберегти інформацію про дескрипторі файлу і унікальний ключ (resume key), наданий клієнтом.

Якщо відбувається заплановане переміщення програми на інший вузол кластера або збій вузла, до якого підключений SMB клієнт, то SMB клієнт намагається перепідключитися до іншого вузла кластера. Як тільки він перепідключитися до іншого вузла, то буде пробувати завершити розпочату на попередньому вузлі операцію, використовуючи resume key. Коли SMB сервер отримує resume key, він звертається до фільтру Resume Key, щоб відновити стан дескпрітора на момент, що передує збою. Resume Key так само захищає стан дескриптора після перемикання кластера, щоб забезпечити узгодженість простору імен і надати клієнту можливість перепідключитися до іншого вузла кластера. Додаток, запущене на стороні SMB клієнта, продовжує працювати без збоїв і помилок під час операції перемикання. З точки зору програми все виглядає так, як ніби сталася невелика зупинка в процесі читання / запису.

Для захисту від втрати даних в процесі запису в кеш, що знаходиться в нестабільному стані, постійний дескриптор файлу завжди відкритий для запису.

SMB працює поверх протоколу TCP. Таймаут для останнього становить зазвичай 20 секунд. Клієнт, перш ніж визначити, що стався збій на вузлі кластера, до якого він підключений, пропускає кілька TCP-пакетів. При цьому, відновлення працездатності додатки відбувається приблизно за 10 секунд, а не за 40 або 60 як можна було б припустити. Таке швидке відновлення забезпечується за рахунок сервісу-свідка.

Сервіс-свідок (Witness service)

Сервіс-свідок створювався з метою прискорити відновлення після непередбачених збоїв, він дозволяє SMB клієнтові не чекати таймаута TCP-сесії, а відразу перемикатися на робочий вузол. Новий сервіс-свідок ставиться автоматично при установці ролі відмов кластеру. Коли SMB клієнт з'єднається із сайтом кластера він повідомляє клієнт-свідок (Witness client), який запущено на тому ж комп'ютері. Клієнт-свідок отримує список вузлів кластера від сервісу-свідка, який працює на тому вузлі кластера, до якого відбулося підключення. Клієнт-свідок вибирає інший вузол кластера (з отриманого списку) і відсилає запит на реєстрацію сервісу-свідку на обраному вузлі кластера. Після цього сервіс-свідок на новому вузлі кластера починає відстежувати події, пов'язані з кластерізованний файловим сервером, до якого підключений SMB клієнт.

Якщо відбувається незапланований збій на вузлі кластера файлового сервера (до якого підключений SMB клієнт), сервіс-свідок на іншому вузлі кластера отримує повідомлення про це від служби відмов кластеру. Сервіс-свідок повідомляє про це клієнта-свідка, який, в свою чергу, повідомляє про те, що трапилося збої SMB клієнта. При отриманні повідомлення від сервісу-свідка SMB клієнт негайно починає процедуру перепідключення на інший вузол кластера, що значно прискорює відновлення після незапланованого збою.

Стан сервісу свідка можна подивитися через командлет Get-SmbWithnessClient:

Get-SmbWitnessClient | select ClientName, FileServerNodeName, WitnessNodeName

Запускається на одному з вузлів кластера. Параметр ClientName повертає ім'я SMB клієнта, FileServerNodeName - вузол кластера, до якого підключений клієнт, WitnessNodeName - вузол на якому зареєстрований клієнт-свідок.

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

Set-ItemProperty -Path "HKLM: \ SYSTEM \ CurrentControlSet \ Services \ Lanman \ Workstation Parameters" WitnessFlags -Value 1 -Force

Заборонити приймати незашифрований трафік на сервері-свідка можна наступним чином:

Set-ItemProperty -Path "HKLM: \ SYSTEM \ CurrentControlSet \ Services \ SMBWitness Parameters" Flags -Value 1 -Force

Вихідні документи:
SMB Transparent Failover - making file shares continuously available

Як працює?