Во-первых, 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.
Для каждого чтения/записи, клиенты Redis должен сначала получить адрес от дозорных, хотя до этого он может выполнить чтение/запись , правильно? –
Не для каждого чтения/записи, это было бы ужасно. Клиент получает уведомление, когда мастер не работает, с новым избранным мастером. Прочтите приведенный параграф из оригинального документа: «Если произойдет переход на другой ресурс, Стражи будут сообщать о новом адресе». – bitoiu