Мне нужен кластер из 3+ VPS-серверов в разных городах, который действует как один VPS-сервер, что означает:
% Когда я обновляю файл на одном VPS в кластере, он "автоматически" обновляется на всех остальных VPS.
% Когда я запускаю команду на одном VPS, она автоматически запускается на всех остальных.
% Когда я обновляю запись базы данных на одном VPS, она автоматически обновляется на всех остальных (что аналогично пункту 1 для баз данных, которые используют хранилище файлов)
% Если один VPS выходит из строя, он "догонит", когда он снова заработает.
Другими словами, VPS - точные зеркала друг друга.
Я понимаю, что IP-адреса (и, возможно, даже /etc/resolv.conf и несколько других файлов) должны быть разными, но общая идея состоит в том, что они выглядят одинаково для сторонних наблюдателей.
Поскольку на VPS могут размещаться блоги и т. Д., Зеркальное отображение должно сохраняться, когда просматривающий пользователь оставляет комментарий к блогу. Другими словами, у меня не может быть центрального VPS и распространять обновления, поскольку пользователи могут вносить изменения на любом VPS, а не только на центральном.
Такое существует? Я пробовал создать свой, используя репликацию iwatch и MySQL, но на практике это не сработало.
Я знаю о http://mediatemple.net/webhosting/gs/ но все эти серверы находятся в одном месте (и не совсем то, что я описал выше).
Все возможно при правильной технологии и бюджете. Чтобы понять, что нужно сделать:
1. Если вы используете какую-то СУБД, такую как MySQL, вы можете легко настроить репликацию Master-Master между 2+ серверами mysql, которые обеспечат, чтобы все записи попадали на каждый из других серверов, при этом каждый из них имеет свой собственный идентификатор приращения. Однако базы данных с высоким трафиком всегда будут отставать друг от друга, в зависимости от схемы сети и расстояния между каждым VPS-сервером.
2: синхронизировать файлы немного сложнее. Проще всего заставить локальные скрипты запускать rsyncs каждые N минут, чтобы синхронизировать все файлы. Если это только один VPS, а не отдельная сборка в каждом центре обработки данных, то это будет один из самых простых способов.
3: Балансировка нагрузки будет сложной, поскольку это только один VPS. Вы можете использовать циклический DNS для каждого IP-адреса VPS, но это не самый эффективный способ, когда хост не работает. Вы можете уменьшить TTL, но некоторые провайдеры не соблюдают TTL DNS.
Чтобы дать пример того, что из этого будет построено:
1: MySQL работает на первичных / вторичных узлах DRBD в каждом центре обработки данных на своей собственной физической / виртуальной машине. Затем каждое местоположение настраивается для репликации Master / Master. Отказоустойчивый в каждом центре обработки данных, но по-прежнему имеет проблему задержки, описанную выше.
2: Выделенная сеть SAN для хранения глобальных файлов, которые будут совместно использоваться с круглосуточной репликацией. Ни в коем случае не дешево, но то, что делают предприятия.
3: Либо DNS с очень низким TTL, либо устройство балансировки нагрузки BGP. Более дорогой, но он сможет лучше выполнять алгоритмы балансировки нагрузки - пользователь помещается в более близкую область или область избегается при отключении или большой загрузке.
Мне не известно о готовом решении вроде этого, но вы можете построить такой кластер с Amazon EC2.
Из вопроса неясно, какая есть свобода выбора технологии реализации. Если вы можете выбрать распределенную базу данных nosql, такую как Cassandra, репликация данных на многих узлах должна быть выполнимой при условии, что не имеет значения, потребуется ли секунда или две для распространения данных.
Я не знаю о загрузке системных файлов, но вы, вероятно, могли бы отправить статический веб-контент с помощью кластерной файловой системы или даже rsync. Для поддержания состояния нескольких машин вы можете захотеть изучить cfengine, который поможет вам как с поддержкой пакетов, так и с конфигурацией на многих боксах.
Если у вас возникнут проблемы, вам, вероятно, следует также выполнить сетевой системный журнал для этих боксов.
В Windows Server 2008 есть то, что вы ищете. Просто объедините серверы в кластер с помощью встроенной роли, назначьте основной узел (администратор кластера), настройте безопасность и параметры кластера, а затем добавьте IIS, SQL и другие как приложения и сервисы кластера.
Шон Дж.