it-roy-ru.com

Можно ли подключить Amazon EBS к нескольким экземплярам?

В настоящее время мы используем несколько веб-серверов для доступа к одному серверу MySQL и файловому серверу. Глядя на переход в облако, могу ли я использовать эту же настройку и подключить EBS к нескольким экземплярам машины или каково другое решение? 

127
bonez05

ОБНОВЛЕНИЕ (апрель 2015 г.): для этого варианта использования вы должны начать искать новую Amazon Elastic File System (EFS) , которая разработана для множественного присоединения именно так, как вам нужно. Основное различие между EFS и EBS заключается в том, что они предоставляют различные абстракции: EFS предоставляет протокол NFSv4, тогда как EBS предоставляет доступ к необработанным блокам IO. 

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


ORIGINAL POST (2011):

Даже если вы сможете подключить том EBS к нескольким экземплярам, ​​это будет _REALLY_BAD_IDEA_. По словам Кекоа, «это похоже на использование жесткого диска одновременно на двух компьютерах»

Почему это плохая идея? ... Причина, по которой вы не можете присоединить том более чем к одному экземпляру, заключается в том, что EBS предоставляет абстракцию «блочного хранилища», на которой клиенты запускают файловую систему, например ext2/ext3/etc. Большинство этих файловых систем (например, ext2/3, FAT, NTFS и т.д.) Написаны при условии, что они имеют эксклюзивный доступ к блочному устройству. Два экземпляра доступа к одной и той же файловой системе почти наверняка приведут к разрывам и повреждению данных.

Другими словами, двойное монтирование тома EBS будет работать только в том случае, если вы используете кластерную файловую систему, которая предназначена для совместного использования блочного устройства между несколькими компьютерами. Кроме того, даже этого будет недостаточно. EBS необходимо будет протестировать для этого сценария и убедиться, что он обеспечивает те же гарантии согласованности, что и другие решения для совместно используемых блочных устройств ... то есть, что блоки не кэшируются на промежуточных не общих уровнях, таких как ядро ​​Dom0, уровень Xen, и ядро ​​DomU. Кроме того, существуют соображения по производительности синхронизации блоков между несколькими клиентами - большинство кластерных файловых систем предназначены для работы на высокоскоростных выделенных сетях SAN, а не в обычных локальных сетях Ethernet. Это звучит так просто, но то, что вы просите, является очень нетривиальной вещью.

В качестве альтернативы посмотрите, может ли ваш сценарий совместного использования данных быть NFS, SMB/CIFS, SimpleDB или S3. Все эти решения используют протоколы более высокого уровня, которые предназначены для совместного использования файлов без использования подсистемы блочных устройств с общим доступом. Во многих случаях такое решение действительно более эффективно.

В вашем случае у вас все еще может быть один экземпляр/файловый сервер MySql, доступ к которому осуществляется несколькими веб-интерфейсами. Затем этот файловый сервер может хранить свои данные на томе EBS, что позволяет вам делать ночные резервные копии снимков. Если экземпляр, на котором запущен файловый сервер, потерян, вы можете отсоединить том EBS и снова подключить его к новому экземпляру файлового сервера, чтобы в течение нескольких минут выполнить резервное копирование и запуск.

"Есть ли что-нибудь вроде S3 в качестве файловой системы?" - и да и нет. Да, существуют сторонние решения, такие как s3fs , которые работают «хорошо», но под капотом им все равно приходится совершать относительно дорогие вызовы веб-службы для каждого чтения/записи. Для общих инструментов dir, отлично работает. Для вида кластерного FS использования, которое вы видите в мире высокопроизводительных вычислений, шансов нет. Чтобы добиться большего, вам понадобится новый сервис, который предоставляет двоичный протокол, ориентированный на соединение, такой как NFS. Предложение такой мультимонтированной файловой системы с разумной производительностью и поведением было бы отличным дополнением для EC2. Я давно выступаю за то, чтобы Amazon создавал что-то подобное. 

125
Dave Dopson

Нет, это похоже на использование жесткого диска на двух компьютерах. 

Если вам нужны общие данные, вы можете настроить сервер, к которому могут обращаться все ваши экземпляры. Если вам нужна простая область хранения для всех ваших экземпляров, вы можете использовать сервис хранения Amazon S3 для хранения распределенных и масштабируемых данных.

Переходя в облако, вы можете иметь точно такую ​​же настройку, но вы можете заменить файловый сервер на S3 или подключить все свои экземпляры к вашему файловому серверу.

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

74
Kekoa

Нет, согласно документам EBS: «Том может быть присоединен только к одному экземпляру за раз». 

Как вы используете общее хранилище в настоящее время? Если это просто для обслуживания файлов с файлового сервера, задумывались ли вы о настройке системы, чтобы можно было передавать определенные запросы процессу на файловом сервере вместо того, чтобы веб-серверы обслуживали эти файлы?

14
Austin Mills

Я вполне уверен, что вы не можете, но вы можете клонировать EBS и прикрепить его к другому экземпляру.

Это полезно для фиксированных наборов данных или для тестирования «реальных» данных, но не позволяет работать более чем одному экземпляру в одном хранилище блоков

4
David Snabel-Caunt

Несколько веб-серверов, обращающихся к MySQL Server и File Server, являются нормальными в AWS. Некоторые из лучших практик, которые следует соблюдать для вышеупомянутой архитектуры:

Пункт 1) MySQL на EC2 может быть настроен как ведущий-ведомый в асинхронном/полусинхронном режиме в AWS. EBS-OPT + PIOPS в RAID 0 рекомендуется для высокопроизводительных БД

Пункт 2) В качестве альтернативы вы можете использовать режим Amazon RDS + Multi-AZ. Для масштабирования чтения Multiple RDS Read Replica может быть присоединен к MySQL RDS.

Точка 3) EBS Volume не может быть подключен к нескольким EC2 одновременно. Вы можете создать Файловый сервер на основе GlusterFS на Amazon EC2, используя EBS. Несколько веб-серверов могут одновременно общаться с одним GlusterFS в AWS.

Пункт 4) Если ваше приложение может быть интегрировано с S3 в качестве хранилища файлов, тогда оно предпочтительнее из-за стабильности, которую оно вносит в архитектуру. Вы также можете получить доступ к S3 с помощью таких инструментов, как S3Fuse, а также из своего приложения. 

4
Harish Ganesan

Почему вы не создадите один экземпляр с томом и sshfs для этого тома в других экземплярах?

1
Krish

В мире ИТ есть что-то, известное как кластерная файловая система, Redhat GFS, Oracle OCFS2, Veritas CFS ...

1
DKSG

Краткий ответ - категорическое «Нет». Другие сказали это выше. 

Те, кто сказал «да», ответили не на вопрос, а на другой вопрос. Если EFS - это просто служба NFS, то это не ответ на вопрос, как было заявлено изначально. И не имеет значения, развернута ли EFS во всех зонах или нет, потому что вы вполне можете создать свой собственный экземпляр NFS и иметь несколько серверов, монтирующих NFS. В этом нет ничего нового, мы сделали это уже в 1992 году. SMB и sshfs, все это просто способы монтирования дисков в качестве удаленной файловой системы.

Те, кто сказал «зачем вам это делать» или «все кончится слезами», ошибаются. Мы монтируем несколько дисков на несколько серверов десятилетиями. Если вы когда-либо работали с SAN (сетью хранения данных), возможность подключать одно и то же устройство к нескольким узлам, как правило, через FibreChannel SAN, вполне нормальная. Таким образом, любой, кто запускал серверы десять лет назад до того, как серверы виртуализации/облачных вычислений стали повсеместными, имеет некоторое отношение к этому. 

Вскоре появились кластерные файловые системы, в которых две системы могли читать и писать в один и тот же том. Я полагаю, что это началось со времен VAX и Alpha VMS в истории. Кластерные файловые системы используют распределенную схему взаимного исключения, чтобы иметь возможность напрямую манипулировать блоками. 

Преимущество монтирования одного и того же диска на нескольких узлах заключается в скорости и уменьшении количества возможных сбоев. 

Теперь кластерные файловые системы не стали очень популярными в «потребительском» хостинг-бизнесе, это правда. И они сложны и имеют некоторые подводные камни. Но вам даже не нужна кластерная файловая система, чтобы использовать диск, подключенный к нескольким вычислительным узлам. Что делать, если вы хотите диск только для чтения? Вам даже не нужна кластерная файловая система! Вы просто помещаете в свой/etc/fstab то же физическое устройство, что и для чтения (ro). Затем вы подключаете к 2 или 10 серверам EC2, и все они могут читать напрямую с этого устройства! 

Существует очевидный пример использования этого в мире облачных серверов при создании быстро масштабируемых ферм. Вы можете подготовить основной системный диск и использовать очень маленький загрузочный и конфигурационный диск для каждого из серверов. Вы можете даже загрузить их все с одного загрузочного диска, и прямо перед перемонтированием/в режиме чтения-записи вы можете вставить Union-FS с 3 слоями:

  1. Основной системный диск, доступный только для чтения, с установкой boot, kernel и userland
  2. Файловая система конфигурации, содержащая только несколько файлов .__ (в основном в/etc), специфичных для отдельного сервера. Этот диск Может быть записан другим сервером для подготовки к загрузке экземпляра new. Примерами файлов здесь могут быть/etc/hostname и просто Очень мало файлов конфигурации, которые должны оставаться разными для каждого узла.
  3. Записываемый диск, который вам может вообще не понадобиться, может быть просто /Tmp в качестве файловой системы памяти. 

Итак, да, вопрос имеет большой смысл, и, к сожалению, ответ (все еще) «Нет». И никакая NFS не является отличной заменой этому варианту использования, так как она ограничивает всю активность чтения с системного диска. Однако загрузка по сети с системного диска NFS является единственной альтернативой реализации варианта использования, который я описал выше. К сожалению, поскольку настроить агент сетевой загрузки и NFS намного сложнее, чем просто получить доступ к одному и тому же физическому блочному устройству.

PS: Я хотел бы представить более короткую версию этого в качестве комментариев, но я не могу из-за глупого порога в 51 кредитный балл, поэтому я должен написать ответ с тем же самым существенным «Нет», но включить мою точку зрения, почему это соответствующий вопрос, который не получил заслуженного ответа.

PPS: Я только что нашел кого-то в StackExchange, кто упомянул iSCSI. iSCSI чем-то напоминает NFS, но логически похож на FibreChannel SAN. Вы получаете доступ (и делитесь) физическими блочными устройствами. Это облегчило бы совместное использование загрузочного диска, поэтому вам не нужно настраивать загрузку по сети, что может быть сложно. Но в AWS загрузка по сети также невозможна. 

0
Gunther Schadow