Я работаю в небольшой компании, которая предоставляет веб-приложение для тысяч пользователей. Ранее в этом году у них был один сервер, на котором размещалась одна компания. Недавно мы приобрели еще один сервер в другом месте в надежде, что когда-нибудь он станет резервной машиной для аварийного переключения. Я понимаю, что делать с репликацией mysql, я планирую использовать настройку репликации мастер-мастер и rsync для синхронизации скриптов и файлов, однако я не понимаю, как настроить переключение при отказе. В идеале я бы хотел, чтобы две машины принимали запросы, например, циклический DNS, однако, если одна машина выйдет из строя, я не хочу, чтобы запросы отправлялись на эту машину. Все решения, с которыми я сталкивался, предполагают высокую доступность серверов в одном месте, эти серверы находятся в двух совершенно разных местах с разными общедоступными IP-адресами. Любая помощь была бы замечательной. Спасибо
Обычно сердцебиение (кардиостимулятор) или МММ используется для управления IP-ресурсом, который будет динамически переключаться при отказе. Чтобы это работало эффективно, вам необходимо использовать один и тот же сегмент сети.
Если серверы не находятся в одном и том же физическом пространстве, даже наличие двух разрозненных Интернет-каналов для мониторинга более подвержено ошибкам, чем одно из них, являющееся последовательным кабелем длиной несколько футов.
Вам нужно будет измерить риск и расставить приоритеты в соответствии с вашими потребностями. Какой ваш главный приоритет? Доступность или целостность данных? Если целостность данных не является приоритетом, вы потенциально можете автоматически переключиться на отказ, но вы все равно рискуете разделением. В CAP теорема исследует это более подробно.
Обычно не рекомендуется писать на оба главных сервера одновременно, так как могут возникнуть конфликты идентификаторов. Вы можете настроить смещение, но это необходимо учитывать в контексте всей вашей архитектуры.
Основываясь на том, что я знаю из того, что вы описали, я, вероятно, склоняюсь к целостности данных. Я бы установил двойной мастер, записываю только на один мастер IP из вашего приложения. В случае сбоя на вашем первичном сервере, я бы попросил выполнить ручную процедуру переключения при отказе, чтобы перенаправить веб-приложение на вторичный БД.
Если вы настаиваете на автоматическом переключении при отказе, вы можете написать сценарий, который учитывает более двух точек отказа, и вы можете минимизировать риск данных с помощью дополнительной логики. Однако эта архитектура существенно сложнее, и вам придется ее спроектировать самостоятельно.
Между кластеризацией MySQL (NDB) и патчами Google существует множество технологий, но ничто полностью не отменяет теорему CAP.