Я ищу возможность настроить общую файловую систему / файловый сервер в инфраструктуре AWS (EC2), которая предлагает репликацию и довольно безболезненное переключение при отказе. Эта файловая система могла бы содержать потенциально миллионы файлов размером в несколько мегабайт. Доступ к этим файлам (чтение / запись) будет осуществляться с нескольких клиентских виртуальных машин. Если основной файловый сервер выходит из строя, я бы хотел, чтобы клиенты могли переключаться на файловый сервер реплики без потери каких-либо файлов (т.е. я хочу, чтобы репликация происходила в реальном времени). Я рассмотрел несколько вариантов:
Есть ли лучшие решения?
Можно, хотя и нетривиально, настроить кластеры NFS в Amazon EC2, используя DRBD для синхронной репликации и Pacemaker + Corosync для автоматизации аварийного переключения службы NFS и экспорта между узлами (без прерывания доступа клиентов).
Если вы планируете синхронную репликацию («в реальном времени»), вам нужно, чтобы оба ваших экземпляра EC2 находились в одной зоне, чтобы ограничить задержку между ними; в противном случае эта сетевая задержка трансформируется в задержку диска.
Кроме того, невозможно легко назначить / отменить назначение IP-адреса в инстансах Amazon EC2; вам нужно использовать их API (или использовать их веб-интерфейс) для переназначения IP-адреса. Перемещение IP-адреса необходимо для плавающего IP-адреса, который клиенты будут использовать для подключения к активному узлу. Для того, чтобы это работало, потребуется некоторая модификация агента ресурса Pacemaker «IPaddr2»; это сценарий bash.
Учитывая сложность настройки реплицированного сервера NFS, мы выбрали S3. Производительность s3fs-fuze было ужасно (делать ls
для каталога с более чем 1000 файлов потребовалось бы около минуты из-за необходимости запрашивать метаданные для каждого файла, а кеширование, похоже, не помогло). Однако затем я попробовал RioFS, что дало мне возможность мгновенно реагировать на операции с каталогами и в целом было очень быстро.
Я все еще планирую изучить несколько дополнительных вариантов (S3QL и YAS3FS в частности), но пока варианты выглядят многообещающими.
Просто обновленная информация. Если вы похожи на меня, и вам нужна эта функциональность ОЧЕНЬ, ОЧЕНЬ долго, используйте Amazon Elastic File System (EFS). Это монтирование NFS, реплицированное в нескольких зонах доступности.
(Извините, что столкнулся с проблемой, но рейтинг этого ответа в Google достаточно высок, поэтому некоторые люди, вероятно, ищут это решение.)