Прочитайте четыре режима Redis в одной статье: автономный, ведущий-ведомый, дозорный, кластерный.

Java

Меньше кода, больше волос

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

https://github.com/midou-tech/articles

В первую неделю работы меня обманули

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

Кашель, кашель, я никогда не думал об этом, все то, что я думал, я до сих портендер.

Днем того дня, когда я присоединился к команде, руководитель группы дал мне несколько документов, чтобы я мог взглянуть на проблемы с системой кэширования этих проектов и позволил мне обновить Redis до Sentinel Mode.

Когда я получил задание, я был ошеломлен.

Во-первых, я не знаю, какие типы сервисов используют Redis.

Во-вторых, я не знаю, как использовать Redis.

В-третьих, если Redis зависнет, повлияет ли это на пользователей.

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

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

Кажется, что социальная вербовка и школьная вербовка все же разные.Школьная вербовка будет включать вводное обучение или занятия для новичков.

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

Задача

Обновите все сервисы Redis в нашем отделе дочасовоймодель.

Несколько режимов Redis

Все говорили перейти на дозорный режим.До этого дозорный режим не использовался.Должны быть другие режимы.

Автономный режим, режим ведущий-ведомый, дозорный режим, кластерный режим

Автономный режим

Это легче всего понять с первого взгляда.

Просто установите Redis, запустите его и позвоните в бизнес. Конкретные шаги установки и шаги запуска повторяться не будут, просто поищите в Интернете, и они у вас будут.

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

Кхе-кхе, на самом деле наш сервис использует автономный режим redis, так что позвольте мне перейти в дозорный режим, когда я приду.

Разговор об одной машинеПреимущества и недостаткиБар.

преимущество:

  • Простота развертывания, 0 затрат.
  • Низкая стоимость, отсутствие запасных узлов и прочих затрат.
  • Высокая производительность, одна машина не нуждается в синхронизации данных, и данные естественным образом непротиворечивы.

недостаток:

  • Гарантия надежности не очень хорошая, и одиночный узел рискует простоем.
  • Высокая производительность одной машины ограничена вычислительной мощностью ЦП, а Redis является однопоточным.

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

репликация master-slave

Репликация master-slave относится к копированию данных одного сервера Redis на другие серверы Redis.

Первый называется главным узлом (master), а второй — подчиненным узлом (slave); репликация данных односторонняя и может осуществляться только от главного узла к подчиненному узлу.

Конфигурация режима ведущий-ведомый очень проста, вам нужно только настроить IP и номер порта главного узла на ведомом узле.

slaveof <masterip> <masterport>
# 例如
# slaveof 192.168.1.214 6379

запускатьМастер-рабВсе сервисы ноды, лог можно посмотреть просмотрев логМастер-рабСервисные соединения между узлами.

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

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

Для достижения конечногоПользовательский опытпродукты категорически запрещается иметьвремя простоясуществующий.

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

Преимущества режима ведущий-ведомый:

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

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

  • Краеугольный камень высокой доступности: в дополнение к вышеперечисленным функциям репликация master-slave также является основой для реализации режима Sentinel и кластерного режима, поэтому репликация master-slave является краеугольным камнем высокой доступности Redis.

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

  • однаждыГлавный узел не работает,подчиненный узелповышен доглавный узел, и нужно изменитьСторона приложенияизадрес главного узла, также нужно командовать всемиподчиненный узелидти скопироватьНовый главный узел, весь процесс требуетручное вмешательство.
  • главный узелизспособность писатьполучилаОграничения для одной машины.
  • главный узелизвместимость складаполучилаОграничения для одной машины.

Режим стража

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

Но есть проблема, поменялся IP мастерноды, а служба приложений до сих пор держитОригиналАдрес мастер-узла для посещения, это...

Итак, когда был представлен Redis 2.8, появилась концепция дозорного.

существуетоснова репликацииНа, понял Страж.автоматизациявосстановление после отказа.

Как показано на рисунке, дозорный узел состоит из двух частей: дозорного узла и узла данных:

  • Дозорный узел: дозорная система состоит из одного или нескольких дозорных узлов, которые представляют собой специальные узлы Redis, не хранящие данные.
  • Узлы данных: как главные, так и подчиненные узлы являются узлами данных.

Данные, обращающиеся к кластеру Redis, проходят через дозорный кластер, а дозорный отслеживает весь кластер Redis.

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

Sentinel очень хорошо справляется с отказоустойчивостью и поднялся на новый уровень с точки зрения высокой доступности.Конечно, у Sentinel есть и другие функции.

НапримерОпределение живучести главного узла,Обнаружение лорда из операции,главный-ведомый переключатель.

Минимальная конфигурация Sentinel для Redis:Один хозяин и один раб.

Рассказать о принципе мониторинга дозорного режима

Каждый Страж посылает ему с частотой один раз в секундувсеизглавный сервер,подчиненный сервери другие СтражипримерОтправьте команду PING.

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

еслиглавный серверотмечен какСубъективный офлайн, а затем мониторинг главного серверавсеУзел Sentinel, начните сраз в секундуЧастота подтверждения того, что главный сервер действительно вошелСубъективный офлайнгосударство.

Если главный сервер помечен как субъективно отключенный идостаточное количествоSentinels (минимум до указанного в конфигурационном файле количества) на указанномлимит временисогласен с этим суждением, то главный сервер помечается какобъективно офлайн.

При нормальных обстоятельствах каждый Sentinel будет отправлять команды INFO всем ведущим и ведомым устройствам, о которых он знает, каждые 10 секунд.

когдаглавный серверС меткой Сентинелобъективно офлайн, частота отправки Sentinel команд INFO всем ведомым устройствам автономного ведущего будет изменена с одного раза каждые 10 секунд на один раз в секунду.

Sentinel и другие переговоры Sentinelглавный узелсостояние, если главный узел находится вSDOWN`статус, голосованиеавтоматически выбранновый главный узел. остальныеподчиненный узелнаправлениеновый главный узелпровестирепликация данных.

Когда достаточное количество Sentinels соглашается, что главный сервер отключается, главный серверОбъективный офлайн-статусбудет удален. когдаглавный серверПри возврате действительного ответа на команду Sentinel PING основной серверСубъективный офлайн-статусбудет удален.

Плюсы и минусы режима Sentinel

Преимущества:

  • Режим Sentinel основан на режиме ведущий-ведомый, и все преимущества режима ведущий-ведомый доступны в режиме Sentinel.
  • Мастер-ведомый может переключаться автоматически, система более надежна, а доступность выше.
  • Sentinel будет постоянно проверять, нормально ли работают главный и подчиненный серверы. Sentinel отправляет уведомления администраторам или другим приложениям через сценарии API, когда возникает проблема с одним из отслеживаемых серверов Redis.

Недостатки:

  • Redis сложно поддерживать онлайн-расширение, а для кластеров онлайн-расширение становится очень сложным, когда емкость достигает верхнего предела.

мое задание

Развернутая мной служба Redis показана на рисунке выше с тремя сигнальными узлами и тремя узлами репликации master-slave.

Используйте java-jedis для доступа к моему сервису Redis, вот простой демонстрационный код (не код в проекте):

public static void testSentinel() throws Exception {
     //mastername从配置中获取或者环境变量,这里为了演示
         String masterName = "master";
         Set<String> sentinels = new HashSet<>();
     // sentinel的IP一般会从配置文件获取或者环境变量,这里为了演示
         sentinels.add("192.168.200,213:26379");
         sentinels.add("192.168.200.214:26380");
         sentinels.add("192.168.200.215:26381");
 
     //初始化过程做了很多工作
         JedisSentinelPool pool = new JedisSentinelPool(masterName, sentinels); 
     //获取到redis的client
         Jedis jedis = pool.getResource();
     //写值到redis
         jedis.set("key1", "value1");
     //读取数据
     jedis.get("key1");
}

Конкретный файл конфигурации развертывания здесь слишком длинный. Друзья, которым он нужен, могут ответить на [redis configuration] в фоновом режиме официальной учетной записи, чтобы получить его.

Похоже, сложно развернуть задачу на второй день работы.

На самом деле, теперь это кажется такой простой задачей, подать заявку на кластер Redis и настроить его самостоятельно. Изменить место использования redis в проекте.Раньше использовались одна или две автономные ноды.

Готово, на этом закончим.

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

кластерный режим

Мастер-слейв не может решить проблему автоматического восстановления после сбоя, а часовой может решить проблему автоматического восстановления после сбоя, так зачем вам кластерный режим?

У master-slave и sentinel есть и другие проблемы, которые не решены: емкость хранилища одного узла ограничена, а возможности доступа ограничены.

Режим кластера Redis Cluster имеетВысокая доступность,Масштабируемость,распределенный,Отказоустойчивостьи другие характеристики.

Принцип кластерного режима Cluster

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

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

Как делятся осколки данных?

Ключевое пространство кластера разделено на 16384 слота (то есть хеш-слотов), а данные разделены на разные шарды путем хеширования.

HASH_SLOT = CRC16(key) & 16384 

CRC16 — это циклический алгоритм проверки, который не является предметом нашего исследования.Вы можете посмотреть, если вам интересно.

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

Есть очень важный вопрос, почему она разделена на 16384 слота? Этот вопрос может быть задан интервьюером небрежно.

Как проверить и записать данные после фрагментации?

Запросы на чтение назначаются подчиненным узлам, запросы на запись назначаются ведущим узлам, а данные синхронизируются от ведущих узлов к подчиненным.

разделение чтения-записиУлучшите параллелизм и повысьте производительность.

Как сделать горизонтальное расширение?

Мастер-узел можно расширить, а миграция данных автоматически завершается внутри Redis.

Когда вы добавляете мастер-узел, вам нужно выполнить миграцию данных, и служба Redis не обязательно должна быть в автономном режиме.

Например, выше есть три мастер-узла, что означает, что слот redis разделен на три сегмента, при условии, что эти три сегмента — 0–7000, 7001–12000 и 12001–16383 соответственно.

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

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

Реадардирование кластера Redis выполняется по управлению программным обеспечением Redis-Friend Redis. Redis предоставляет все команды для RESHARDING, а Redis-Trib выполняет перезарядки, отправив команды на узлы.

Как сделать отказоустойчивость?

Если красный узел на пути выйдет из строя, подчиненные узлы под master3 пройдут через него.выборыСоздайте главный узел. Замените исходный неисправный узел.

Этот процесс аналогичен аварийному переключению в сигнальном режиме.

Суммировать

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

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

Если вы изучаете его как хорошее промежуточное ПО, есть еще много мест, которые стоит изучать и изучать. Например, различные структуры данных redis (динамические строки, таблицы переходов, наборы, словари и т. д.), эффективное выделение памяти (jemalloc), эффективные модели ввода-вывода и т. д.

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

Я дядя Лонг, звезда, который разделяет интернет-технологии и менталитет роста.