Исходные данные: Есть сайт, есть два сервера. На одном из них находится nginx, MySQL и контент сайта (аудио, фото).
Задача: При отключении одного из серверов сайт должен быть по-прежнему доступен.
Вопрос: Как это сделать и что для этого нужно? Как мне сделать так, чтобы клиент обращался на сайт и его переадресовывало на сервер Б в случае недоступности сервера А и наоборот?
nginx в принципе устраивает, но для этого в схему необходим третий сервер, на который я переписываю А записи в DNS и он становится фронтендом, правильно?
т.е в этом случае ДНС разруливается на этот самый сервер, и все остальное зависит уже от этого сервера? он становится узким местом, и одновременно load balancer-ом?
Еще один вариант, но не уверен… Думаю можно попробовать в DNS прописать SRV записи с приоритетами. Если основной откажет, то клиент полезит на адрес с меньшим приоритетом. Правда в данном случае обработка ложится на клиента…
Общие хранилище (FC/iSCSI) с кластерной ФС — например ocfs2.
Там вы храните html/БД и прочию нужную вам ерись.
Две машины объединяются Heartbeat, в вашем случаи за глаза.
Хранилище так же можно сделать резервным куда либо еще, используя drbd+ocfs2 :)
В такой вариации, у вас будет простаивать один сервер.
Если нужна однавременная работа, то в апаче модуль балансировки или через nginx.
БД репликацией.
За это отвечает Heartbeat. Он соединяется отдельной сетевой платой между машинами, или через com порт если есть, и постоянно отслеживает живой ли сервер, если нет, то скриптами запускает нужные службы, до того момент, пока основной сервер не вернется к жизни.
На тему разруливание все просто, у вас три ip адреса, один общий на две машины (который поднимается на другой, во время подения).
Все можно это, но на практике не тем, кто впервые просто купил два VPS и задумался как же ему их использовать одновременно.
Таким выгоднее выбирать провайдера понадежнее.
Для повышения доступности надо разделить сервера по ролям и продублировать. Сервер БД, сервер хранилище и пара фронт-енд серверов с nginx. Тогда о какой-то отказоустойчивости можно говорить.
Если ДЦ разные, то тут только через днс-записи выруливать, других вариантов нет. Причем если просто прописать 2 записи — в случае падения одного дц половина запросов уйдет в никуда. Можно поставить записям время жизни поменьше, затем на каждом ДЦ нарисовать скрипт который проверяет соседа на живучесть, и если не получает от него внятного отклика — пытается обновить днс-зону. Только предохранителей от split-brain предусмотреть каких… Таким образом, при падении одной площадки половина клиентов как работала так и будет работать; вторая половина — испытает временные трудности. Все ж лучше чем ничего наверное.