none
Прощу помощи в настройке Cluster Shared Volumes RRS feed

  • Вопрос

  • Добрый день!

    Имееться 3 виртуальных машины на Hyper-V Server Core 2016: Два сервера 2016 с IIS и один сервер 2016 с MsSQL. Три виртуальных машины в рабочей группе (AD не создавал). В общем стоит задача настроить между IIS1 и IIS2 механизм load balansing, а так же использовать общее хранилище для IIS1 и IIS2 где будут расположены файлы сайтов.

    Так как я неимею SAN хранилица, как я понимаю, единственное решение использовать Cluster Shared Volumes. После прочтения кучи информации, в голове каша!!!! Подскажите мне план дейтсвий для запуска и использования функционала Cluster Shared Volumes: 1,2,3,4,5..... что бы в голове сформировалось представление о том какие этапы я должен выолнить.

    Заранее спасибо.



    26 октября 2017 г. 17:24

Ответы

  • Добрый день!

    Имееться 3 виртуальных машины на Hyper-V Server Core 2016: Два сервера 2016 с IIS и один сервер 2016 с MsSQL. Три виртуальных машины в рабочей группе (AD не создавал). В общем стоит задача настроить между IIS1 и IIS2 механизм load balansing, а так же использовать общее хранилище для IIS1 и IIS2 где будут расположены файлы сайтов.

    Так как я неимею SAN хранилица, как я понимаю, единственное решение использовать Cluster Shared Volumes. После прочтения кучи информации, в голове каша!!!! Подскажите мне план дейтсвий для запуска и использования функционала Cluster Shared Volumes: 1,2,3,4,5..... что бы в голове сформировалось представление о том какие этапы я должен выолнить.

    Заранее спасибо.



    Прежде всего, если поверить тому, что вы написали, то вы совершенно зря решили, что вам нужен Cluster Shared Volume. Потому что для него нужно:

    1. отказоустойчивый кластер (это - компонент Windows Server), для которого в свою очередь нужен
    2. домен AD Directory Services, а кроме того, для Cluster Shared Volume нужно
    3. общее хранилище - т.е. та самая SAN, которой у вас нет.

    Вообще-то (но это - не про ваш случай) в Windows Server 2016, но - исключительно в редакции Datacenter, есть средство для реализации общего хранилища на дисках, локально подключенных к серверам - Storage Spaces Direct, но для его работы сколь-нибудь помимо упомянутой редакции (недешёвой) требуется быстрая(1ГБ/сек на обычных сетевых адаптерах - маловато будет) сеть (а желательно - две, для отказоустойчивости) и, минимум, 3 сервера для отказоустойчивости. Однако, раз у вас серверы - виртуальные, то в качестве общего хранилища вместо SAN можно использовать Virtual Hard Disk Sharing, так что с п.3 вам легче (если, конечно, эти серверы работают на вашем гипервизоре, а не где-то в облаке).

    И последнее - Cluster Shared Volume хорошо подходит для поддержки нагрузок, использующих малое количество постоянно открытых больших файлов (виртуальные диски для Hyper-V, базы данных), но плохо - для использующих большое количество мелких файлов, постоянно открываемых и закрываемых (в частности - веб-сайт, а ещё - файловый сервер с документами пользователей). Скорее, для размещения содержимого веб-сайтов подошёл бы вариант кластерного файлового сервера общего пользования с обычным кластерным диском.

    Так что для хранения файлов сайта, вероятно, вам нужно использовать обычную общую папку, размещённую на файловом сервере (возможно, если есть требования к отказоустойчивости - в отказоустойчивом кластере - если наскребёте, из чего его делать, у вас таковое просматривается с трудом, только с помощью вложенной виртуализации). А если эти файлы меняются нечасто, и только при загрузке нового содержимого на сайт, а не механизмами самого сайта, то проще реплицировать содержимое с одного сервера на другой, например с помощью DFS Replication (это одна из служб роли File Server) или вообще чем-нибудь простым, вроде robocopy.

    Я стесняюсь спросить, зачем вам нужна балансировка сетевой нагрузки. Но если таки нужна, то она реализуется через соответствующий компонент в Windows Server. Только имейте в виду, когда будете прикидывать реализацию, что этот компонент несовместим с компонентом отказоустойчивого кластера. А ещё он имеет серьёзные ограничения при работе на виртуальной машине в среде Hyper-V. Другой вариант балансировки - это использование reverse proxy для публикации сайта наружу. В Windows Server это реализуется, например, с помощью IIS+ARR (дополнительно загружаемый компонент производства Microsoft): создаёте там ферму из обоих серверов и ARR будет послылать запросы на оба сервера.

    Как-то так.

    PS А ещё бы я на вашем месте не брался бы за решение задачи, которую я совершенно не представляю как решать и для которой нет стандартных методов решения в виде пошагового руководства: слишком легко провалить решение задачи.


    Слава России!

    26 октября 2017 г. 18:25
  • Здравствуйте, Руслан.

    В Вашем случае стоит попробовать решить балансировку нагрузки средствами ДНС-сервера. Раз уж у Вас есть Виндовс-сервера, то используйте ДНС от Микрософт.

    После установки роли ДНС в свойствах сервера по умолчанию включена фича "Enable round robin". Сделайте поиск на Гугле или Яндексе по этой фразе и найдёте подробное описание что это и как использовать для балансировки нагрузки.

    Впрочем, вот хорошая статья на русском языке http://pyatilistnik.org/chto-takoe-dns-round-robin-i-kak-on-rabotaet/

    PS если так поступите, не забудьте отключить рекурсию на сервере, иначе ваш сервер можно будет использовать в ДНС-атаках нехорошими людьми. Это там-же, "Disable recursion".

    И ещё. Необязательно использовать Микрософтовский ДНС, наверно любой современный ДНС-сервер умеет делать Round robin


    Не игнорируйте встроенную справку, читайте ее и большинство вопросов будет решено гораздо быстрее.


    27 октября 2017 г. 7:26

Все ответы

  • Добрый день!

    Имееться 3 виртуальных машины на Hyper-V Server Core 2016: Два сервера 2016 с IIS и один сервер 2016 с MsSQL. Три виртуальных машины в рабочей группе (AD не создавал). В общем стоит задача настроить между IIS1 и IIS2 механизм load balansing, а так же использовать общее хранилище для IIS1 и IIS2 где будут расположены файлы сайтов.

    Так как я неимею SAN хранилица, как я понимаю, единственное решение использовать Cluster Shared Volumes. После прочтения кучи информации, в голове каша!!!! Подскажите мне план дейтсвий для запуска и использования функционала Cluster Shared Volumes: 1,2,3,4,5..... что бы в голове сформировалось представление о том какие этапы я должен выолнить.

    Заранее спасибо.



    Прежде всего, если поверить тому, что вы написали, то вы совершенно зря решили, что вам нужен Cluster Shared Volume. Потому что для него нужно:

    1. отказоустойчивый кластер (это - компонент Windows Server), для которого в свою очередь нужен
    2. домен AD Directory Services, а кроме того, для Cluster Shared Volume нужно
    3. общее хранилище - т.е. та самая SAN, которой у вас нет.

    Вообще-то (но это - не про ваш случай) в Windows Server 2016, но - исключительно в редакции Datacenter, есть средство для реализации общего хранилища на дисках, локально подключенных к серверам - Storage Spaces Direct, но для его работы сколь-нибудь помимо упомянутой редакции (недешёвой) требуется быстрая(1ГБ/сек на обычных сетевых адаптерах - маловато будет) сеть (а желательно - две, для отказоустойчивости) и, минимум, 3 сервера для отказоустойчивости. Однако, раз у вас серверы - виртуальные, то в качестве общего хранилища вместо SAN можно использовать Virtual Hard Disk Sharing, так что с п.3 вам легче (если, конечно, эти серверы работают на вашем гипервизоре, а не где-то в облаке).

    И последнее - Cluster Shared Volume хорошо подходит для поддержки нагрузок, использующих малое количество постоянно открытых больших файлов (виртуальные диски для Hyper-V, базы данных), но плохо - для использующих большое количество мелких файлов, постоянно открываемых и закрываемых (в частности - веб-сайт, а ещё - файловый сервер с документами пользователей). Скорее, для размещения содержимого веб-сайтов подошёл бы вариант кластерного файлового сервера общего пользования с обычным кластерным диском.

    Так что для хранения файлов сайта, вероятно, вам нужно использовать обычную общую папку, размещённую на файловом сервере (возможно, если есть требования к отказоустойчивости - в отказоустойчивом кластере - если наскребёте, из чего его делать, у вас таковое просматривается с трудом, только с помощью вложенной виртуализации). А если эти файлы меняются нечасто, и только при загрузке нового содержимого на сайт, а не механизмами самого сайта, то проще реплицировать содержимое с одного сервера на другой, например с помощью DFS Replication (это одна из служб роли File Server) или вообще чем-нибудь простым, вроде robocopy.

    Я стесняюсь спросить, зачем вам нужна балансировка сетевой нагрузки. Но если таки нужна, то она реализуется через соответствующий компонент в Windows Server. Только имейте в виду, когда будете прикидывать реализацию, что этот компонент несовместим с компонентом отказоустойчивого кластера. А ещё он имеет серьёзные ограничения при работе на виртуальной машине в среде Hyper-V. Другой вариант балансировки - это использование reverse proxy для публикации сайта наружу. В Windows Server это реализуется, например, с помощью IIS+ARR (дополнительно загружаемый компонент производства Microsoft): создаёте там ферму из обоих серверов и ARR будет послылать запросы на оба сервера.

    Как-то так.

    PS А ещё бы я на вашем месте не брался бы за решение задачи, которую я совершенно не представляю как решать и для которой нет стандартных методов решения в виде пошагового руководства: слишком легко провалить решение задачи.


    Слава России!

    26 октября 2017 г. 18:25
  • Спасибо за развернутый ответ.

    В целом, эксперементрую с фукционалом, поэтому для начала хочу опробовать имеющиеся решения от microsoft, потестировать и понять что они из себя представляют.

    В целом, что мне нужно: Запустить свой WEB сайт на своих серверах. Задача стоит так: легко горизонтально расшираямая система, то есть имея 2 WEB сервера добавлять 3,4,...

    В целом решение этой задачи вижу так: 2...N физических серверов с простой конфигурацией: 2*SAS=Raid1 под OS гиппервизора, 2*SAS=Raid1 под файлы виртуальных OS, 2*SSD=Raid1 под WEB файлы, 4*SSD=Raid10 под файлы SQL базы данных (нагрузка на MSSQL будет не большой в основном на чтение). Далее, на каждом физическом сервере одна виртуальная машина с IIS и одна виртуальная машина c MsSQL.

    Балансировку нагрузки решил решать по средствам внешних услуг типа: CloudFlare или аналогичных.

    Сами сервера планирую разместить географически распределенно.

    Таким образом планирую получить не дорогое, отказоустойчивое и распеределнное по нагрузке решение для своего WEB сайта, а так же легкую возможность масштабирования.

    Что скажете, уважемый M.V.V. _?


    27 октября 2017 г. 7:00
  • Здравствуйте, Руслан.

    В Вашем случае стоит попробовать решить балансировку нагрузки средствами ДНС-сервера. Раз уж у Вас есть Виндовс-сервера, то используйте ДНС от Микрософт.

    После установки роли ДНС в свойствах сервера по умолчанию включена фича "Enable round robin". Сделайте поиск на Гугле или Яндексе по этой фразе и найдёте подробное описание что это и как использовать для балансировки нагрузки.

    Впрочем, вот хорошая статья на русском языке http://pyatilistnik.org/chto-takoe-dns-round-robin-i-kak-on-rabotaet/

    PS если так поступите, не забудьте отключить рекурсию на сервере, иначе ваш сервер можно будет использовать в ДНС-атаках нехорошими людьми. Это там-же, "Disable recursion".

    И ещё. Необязательно использовать Микрософтовский ДНС, наверно любой современный ДНС-сервер умеет делать Round robin


    Не игнорируйте встроенную справку, читайте ее и большинство вопросов будет решено гораздо быстрее.


    27 октября 2017 г. 7:26
  • Здравствуйте, Руслан.

    В Вашем случае стоит попробовать решить балансировку нагрузки средствами ДНС-сервера. Раз уж у Вас есть Виндовс-сервера, то используйте ДНС от Микрософт.

    После установки роли ДНС в свойствах сервера по умолчанию включена фича "Enable round robin". Сделайте поиск на Гугле или Яндексе по этой фразе и найдёте подробное описание что это и как использовать для балансировки нагрузки.

    Впрочем, вот хорошая статья на русском языке http://pyatilistnik.org/chto-takoe-dns-round-robin-i-kak-on-rabotaet/

    PS если так поступите, не забудьте отключить рекурсию на сервере, иначе ваш сервер можно будет использовать в ДНС-атаках нехорошими людьми. Это там-же, "Disable recursion".

    И ещё. Необязательно использовать Микрософтовский ДНС, наверно любой современный ДНС-сервер умеет делать Round robin


    Не игнорируйте встроенную справку, читайте ее и большинство вопросов будет решено гораздо быстрее.


    Спасибо за ответ. Боюсь что в данном случае один ДНС сервер будет узким местом, так как я не могу обеспечить отказоустойчивость данного сервера... в прочем как и каждого единичного WEB сервера, поэтому решил распложить несколько WEB серверов географически распределенными.

    Остаеться два вопроса: 1. синхронизация географически распределенных базы данных (тексты статей) 2. и синхранизация географически распределенных файлов сайта (например файлы с картинками)

    На основании какого функционала можно реализовать данное решение. Для баз данных думаю в сторону Microsoft Sync Framework.


    27 октября 2017 г. 10:28
  • Спасибо за ответ. Боюсь что в данном случае один ДНС сервер будет узким местом, так как я не могу обеспечить отказоустойчивость данного сервера... в прочем как и каждого единичного WEB сервера, поэтому решил распложить несколько WEB серверов географически распределенными.


    Как один? Невозможно же зарегистрировать интернет-домен не имея, минимум, двух ДНС-серверов?

    А если это ваш корпоративный домен, изолированный от Интернета, то ДНС-роль можно развернуть хоть на каждом сервере с IIS.

    Это я так, к слову. Решать то всё равно Вам, какую технологию выбирать.


    Не игнорируйте встроенную справку, читайте ее и большинство вопросов будет решено гораздо быстрее.

    27 октября 2017 г. 10:40
  • Спасибо за ответ. Штудирую cdn
    27 октября 2017 г. 11:49
  • Прошу прощения за мои слабые знания. Сейчас понял, что если моё доменное имя зарегистрированное у регистратора r01, то я должен вписать туда запись типа A с указанием IP адреса, либо адреса своих DNS серверов, например: dns1.mydomain.ru и dns2.mydomain.ru. Запрос от регистратора, в таком случае, рекурсивно уйдет на мой первый DNS сервер, далее есл он доступен, он в режиме round robin выдаст один из IP адресов? Если первый DNS сервер не доступен, то пользователь получит IP адреса со второго DNS сервера. Правильно я понимаю?

    С уважением Руслан.

    27 октября 2017 г. 12:16
  • Прошу прощения за мои слабые знания. Сейчас понял, что если моё доменное имя зарегистрированное у регистратора r01, то я должен вписать туда запись типа A с указанием IP адреса, либо адреса своих DNS серверов, например: dns1.mydomain.ru и dns2.mydomain.ru. Запрос от регистратора, в таком случае, рекурсивно уйдет на мой первый DNS сервер, далее есл он доступен, он в режиме round robin выдаст один из IP адресов? Если первый DNS сервер не доступен, то пользователь получит IP адреса со второго DNS сервера. Правильно я понимаю?

    С уважением Руслан.

    В целом да правильно, но если географически разносить сервера DNS round robing не лучший подход в реализации высокой доступности. 

    RR будет возвращать 2 адреса клиенту постоянно их перемешивая, но в случае если один или несколько из ваших WEB ресурсов будут недоступны клиенту нужно будет рефрешить страницу несколько раз что бы получить результат.

    RR ничего не знает о том жив ресурс с той стороны или нет.

    Так же есть второй вопрос - время ответа клиенту. Чем дальше ваш сервер от клиента, тем долше он будет ждать ответ (при прочих равных условиях). В таком случае резонно отвечать с того сервера который ближе к клиенту (коль уж они у вас разнесены географически). Сторонние провайдеры услуг по типу клаудфлары часто такой функционал поддерживают.


    The opinion expressed by me is not an official position of Microsoft

    27 октября 2017 г. 18:43
    Модератор