2015-07-03 2 views
2

Мне интересно, есть ли у меня 2 сервера, один из которых является «основным» сервером, а другой - там (оба используют один и тот же внутренний код). Как мне обращаться, если сбой главного сервера, и я хочу, чтобы мои клиенты пользовались другим сервером, поэтому он не должен перезапускать свою программу или что-то в этом роде.Как я могу справиться с сбоем сервера?

Я читал об использовании алгоритма bully, но я потерял способ обработки сокетов и данных (сообщений), которые мои клиенты использовали на первом основном сервере, и использовать его в моем втором сервер.

+1

Как насчет установки серверов в кластере? –

+0

Что вы имеете в виду? Я новичок в этом с сетевым программированием – Bojje

+0

Я хочу узнать больше о том, как вы перенаправляете данные с одного сервера на другой. @LuiggiMendoza – Bojje

ответ

3

Похоже, вы пытаетесь осуществить «переход на другой ресурс» на уровне приложений (например, в вашем Java коде/сокетов). Я бы отговорил вас от этого.

Вот некоторые варианты, которые могут быть гораздо надежнее:

ДОПОЛНЕНИЕ:

+0

Спасибо за все ссылки. Оказывается, мой вопрос не задавался «точно». Я просто собираюсь проголосовать за это как ответ, потому что это похоже на много информации, которая поможет мне решить мою проблему @ paulsm4 – Bojje

2

Прежде всего, если сервер выходит из строя, вы ничего не можете сделать о данных, которые были на нем (пока, конечно же, сервер не вернется). Итак, если вы не хотите потерять данные в случае сбоев, вы должны использовать распределенное хранилище данных (NoSQL?) (Такое как Cassandra, Redis, DynamoDB и т. Д.), Поскольку они уже решили эту проблему масштабируемым образом.

Во-вторых, если ваш вопрос: «Как мне перенаправить мои запросы от A до B, когда A не удастся», вы можете подключить свои серверы A и B простым (например, к NodeJS) прокси. Первоначально прокси-сервер будет «перенаправлять» все клиентские запросы на A. Когда A сбой, прокси обнаруживает это (возможно, когда он видит, что все пересылаемые запросы были отключены в течение последних x секунд) и переключается на сервер B. Однако , будет небольшое временное окно (в зависимости от вашего настроенного значения x), когда клиентские запросы будут продолжать сбой.

https://github.com/nodejitsu/node-http-proxy

0
  1. Если вы сохраняете какое-либо состояние на своих серверах, которое вы не хотите потерять, когда сервер выключен, сохраните свое состояние на двух конкретных серверах базы данных - главном и реплике. Если вы не знаете, какой сервер баз данных выбрать, то дайте мне знать, и я попрошу вас задать дополнительные вопросы.
  2. Если клиентский код, который использует ваши серверы, находится под вашим контролем, тогда реализуйте всю логику отказоустойчивости. Самый простой способ сделать это - «круговой робот» - вы подключаетесь к произвольному серверу, пока не найдете сервер, который обслуживает ваш запрос. Google «round robin» для более подробной информации.
  3. Если код клиента не находится под вашим контролем, тогда вы должны использовать балансировку нагрузки BGP.Основная идея заключается в том, что, как только сервер падает, другой сервер получает IP-адрес первого, например, на стороне клиента, все идеально. Для более подробной информации просто «балансировка нагрузки bgp».
Смежные вопросы