2015-02-04 2 views
4

Я читал о том, как использовать Redis Sentinel, и я знаю, что возможно иметь 2 или более часовых, и балансировать баланс между ними при вызове с клиентской стороны.Redis часовых на тех же серверах, что и master/slave?

Хорошая практика иметь эти 2 часовых на том же сервере, что и мой хозяин + раб? Другими словами, есть 1 сторожевой сервер на том же физическом сервере, что и главный, а другой на том же физическом сервере, что и ведомый?

Мне кажется, что если главный сервер умирает, дозорный сигнал в подчиненном устройстве будет просто продвигать ведомый к ведущему устройству. если подчиненный сервер умирает, это не имеет значения, потому что мастер все еще работает.

Я что-то упустил? Каковы недостатки?

Я предпочитаю, чтобы часовые были на том же физическом сервере, что и master/slave, чтобы уменьшить латентность.

ответ

6

Все зависит от уровня аварийного восстановления вы хотите достичь, давайте предположим, что у вас есть следующие компоненты независимо, где они размещены:

  • 2 Часовые
  • 1 Master
  • 1 ведомых

1 Мастер 1+ Рабы

Один сценарий хозяина

Ошибка хоста: вы потеряете все, сценарий плохой репликации для большинства случаев использования.

Два сценария хозяина

Узел 1:

  • (Текущий избрано) Мастер
  • 1 Страж

Узел 2:

  • Ведомый
  • 1 Страж

Это правда, что в этом случае вы можете иметь хозяева провалить в то время, которое дает вам некоторый уровень безопасности. Просто попробуйте понять, если на другом сервере вы имеете в виду физически разные хосты. Если это только виртуальные машины на одном хосте, вы не получите тот же уровень DR (аварийное восстановление).

Что касается Вашего вопроса:

я скорее имею Часовые быть в том же сервере, что и ведущий/ведомый, чтобы уменьшить время ожидания.

Обратите внимание, что Часовые следить за текущие ведущие и ведомых, но клиенты Redis не подключаются к Мастеру VIA Стражей, они просто получить, где в настоящее время мастера по Стражам, например, в терминах читают и пишет, что вы не изучаете сколько-нибудь значительных латентных выигрышей.

поставщик конфигурации. Sentinel выступает в качестве источника полномочий для обнаружения услуг клиентов: клиенты подключаются к Стражам, чтобы запросить адрес текущего мастера Redis, ответственного за данную услугу. Если произойдет переход на другой ресурс, Sentinels сообщит новый адрес.

(см: http://redis.io/topics/sentinel)

Как я вижу это единственные выгоды вы имеете в плане задержек являются сердцебиениями, посланных от ведущего и ведомых к часовому. Пока вы не распространяете свои серверы по всему миру, что должно быть в порядке.

Все зависит от вариантов использования, но кажется, что вам лучше всего держать вещи как можно более раздельными, если все остальные вещи равны (затраты, расстояние до клиентов и т. Д.).

+0

Для каждого чтения/записи, клиенты Redis должен сначала получить адрес от дозорных, хотя до этого он может выполнить чтение/запись , правильно? –

+0

Не для каждого чтения/записи, это было бы ужасно. Клиент получает уведомление, когда мастер не работает, с новым избранным мастером. Прочтите приведенный параграф из оригинального документа: «Если произойдет переход на другой ресурс, Стражи будут сообщать о новом адресе». – bitoiu

6

Во-первых, Sentinel не является балансировщиком нагрузки или прокси для Redis.

Во-вторых, не все неудачи - это смерть хозяина. Иногда сервер висит ненадолго, иногда сетевой кабель отключается и т. Д. Так как f это, не рекомендуется использовать Sentinel на тех же хостах, что и ваш экземпляр Redis. Если вы используете Sentinel для управления отказоустойчивостью, все, что меньше трех часовых, выполняющихся на узлах, отличных от вашего мастера Redis и подчиненных (-ов), запрашивает проблемы.

Sentinel использует механизм кворума для голосования при отказе и подчинении. С менее чем двумя стражами вы рискуете разделить мозг, когда два или более сервера Redis считают их хозяином.

Представьте сценарий, в котором вы запускаете два сервера и запускаете дозорный сигнал на каждом из них. Если вы потеряете один, вы потеряете надежную возможность перехода на другой ресурс.

Клиенты подключаются только к Sentinel, чтобы узнать текущую информацию о главном подключении. В любое время, когда клиент теряет связь, они повторяют этот процесс. Sentinel не является прокси для Redis - команды Redis идут прямо в Redis.

Единственная надежная причина запуска Sentinel с менее чем тремя часовыми механизмами - это сервисное обнаружение, что означает, что он не использует его для управления отказоустойчивостью.

Рассмотрит два хозяина сценария:

Host A: redis master + sentinel 1 (Quorum 1) 
Host B: redis slave + sentinel 2 (Quorum 1) 

Если хост B временно теряет подключение к сети для хоста A в этом сценарии HostB будет способствовать себя мастеру. Теперь у вас есть:

Host A: redis master + sentinel 1 (Quorum 1) 
Host B: redis master + sentinel 2 (Quorum 1) 

Все клиенты, которые подключаются к часовым 2 будут рассказана Хост B является ведущим, в то время как клиенты, которые подключаются к часовым 1 будут рассказан хост А мастеру (который, если у вас есть Стражи позади балансировщик нагрузки, означает половину ваших клиентов).

Так что вам нужно работать, чтобы получить минимально допустимое управление надежного отказоустойчивога являются:

Host A: Redis master 
Host B: Redis Slave 
Host C: Sentinel 1 
Host D: Sentinel 2 
Host E: Sentinel 2 

Ваших клиентов подключаются к часовым и получить текущий мастер для экземпляра Redis (по имени), а затем подключить к нему , Если мастер умирает, соединение должно быть удалено клиентом, после чего клиент снова подключится к Sentinel и получит новую информацию.

Насколько хорошо каждая клиентская библиотека обрабатывает это, зависит от библиотеки.

Идеально Хосты C, D и E находятся либо на тех же хостах, на которых вы подключаетесь к Redis (т.е. клиентскому хосту). или представляют собой хорошую выборку, полученную ими. Основная цель здесь - убедиться, что вы проверяете, откуда вам нужно подключиться к Redis. В противном случае они будут помещены в один и тот же DC/Rack/Region в качестве клиентов.

Если вы хотите, чтобы ваши клиенты разговаривали с балансировщиком нагрузки, попробуйте, если возможно, ваши Sentinels на этих LB-узлах, добавив дополнительные не-LB-хосты по мере необходимости, чтобы получить нечетное количество часовых поясов> 2. Исключение из это, если ваши хосты-клиенты являются динамическими, поскольку число их несовместимо (они масштабируются для трафика, например, для медленных периодов). В этом сценарии вы в значительной степени должны запускать своих Sentinels на хостах, отличных от клиента и не-redis-сервера.

Обратите внимание, что если вы сделаете это, вам понадобится написать демон, который контролирует канал Sentinel PUBSUB для события главного коммутатора для обновления LB, который вы должны настроить, чтобы разговаривать только с текущим мастером (никогда не пытайтесь говорить как для). Это большая работа, но он использует прозрачный для клиента Sentinel - который знает только, чтобы разговаривать с LB IP/Port.

+0

«для получения минимально приемлемого надежного управления отказоустойчивостью»: Хост A: redis master + sentinel 1 (Quorum 2); Хост B: мастер повторения + дозорный 2 (кворум 2); Хост C: дозорный 3 (Кворум 2) , не так ли? –

+0

Есть проблемы с запуском дозорного устройства на том же хосте, что и Redis. –

+0

Не могли бы вы указать мне направление, какую проблему? http://redis.io/topics/sentinel: «Пример 2: базовая настройка с тремя полями», что это допустимая конфигурация. –

0

Вы можете иметь на сторожей одной машине с ведущий/ведомый, но Часовые должны быть нечетным (3/5/7) в количестве. Там должно быть по крайней мере три часовых, и для этого нужно иметь специальную машину, по крайней мере, одну стражку.

Если у вас есть только два узла, то в случае ситуации с раздвоенным мозгом (нарушение сети) ведомое устройство будет переведено на мастер. Оба мастера теперь будут принимать данные от клиентов. Однако, когда все вернется к норме, один из мастеров будет понижен в должности как подчиненный. Этот мастер потеряет все свои данные, так как теперь он является подчиненным, и будет реплицировать данные от текущего мастера.

проверить это для хорошего с объяснением REDIS архитектурных Desings и разделенного мозга: http://www.yzuzun.com/2015/04/some-architectural-design-concepts-for-redis/

Смежные вопросы