Можно ли подключить Amazon EBS к нескольким экземплярам? - PullRequest
132 голосов
/ 08 мая 2009

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

Ответы [ 9 ]

129 голосов
/ 13 октября 2010

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

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


ОРИГИНАЛЬНЫЙ ПОЧТА (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 создавал что-то подобное.

75 голосов
/ 08 мая 2009

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

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

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

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

14 голосов
/ 27 мая 2009

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

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

4 голосов
/ 12 апреля 2013

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

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

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

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

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

4 голосов
/ 08 мая 2009

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

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

1 голос
/ 19 октября 2012

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

1 голос
/ 11 февраля 2011

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

0 голосов
/ 03 января 2019

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

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

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

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

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

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

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

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

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

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

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

0 голосов
/ 21 августа 2014

Вы можете полностью использовать один диск на нескольких серверах в AWS. Я использую sshfs, чтобы смонтировать внешний диск и поделиться им с несколькими серверами в EC2.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...