У меня есть LAMP-сервер со встроенным аппаратным резервированием. Я не беспокоюсь о том, что сервер станет недоступным. Однако меня беспокоят потенциальные проблемы с сетью в центре обработки данных, в котором находится сервер. Я бы хотел иметь еще один сервер в другом центре обработки данных для резервирования. Балансировка нагрузки - меньшая проблема.
С учетом сказанного, я относительно невежественен по двум пунктам:
Будем очень признательны за любые рекомендации о том, как решить две вышеупомянутые проблемы.
Ваш вопрос состоит из множества частей!
Для MySQL вам нужно иметь два сервера, которые реплицируются друг от друга, так что если один из них является активным мастером, другой получит свои данные. Вы можете следить за тем, чтобы они получали одни и те же данные, проверяя, на сколько секунд репликация реплики отстает от мастера. Вы должны писать только активному мастеру, иначе вы, вероятно, закроете свою базу данных, когда они оба будут использовать значение auto_increment.
Для файлов вы можете периодически запускать rsync, чтобы распространять изменения туда и обратно. Может быть достаточно просто отслеживать, есть ли у них одни и те же файлы - есть несколько способов сделать это.
Вторая проблема сложнее. Предположим, что основной центр обработки данных внезапно отключился. Как центр резервного копирования данных знает, что с этим делать? Как правило, требуется ручной компонент для принятия решения о том, что произошел сбой и следует ли переключаться на резервную копию. Для автоматического перемещения клиентских процессов в резервную копию обычно требуется третий сайт, который может либо прокси-соединения с активным центром обработки данных, либо обеспечивать быстрое переключение DNS для имен. Я рекомендую первое, потому что использование DNS для аварийного переключения центра обработки данных требует низких значений TTL.
По первому вопросу вы можете использовать конфигурацию mysql master-master, см. http://www.neocodesoftware.com/replication/ для примера. Обратите внимание на автоинкремент-смещение, которое используется, чтобы избежать конфликта первичных ключей в таблицах между двумя серверами.
Используйте rsync для копирования файлов между серверами с флагом --delete, чтобы избежать повторной синхронизации удаленных файлов между серверами.
Что касается второго вопроса, я не уверен в этом, поскольку, вероятно, будет проще, если вы сможете сделать прокси-сервер балансировки нагрузки, который обнаруживает, выходит ли один из серверов из строя. Но это, вероятно, приведет к удвоению затрат на пропускную способность, если серверы находятся в несвязанных центрах обработки данных. В противном случае, возможно, вы можете просто указать DNS-запись на два IP-адреса, чтобы клиент попробовал их оба