Создание кластерного Multi-writer диска в VMware ESXI
Доброго времени суток! Многоуважаемые инженеры по виртуализации, рад, что вы вновь посетили профильный блог Pyatilistnik.org. В прошлый раз мы с вами подробно разобрали механизм применения утилиты Robocopy и научились с ее помощью реализовывать всевозможные сценарии копирования данных. Сегодня я бы хотел вам рассказать, о создании общих дисков (Multi-writer) в VMware ESXI 5.5, 6.5 и выше, для кластерных решений Oracle RAC и Microsoft MSCS кластер.В век виртуализации, данная информация все больше становится актуальней.
Что такое общий диск Multi-writer в VMware ESXI
Сейчас уже очень сложно себе представить серьезный сервис без отказоустойчивости, которая может быть реализована на разных уровнях работы инфраструктуры. Очень частым решением выступает отказоустойчивый кластер, который подразумевает использование разных серверов для одного сервиса. Выход из строя одного из серверов не влияет на работоспособность предоставляемых услуг клиентам. Очень часто в кластерах используются общие диски, для хранения баз данных (Microsoft SQL или Oracle), файловые ресурсов. Общие диски могут презентованы, как отдельные LUN с СХД, через ISCSI протокол, через общий диск или RDM в случае с виртуальными машинами.
В данной заметке я опишу реализацию с помощью общего диска для виртуальных машин VMware ESXI 6.5. В некоторых случаях (как правило, в сценариях кластеризации) может потребоваться совместное использование одного и того же диска между двумя (или более) виртуальными машинами. Наиболее оптимальным способом является использование диска vmdk, физически расположенного на общем хранилище или локально на хосте ESXi. Если вы хотите использовать общие диски на разных хостах ESXi, то вы можете использовать только разделяемое хранилище
.На представленной ниже схеме вы видите:
- Storage Array, по сути это ваша система хранения данных, на которой реализован RAID массив, по рекомендации производителя.
- RAID массив порезан на LUN, это логически порезанное место на вашей системе хранения данных
- Далее LUN презентуется хостам VMware ESXI 6.5 и размечается файловой системой VMFS 6. Где из LUN получаются разделы (Datastore-Volume) для гипервизора.
- Далее на на Datastore уже разворачиваются виртуальные машины
Вот на таком общем VMFS Volume диске вы создаете общий VMDK диск, который будет доступен двум и более виртуальным машинам под чтение и запись. Сами виртуальные машины могут находится на разных физических хостах и разных географических локациях.Такой режим называется Multi-Writer VMDK, его часто применяют в построении кластеров MS SQL, Oracle RAC, такой режим работы диска применяется в технологии VMware Fault Tolerance.
Для чего применяют Multi-Writer диск
- Во первых, как я и писал выше для отказоустойчивости различных сервисов, сервера которых могут быть в разных ЦОДах.
- Во вторых для возможности обслуживания важных серверов, без их простаивания. Например, чтобы была возможность своевременно производить обновление Windows пакетов, другого программного обеспечения, иметь возможность перезагружать сервер
- В целях тестирования кластерных технологий, когда у вас нет СХД и нет возможности реализовать общий диск, по FC или ISCSI протоколу
Ограничения общих дисков VMware ESXI
Без некоторых нюансов все же не обошлось, хочу выделить некоторые ограничения при использовании общих дисков:
Например, при попытке сделать Storage vMotion вы получите ошибку:
Если нужно будет мигрировать, то придется выключать виртуалку.
- Вы не сможете на живую произвести расширение дисков, при попытке вы получите вот такую ошибку:
- Если вы вдруг разметите оба диска в NTFS на двух хостах и попытаетесь на них писать, создав на одном одну папку, а на втором вторую, то хосты эти папки не увидят, каждый свою, учтите, это вам не общий диск с синхронизацией файлов, Multi-Writer VMDK именно нужен для кластеризации.
Как подключить общий диск в VMware ESXI 6.5 и выше
Предположим, что общее внешнее хранилище (подключенное к каждому хосту ESXi с использованием iSCSI или Fibre Channel SAN) уже представлено всем хостам VMWare ESXi, на которых запущены виртуальные машины, которым вы хотите добавить общий виртуальный диск. На обеих виртуальных машинах вам нужно добавить новый контроллер SCSI. Объясню для чего нужно добавлять новый SCSI Controller. Когда вы создаете новую виртуальную машину ESXI у вас по умолчанию уже будет один LSI Logic SAS контроллер (SCSI Controller), но он работает во первых в режиме SCSI Bus Sharing "None", то есть не работает с общими дисками VMDK, это можно поправить при выключенной машине, но VMWare не рекомендует совмещать при работе обычных дисков и Multi-Writer VMDK дисков на одном LSI Logic SAS контроллере.
Поэтому нам первым делом необходимо в свойствах виртуальной машины добавить новый SCSI Controller.
Если посмотреть подсказку у LSI Logic SAS контроллера, то вы увидите три его режима:
- None - для работы с не кластерными Multi-Writer дисками
- Physical - виртуальные диски могут быть общими для виртуальной машины и физическим сервером
- Virtual - для работы с общим диском для нескольких виртуальных машин
Делается это через пункт "New Device" и нажатии кнопки Add, для SCSI Controller.
Далее у нового, добавленного контроллера вы в пункте "SCSI Bus Sharing" выберите тип "Virtual". Можете сохранить конфигурацию виртуальной машины, через нажатие кнопки "Ок"
Далее на первой машине, где мы только что добавили новый контроллер, вам нужно создать новый виртуальный диск, делается это так же, через пункт "New Device"
Откройте параметры нового виртуального диска. Для того, чтобы сделать его общим между виртуальными машинами VMware ESXI, вам необходимо выставить соответствующие настройки:
- Disk Provisioning - Делает толстый диск с занулением "Thick provision Eager zeroed thick disks", нужен для кластеризации, о типах дисков ESXI, читайте по ссылке.
- Sharing - тут вы как раз выбираете режим общего диска "Multi-Writer"
- Disk Mode - режим работы диска выставите "Independent Persistent" (Подробнее про режимы работы ESXI дисков), данный режим работы не позволит использовать vStorage APIs, что не даст создавать на таком диске снапшоты. Данный режим рекомендуется самим вендором VMware и его партнерами, такими как Oracle. Если бы мы разрешили создание снимков на этом диске, то это могло бы привести к потере данных. Так если у вас на этом диске быдет база SQL и вы будите использовать Veeam Backup, то у ваших резервных копий на уровне самого SQL могут быть проблемы при восстановлении из них, так как точка отсчета с которой нужно будет выстраивать цепочку бэкпов будет нарушена Veeam, который сдвинет точку бэкапа на себя. Если выставлен Independent Persistent, то в Veeam при создании бэкапа этой виртуальной машин можно исключить нужные диске, где стоят SQL или Oracle.
- Virtual Device Node - выберите наш новый LSI Logic SAS контроллер, работающий в режиме "SCSI Bus Sharing Virtual"
Далее я для своего удобства, хочу чтобы общие диски лежали в отдельной папке, а так как они по умолчанию создаются в папке с виртуальной машиной да и еще имеют имя дисков, как имя машины_цифра, я бы такое хотел поправить. Для этого я в конфигурации виртуальной машины удаляю все созданные диски, но я не ставлю галку "Delete files from datastore", то есть по сути на датасторе они остаются.
Далее я иду на датастор на котором находится виртуальная машина с общими дисками (Datastore - Browse Files).
Нахожу нужные мне Multi-Writer диски. Создаю новую папку
И перемещаю в новую папку общие диски, хочу отметить, что вы их можете переместить на любой общий между хостами ESXI датастор.
Я делаю "Move to" на тот же латасторе, но в новую папку. Этим я добьюсь, что буду видеть явным образом общие кластерные диски.
Так как я диски до этого удалил, для удобства, то мне их нужно заново добавить. Если вы до этого не удаляли, то сделайте эти действия только для второй виртуальной машины. Открываем настройки виртуальной машины и нажимаем добавить новое устройство, выбираем пункт "Existing Hard Disk", это у нас выбор существующего общего кластерного диска.
Указываем на каком датасторе у нас лежит Multi-Writer диск и выбираем нужный VMDK, в моем случае их семь.
Выставляем нужные параметры:
- Disk Provisioning - "Thick provision Eager zeroed thick disks"
- Sharing - "Multi-Writer"
- Disk Mode - "Independent Persistent"
- Virtual Device Node - выберите наш новый LSI Logic SAS контроллер, работающий в режиме "SCSI Bus Sharing Virtual"
Если такой диск не один, то добавляем все за один раз для экономии времени. Проделываем такое добавление общих дисков на всех виртуальных машинах, где планируется использовать Multi-Writer.
Далее уже в операционной системе Windows Server, зайдя в оснастку "Управление дисками" вы обнаружите ваши диски. Остается их только разметить в GPT формат и отдать под кластер.
Включение общего диска для ESXI 5.5 и ниже
В более ранних версиях гипервизора Vmware ESXI 5.5 и ниже, общий кластерный диск выключается таким образом. Вы заходите так же в свойства виртуальной машины и добавляете там новый SCSI Controller с типом работы "Virtual".
Затем вы создаете новый диск, указываете его размер и тип Thick Provision Eager Zeroed.
Далее Vmware ESXI 5.5 попросит вас выбрать Выбор LSI Logic SAS контроллер, обязательно укажите тот, что мы создали заранее и запомните порт SCSI к которому вы его подключаете в моем примере, это SCSI (1:0).
Далее в настройках виртуальной машины вам необходимо перейти на вкладку "Option - General" и нажать кнопку "Configuration Parameters".
В самом конце для каждого общего диска пишем в имени номер SCSI порта SCSI1: 0.sharing в поле "Value" пишем multi-writer.
Для второй виртуальной машины делаем те же действия, единственное на этапе создания диска, выбираем пункт существующего "Use an existing virtual disk"
Через кнопку "Browse" указываем путь до него.
Выбираем сам VMDK диск. После чего не забываем так же прописать на вкладке "Option - General" и нажать кнопку "Configuration Parameters", для каждого общего диска пишем в имени номер SCSI порта SCSI1: 0.sharing в поле "Value" пишем multi-writer.
Включение Multi-Writer VMDK через SSH
- Выключите виртуальную машину.
- Войдите на хост ESXi по ssh, на котором расположена виртуальная машина.
- Перейдите к конфигурационному файлу виртуальной машины ( VM_name.vmx) (расположенному в /vmfs/volume/datastore_name/vm_name).
- Всегда рекомендуется создать резервный файл .VMX перед внесением изменений в файл конфигурации виртуальной машины. Вы можете создать резервную копию с помощью команды ( CP VM_name.vmx VM_name.VMX.bak )
- Откройте и отредактируйте исходный .vmx-файл с помощью текстового редактора, такого как редактор VI. Введите «i», чтобы начать вносить изменения.
- Добавьте эту запись в конец .vmx-файла: SCSI0: 1.sharing = "multi-writer" , для каждого диска отдельная запись
- Закройте и сохраните файл .vmx, используя (: wq)
НА CentOS 7 посмотреть общие диски можно командой cat VM_Name.VMX | grep multi-writer. Надеюсь, что я подробно и доступно объяснил, о общих кластерных дисках, используемых в VMware ESXI. С вами был Иван Семин, автор и создатель портала Pyatilistnik.org.
Добрый день. Спасибо за статья!
Я так понял что рекомендации Vmware — Disk Mode — режим работы диска выставите «Independent Persistent» для дисков где базы SQL, Oracle и скорее всего Postgress. Получается для данного диска не будут делаться снэпшоты? А разве Veritas, и Veeam при резервном копировании Виртуальной машины не используют снэпшоты? А как тогда сделать полную копию виртуальной машины?
Да снапшотов делаться не будет. Виртуальную машину вы можете бэкапить с установленным внутрь ОС агентом, но лучше бэкапить системный диск, а остальное средствами БД, так правильнее.
Встал вопрос, а как расширить такой диск?
По идее на живую, но если не дает, то придется выключать обе vm и потом расширять на активной, сейчас тестового стенда нет, так что проверить не могу.
Добрый день. Попробовал добавить созданный диск к виртуалке. Но про добавлении существующего диска невозможно выбрать параметры диска (выпадающие списки пустые).