Налаштування NLB в Windows Server 2012.
Компонент балансування мережного навантаження (Network Load Balancing, NLB) в Windows Server 2012 розподіляє мережевий трафік по декількох серверах за допомогою протоколу TCP/IP. Групуючи два і більше сервера в єдиний віртуальний кластер, NLB підвищує доступність і масштабованість серверних додатків.
NLB вміє виконувати балансування навантаження будь-яких додатків і служб, які використовують мережевий протокол TCP/IP і пов'язаних з певним TCP- або UDP-портом. Використовувати балансування мережевого навантаження доцільно для забезпечення роботи додатків, які виконуються без урахування стану, наприклад для веб-, FTP- або служб віддалених робочих столів (Remote Desktop).
Також NLB може стати в нагоді і в менш очевидних ситуаціях. Наприклад, за допомогою цього механізму можна забезпечити підвищену надмірність веб-серверів front-end на базі SharePoint 2010, а при використанні Exchange 2010 вирівнювання мережевого навантаження можна застосовувати з метою створення CAS-масивів для ролі сервера клієнтського доступу (Client Access Server).
Принцип роботи
Кластер NLB вдає із себе групу серверів, які називаються вузлами кластера. На кожному вузлі виконується власна копія додатку. Механізм NLB займається тим, що розподіляє вхідні запити між вузлами відповідно до заданих правил. При цьому можна налаштувати навантаження для кожного вузла, а якщо потрібно обробити додаткове навантаження, вузли можна додавати до кластеру динамічно.Крім того, технологія балансування мережного навантаження може направляти весь трафік на один певний вузол, званий вузлом за замовчуванням.
NLB дає можливість звертатися до всіх серверів в кластері за єдиним IP-адресою, а також підтримує набір унікальних IP- адрес для кожного вузла.При збої на вузлі або його відключенні навантаження автоматично перерозподіляється між працюючими серверами. При раптовому відключенні всі активні підключення до такого серверу будуть втрачені, проте якщо робота вузла завершується навмисно, є можливість обслужити всі активні підключення до відключення комп'ютера.У будь-якому випадку відключений комп'ютер, коли він буде готовий до роботи, може знову приєднатися до кластеру в робочому режимі і взяти на себе частину навантаження, що дозволить знизити обсяг даних, що припадає на інші вузли кластера.
Все вузли NLB кластера обмінюються повідомленнями пульсу (heartbeat) для узгодження даних про членство в кластері.За замовчуванням, якщо вузол не відправляє повідомлень пульсу протягом п'яти секунд, це вважається збоєм. При збої на вузлі інші вузли кластера починають процес сходження (converging):
• виявляють вузли, що залишилися активними членами кластеру;
• призначають вузол з найвищим пріоритетом вузлом за замовчуванням;
• забезпечують обробку нових запитів клієнтів працюють вузлами.
В процесі сходження працюють вузли шукають регулярні повідомлення пульсу. Якщо вузол, на якому стався збій, починає передавати повідомлення пульсу регулярно, він знову приєднується до кластеру в процесі сходження. Коли до кластеру намагається приєднатися новий вузол, він передає свої повідомлення пульсу, які теж запускають сходження.Після того як всі вузли кластера домовляться між собою по членству в кластері на даний момент, навантаження від клієнтів перерозподіляється між вузлами, що залишилися в результаті, і сходження завершується.
Сходження зазвичай триває кілька секунд, тому перерва в роботі клієнтських служб виявляється незначним.Під час сходження вузли, що залишилися активними, продовжують обробку клієнтських запитів без зміни в наявних підключеннях. Сходження завершується, коли всі вузли однаково описують членство в кластері і схему розподілу протягом декількох періодів пульсу.
Установка
NLB встановлюється як стандартний компонент Windows і не вимагає для запуску і роботи будь-яких змін в обладнанні. Проте при плануванні NLB кластера необхідно врахувати деякий моменти:
• У кластер може входити до 32 вузлів;
• Всі вузли кластера повинні розташовуватися в одній підмережі;
• Кількість мережевих адаптерів на кожному вузлі не обмежена, при цьому різні вузли можуть мати різну кількість адаптерів;
• Всі мережеві адаптери в одному кластері необхідно використовувати або в одноадресна (Unicast), або в багатоадресну (Multicast) режимі.Балансування мережевого навантаження не підтримує змішану середу одноадресної і під LGPL всередині одного кластера;
• При використанні одноадресна режиму мережевий адаптер, задіяний для потреб кластера, повинен підтримувати програмне зміна MAC-адреси;
• Мережевий адаптер, на якому включається NLB, може використовувати тільки протокол TCP/IP.Не можна додавати для цього адаптера інші протоколи (наприклад IPX);
• IP-адреси серверів в складі кластера повинні призначатися статично. NLB не підтримує протокол DHCP і відключає його на кожному розширеному інтерфейсі;
• NLB не працює спільно зі службою Failover Clustering.Якщо сервер є частиною відмов кластеру, то задіяти на ньому балансування мережевого навантаження не вийде.
Якщо всі умови дотримані, то приступаємо до розгортання кластера. Насамперед необхідно встановити сам компонент балансування мережного навантаження.Для цього відкриваємо Server Manager і запускаємо майстер установки ролей і компонентів. Переходимо на вкладку Features і відзначаємо компонент Network Load Balancing.
Також NLB можна встановити за допомогою PowerShell , за допомогою такої команди:
Install-WindowsFeature -Name NLB -IncludeManagementTools
Створення нового NLB кластера
Встановивши компонент NLB приступимо до створення кластера, для чого скористаємося оснащенням Network Load Balancing Manager.Відкрити її можна з Server Manager, якшо по кнопці Tools і вибравши відповідний пункт меню. Як варіант, можна натиснути Win + R і ввести команду nlbmgr.
Для створення нового кластера в NLB Manager вибираємо пункт Cluster -> New.
У вікні вказуємо ім'я (або IP- адреса) комп'ютера, якому належить стати першим вузлом кластера і тиснемо «Connect».Вибираємо мережевий інтерфейс, який буде задіяний для потреб кластера.
Примітка. Балансування мережевого навантаження може бути прив'язана до декількох мережевих адаптерів, що дозволяє налаштувати декілька незалежних NLB-кластерів на кожному вузлі. Підтримка декількох мережевих адаптерів - це не те ж саме, що віртуальні кластери, в яких можна налаштовувати кілька кластерів на одному мережевому адаптері.
Далі йдуть настройки вузла:
• Задаємо унікальний ідентифікатор вузла (unique host identifier). Це дуже важливий параметр, за допомогою якого встановлюється пріоритет при обробці трафіку. Вузол з найменшим host ID серед членів кластера на даний момент обробляє весь мережевий трафік кластера, не передбачений правилами для порту;
• Вказуємо виділений IP-адреса (Dedicated IP, DIP) - унікальна адреса вузла, за яким він буде доступний в мережі;
• Визначаємо дефолтний стан (Default state) вузла - запущений (Started), зупинено (Stopped) або припинений (Suspended) і вказуємо, чи належний вузол зберігати цей стан при перезавантаженні.
Задаємо віртуальний IP-адрес кластера (Virtual IP, VIP) - адреса, який буде спільно використовуватися всіма вузлами в кластері. NLB додасть цей IP-адреса в стек протоколів TCP/IP на обраному інтерфейсі всіх вузлів, що вводяться до складу кластера. При необхідності для одного мережевого інтерфейсу можна вказати кілька IP-адрес.
Йдемо далі.
Задаємо ім'я кластера (Full Internet name) відповідне вказаною IP-адресою. В принципі це ім'я ні на що не впливає, але правильніше буде вписати сюди FQDN-имя, за яким клієнти будуть звертатися до кластеру. Також не забудьте створити в DNS відповідний запис.
Вказуємо режим роботи кластера, який визначає, чи буде для операцій кластера використовуватися вбудований MAC-адресу адаптера:
одноадресна (Unicast) - У цьому режимі вбудований MAC-адресу фізичного мережевого адаптера відключається і замінюється МАС-адресою віртуального адаптера кластера.Обидва IP-адреси сервера (виділений IP-адреса сервера і IP-адрес кластера) вирішуються в один єдиний МАС-адрес кластера.
При використанні одноадресна режиму всіх вузлів кластера призначається один і той же IP та MAC-адресу . Оскільки всі вузли кластера поділяють один MAC-адресу, а оригінальний MAC-адресу адаптера не використовується, використовувати адаптер кластера для інших цілей крім кластерних (наприклад для управління сервером) стає проблематично.Цю проблему можна обійти, використовуючи кілька мережевих адаптерів: один для кластерного трафіку, другий для управління.
багатоадресну (Multicast) - У цьому режимі NLB перетворює MAC-адресу кластерного адаптера на адресу групи. IP-адрес кластера дозволяється в цю адресу групового розсилання, а виділений IP-адреса сервера - в оригінальний MAC-адресу адаптера.
При цьому у адаптера залишається оригінальний, вбудований MAC-адресу, що дає можливість використовувати обидва IP-адреси: кластера для трафіку клієнт-кластер, а виділений для решти мережевого трафіку, специфічного для комп'ютера. Зверніть увагу, що режим Multicast обов'язково повинен підтримуватися мережевим обладнанням, крім того може знадобитися додаткова настройка на комутаторі.
багатоадресну IGMP (IGMP Multicast) - багатоадресну режим з підтримкою протоколу групової передачі даних (Internet Group Management Protocol, IGMP). Включення підтримки IGMP дає можливість обмежити широкомовний трафік, тобто забезпечити проходження трафіку до NLB-кластеру тільки через порти, обслуговуючі вузли кластера, а не через всі порти комутатора.Для забезпечення цього режиму необхідно включити підтримку IGMP на мережевому обладнанні.
Примітка. Всі вузли кластера повинні працювати в одному режимі - або в одноадресна, або в багатоадресну. NLB не підтримує змішану середу одноадресної і під LGPL всередині одного кластера.
Переходимо до наступного екрану. Налаштування правил портів (Port Rules) зараз проводити не будемо, тому просто тиснемо «Finish». Перший етап створення NLB кластера завершено.
Додавання вузла в кластер
Отже, ми маємо NLB кластер, що складається з одного вузла. Додамо інші.Kлікаем на імені кластера правою клавішею і вибираємо пункт «Add Host To Cluster».
Процедура додавання практично аналогічна попередній. Вказуємо ім'я сервера, тиснемо «Connect» і вибираємо мережевий інтерфейс, який буде використовуватися кластером.
задаємо host ID і вказуємо виділений IP-адреса вузла, а також стан вузла за замовчуванням.
І тиснемо «Finish». Таким же чином додаємо решту сервера в кластер.
Створити кластер і додати в нього вузли можна і за допомогою PowerShell. Команда для створення кластера:
New-NlbCluster -ClusterName nlb.contoso.com -InterfaseName "Ethernet"
-ClusterPrimaryIP 192.168.0.10 -SubnetMask 255.255.255.0
-OperationMode Unicast -Force
Для додавання вузла в кластер:
Get-NlbCluster | Add-NlbClusterNode SRV5.contoso.com -NewNodeInterface "Ethernet" -Force
В результаті у нас вийшов NLB кластер, що складається з трьох вузлів.
Налаштування параметрів кластера
Після додавання всіх вузлів можна приступати до налаштування кластера.Натискаємо правою клавішею на імені кластера та переходимо на пункт «ClusterProperties».
На вкладці Cluster IP Addresses можна змінити існуючу адресу кластера або додати новий. Балансування мережного навантаження дозволяє налаштувати для одного кластера кілька IP-адрес, для кожної адреси призначити власне ім'я і налаштувати правила обробки трафіку.Для цього не потрібно виділяти окремий адаптер, так що можна налаштовувати кілька віртуальних NLB кластерів на одному мережевому адаптері.
На вкладці Cluster Parameters можна налаштувати відповідність імені та IP-адреси кластера і змінити режим його роботи.
І на вкладці Port Rules налаштовуються правила обробки трафіку усіма вузлами кластера.При створенні кластера створюється правило за замовчуванням, яке треба змінити, тому виділяємо його і тиснемо «Edit».
правило порту включає в себе наступні настройки:
Cluster IP Addresses - IP-адрес кластера, для якого діятиме це правило. За замовчуванням відзначений чекбокс All, що означає вплив даного правила на всі адреси в кластері.
Port Range - діапазон портів, на яких буде оброблятися трафік кластера. За замовчуванням вказані всі порти, що не дуже правильно. Наприклад, якщо у вас кластерізованний веб-додаток, що використовує для клієнтського доступу порт 80 TCP, то вказуємо цей порт як початок і кінець діапазону.Якщо потрібно вказати кілька портів, то для кожного доведеться створити окреме правило.
Protocols - протоколи, до яких буде застосовуватися дане правило: TCP, UDP або обидва.
Filtering Mode - режим фільтрації . Тут ми вказуємо, як саме буде оброблятися трафік кластера. Можна вибрати з двох режимів:
1) Multiple host - трафік за вказаними портів буде розподілятися серед всіх вузлів кластера.В цьому випадку потрібно вибрати режим подібності (affinity), який визначає прив'язку клієнта до певного вузла кластера:
- None - прив'язка не використовується. Всі нові сполуки розподіляються за різними вузлів в залежності від навантаження;
- Single - прив'язка здійснюється по IP-адресою клієнта.Після того, як клієнт здійснив підключення до певного вузла кластера, протягом встановленого сеансу все нові сполуки з його IP будуть спрямовані на той же вузол кластера;
- Network - прив'язка заснована на приналежності клієнта до певної приватної підмережі. Коли один клієнт встановлює з'єднання до деякого вузла, всі з'єднання з цієї підмережі будуть спрямовані на той же вузол.
Також зверніть увагу на чекбокс Timeout minutes. Установка галки включає режим розширеного подібності (Extended Affinity), який забезпечує прив'язку за відсутності активних поточних підключень від клієнта до вузла, а також дозволяє клієнтам зберігати відповідність з вузлом при зміні конфігурації кластера.Тут ми можемо вказати час, протягом якого клієнт буде прив'язаний до певного вузла при відсутності активного поточного підключення з його боку.
2) Single host - весь трафік за вказаними портів буде оброблятися одним вузлом кластера, а якщо цей вузол недоступний - то спрямований на наступний вузол, який вираховується за номером Handling Priority (пріоритет обробки).Пріоритет надається вузлу при додаванні сервера в кластер і може бути змінений у властивостях вузла.
Disable this Port Range - відзначивши цей пункт, ми заборонимо обробку трафіку для вибраних портів. Як я вже говорив, весь мережевий трафік, який не підпадає під дію правил портів, обробляється чинним вузлом кластера з мінімальним ідентифікатором хоста.Щоб уникнути непотрібного навантаження, весь нецільової трафік можна заборонити. Так у випадку з 80 портом досить створити 2 правила і заборонити весь трафік на портах 0-79 і 81-65535.
При створенні правил порту потрібно врахувати, що:
• Правила на всіх вузлах кластера повинні бути ідентичні.При спробі приєднати до кластеру вузол з іншими правилами або з іншим числом правил він не буде прийнятий в кластер;
• Щоб балансування мережного навантаження коректно обробляла IP-фрагменти, не слід використовувати значення None для подібності, якщо обраний протокол UDP або Both ;
• Якщо NLB використовується для балансування навантаження трафіку VPN (напр.PPTP/GRE або IPSEC/L2TP), то для правил порту використовуйте режим подібності Single або Network.
Налаштування параметрів окремого вузла
Крім настройки всього кластера є можливість налаштовувати параметри окремих його вузлів. Для цього вибираємо вузол, натискаємо на ньому правою клавішею і вибираємо «Host Properties».
У вікні Host Parameters ми зможемо:
• Змінити ідентифікатор вузла , змінивши тим самим його пріоритет при обробці нецільового трафіку;
• Познущатися над його виділеним IP - змінити, видалити або додати новий. До речі, виділений IP-адреса для роботи NLB зовсім не обов'язковий, і при бажанні його можна взагалі не використовувати;
• Змінити дефолтний стан вузла.Так за замовчуванням після перезавантаження вузол відразу стартує і починає обробляти клієнтські підключення. Змінивши дефолтний стан вузла на Stopped і вказавши зберігати цей стан, тим самим ми попередимо автоматичний старт і початок обробку клієнтських підключень сервером після перезавантаження.Це може знадобитися для перевірки коректності роботи сервера, наприклад після установки оновлень.
Також заглянемо в правила портів. Тут нас цікавлять два пункти:
Load Weight - відсоток навантаження. У режимі фільтрації Multiple Hosts параметр Load Weight використовується для того, щоб задати відсоток трафіку, який повинен оброблятися цим вузлом за відповідним правилом.За замовчуванням використовується варіант Equal, при якому відбувається рівномірний розподіл навантаження між усіма вузлами кластера. Щоб задати для вузла певний відсоток, потрібно прибрати галку і вказати значення від 1 до 100. Значення 0 взагалі виключає даний вузол з обробки трафіку.
Зверніть увагу, що сума значень Load Weight для кожного вузла параметра не обов'язково повинна складати 100 відсотків. Реальна частина трафіку для кожного вузла розраховується динамічно як частка від ділення відсотка, заданого для вузла, на сумарний відсоток для всього кластера.
Handling Priority - пріоритет обробки трафіку в режимі фільтрації Single host. Цей параметр вказує пріоритет вузла для трафіку по даному правилу. Вузол з найбільш високим пріоритетом буде обробляти весь трафік для цього правила, а при його відсутності трафік буде перенаправлений на наступний за пріоритетністю вузол.Чим менше значення Handling Priority, тим вище пріоритет, значення 1 відповідає найбільш високому пріоритету.
Управління кластером
І трохи про управління кластером NLB. Управління можна здійснювати як на рівні окремого вузла, так і на рівні всього кластера.Для управління вузлом натискаємо на ньому і вибираємо «Control Host». Далі на вибір, можна:
• Start - запустити обробку трафіку на даному вузлі;
• Stop - зупинити обробку трафіку на даному вузлі. При цьому всі поточні з'єднання будуть закриті;
• Drainstop - зупинити обробку трафіку на вузлі, попередньо обробивши всі поточні підключення.У цьому варіанті зупинки вузол обробляє поточні клієнтські підключення, але не приймає нових;
• Suspend - призупинити обробку трафіку на даному вузлі;
• Resume - відповідно відновити припинену роботу.
Для того , щоб зовсім видалити вузол з кластера, треба вибрати пункт «Delete Host».
Вибравши пункт «Control Ports» можна керувати процесом правил: включити (Enable), відключити ( Disable) або призупинити обробку нових підключень (Drain). Це може знадобитися для того, щоб тимчасово виключити вузол з обробки трафіку кластера, наприклад з метою діагностики.
Все той же на рівні кластера - натискаємо на імені кластера та вибираємо «Control Hosts». Тут зміни застосовуються вже до всіх вузлів.
На закінчення декілька порад, які можуть стати в нагоді при налаштуванні NLB кластера.
1) Не дивлячись на назву, NLB не відслідковує реальну завантаження (споживання процесорного часу, пам'яті, дискової підсистеми і т.д.) на кожному вузлі. Під навантаженням в NLB мається на увазі тільки кількість активних підключень до вузла. Враховуйте цей момент при налаштуванні розподілу навантаження.
2) NLB не забезпечує відмовостійкість клієнтських додатків. Механізм NLB відстежує тільки наявність сигналів heartbeat між вузлами, моніторинг окремих служб він не здійснює.Простіше кажучи, якщо на одному вузлі кластера відвалиться клієнтський сервіс, а мережевий інтерфейс залишиться доступний, то NLB цього не помітить і продовжить відправляти клієнтів на непрацездатний вузол.
3) Як у режимі Unicast, так і в Multicast (за винятком IGMP ) трафік кластера поширюється по всіх портах комутатора.Щоб ізолювати цей широкомовний трафік, всі IP адреси кластера бажано винести в окрему підмережу.
4) Всупереч розхожій думці режим Unicast можна використовувати навіть при наявності одного мережевого адаптера на вузлі. При цьому вузли цілком нормально можуть спілкуватися між собою, так як NLB перетворює ARP-таблицю всередині кожного вузла, призначаючи кожному вузлу унікальний MAC-адресу.А ось зовні підключитися до вузла кластера не вийде, для управління вузлом до нього необхідний фізичний доступ або механізм віддаленого управління типу iLo від HP.