Redis cluster: architecture, replication, sharding and failover

Введение в Redis Cluster

Основные цели

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

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

Основные порты

Кластер используется два TCP-соединения.

  • Клиентский порт — как правило 6379. Как видно из названия, используется клиентами.
  • Порт кластерной шины — клиентский порт + 10000, например 16379. Этот порт используется для работы кластера: обнаружение ошибок, обновление конфигурации, авторизации и прочего.

Сегментация

Кластер не использует консистентное хеширование, вместо этого используется так называемые хэш-слоты (анг. hash-slot). Весь кластер имеет 16384 слотов, для вычисления хэш-слота для ключа используется формула . Каждый узел Redis отвечает за конкретное подмножество хэш-слотов, например:

  • Узел A седержит хеш-слоты от 0 до 5500.
  • Узел B седержит хеш-слоты от 5501 до 11000.
  • Узел C седержит хеш-слоты от 11001 до 16383.

Это позволяет легко добавлять и удалять узлы кластера. Если мы добавляем узел D, то можно просто переместить некоторые хеш-лоты других узлов. Если же удаляем A, то нам необходимо постепенно переместить все хэш-слоты узла А на другие, а когда хэш-слотов не останется, то просто удалить узел из кластера. Всё это выполняется постепенно командами, нам не нужно приостанавливать выполнение операций, не нужно пересчитывать процентное соотношение хеш-слотов к количеству узлов, никаких прочих остановок системы.

Возникает вопрос — Redis имеет сложные структуры данных с составными ключами, ведь хэш-функция посчитает для них разные значения? Имеется и ответ:

  • Составные ключи одной команды, одной транзакции или одного скрипта Lua, гарантировано попадут в один хэш-слот.
  • Пользователь может принудительно сделать составные ключи частью одного хэш слота с помощью концепта хэш-тегов.

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

Репликация

Каждый хэш-слот имеет от 1 (master) до N (N-1 slave) реплик. Таким образом, если выйдет из строя некоторый слот, то кластер назначит его slave master-ом.

Гарантия целостности

Может возникнуть ситуация:

  • Клиент пишет в узел B.
  • B отвечает ОК.
  • B пытается записать в slave B1, B2, B3.

Как можно заметить, B не ждет репликации данных, а сразу отвечает клиенту ОК. При этом, если запись может не попасть в B1, а возможность стать мастером у B1 остается. Разумеется, в этом случае B1 будет иметь не все данные.
Redis Cluster пользоволяет использовать команду .

Также может возникнуть ситуация, когда A, C, A1, B1, C1 перестают видеть B, а клиент всё еще продолжает записывать туда данные. Если этот сбой будет очень короткий, то ничего страшного не случится, но если B не будет доступен продолжительное время, то мастером станет B1. Это время устанавливается в параметрах и называется таймаутом узла (анг. node timeout). В частности, это время также дается для записи клиенту, если клиент не укладывается в данное время, то узел больше не принимает записи. Также, если мастер не будет видеть это время другие узлы, то он самостоятельно перестанет работать.

3.2 Режим часового

принцип:

  • Каждый процесс Sentinel отправляет команду PING на главный мастер-сервер, подчиненный сервер и другие процессы Sentinel во всем кластере с частотой один раз в секунду.
  • Если экземпляр превышает значение, указанное параметром down-after-milliseconds из последнего действительного ответа на команду PING, этот процесс будет помечен как субъективный down (SDOWN) процессом Sentinel
  • Если главный главный сервер помечен как субъективно автономный (SDOWN), все процессы Sentinel, которые отслеживают главный главный сервер, должны подтвердить, что главный главный сервер действительно перешел в субъективное автономное состояние с частотой один раз в секунду.
  • Когда достаточное количество процессов Sentinel (больше или равно значению, указанному в файле конфигурации) подтверждают, что главный главный сервер перешел в субъективное автономное состояние (SDOWN) в течение указанного временного диапазона, главный главный сервер будет отмечен как целевой автономный (ODOWN)
  • В обычных условиях каждый процесс Sentinel будет отправлять команды INFO на все ведущие и подчиненные серверы в кластере с частотой один раз в 10 секунд.
  • Когда мастер-сервер помечен как ODOWN в процессе Sentinel, частота отправки команд INFO со всех подчиненных серверов главного мастер-сервера, когда процесс Sentinel переходит в автономный режим, будет изменяться с одного раза в 10 секунд на каждый Каждую секунду.
  • Если процессов Sentinel недостаточно для согласования с автономным главным сервером, целевой автономный статус главного главного сервера будет удален. Если главный сервер отправляет команду PING процессу Sentinel и возвращает действительный ответ, субъективное автономное состояние главного сервера будет удалено.

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

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

Недостатки:

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

Redis

DownloadFeaturesDevelopersDocumentation

Redis is an in-memory data structure store, used as a distributed, in-memory key–value database, cache and message broker, with optional durability. Redis supports different kinds of abstract data structures, such as strings, list…New content will be added above the current area of focus upon selectionRedis is an in-memory data structure store, used as a distributed, in-memory key–value database, cache and message broker, with optional durability. Redis supports different kinds of abstract data structures, such as strings, lists, maps, sets, sorted sets, HyperLogLogs, bitmaps, streams, and spatial indices. The project was developed and maintained by Salvatore Sanfilippo. From 2015 until 2020, he led a project core team sponsored by Redis Labs. Salvatore Sanfilippo left Redis as the maintainer in 2020. It is open-source software released under a BSD 3-clause license. In 2021, not long after the original author and main maintainer left, redisLabs dropped the Labs from its name and now redis, the open source DB as well as redisLabs, the commercial company, are referred to as «redis».

  • Wikipedia
  • Official site

Changing Slave => Master roles

In case of the master will go down — you have to switch one of the slaves to become a new master.

If you’ll try to add any data on a current slave — Redis will rise an error as the slaves are in the read-only mode:

...slave-read-only yes...

Try to add something:

root@redis-1:/home/admin# redis-cli -a foobared set test2 ‘test2’(error) READONLY You can’t write against a read only slave.

Now connect to the slave:

root@redis-1:/home/admin# redis-cli

Authorize:

127.0.0.1:6379> auth foobaredOK

Disable the slave-role:

127.0.0.1:6379> slaveof no oneOK

Check its status now:

127.0.0.1:6379> info replicationReplicationrole:masterconnected_slaves:0master_repl_offset:1989repl_backlog_active:0repl_backlog_size:1048576

Add a new key one more time:

127.0.0.1:6379> set test2 ‘test2’OK

And get it back:

127.0.0.1:6379> get test2“test2”

Keep in mind that as we did those changes in Redis node directly — after its restart it will become a slave again as it’s still is set in its file with the parameter.

A Guide to Redis with Redisson | Baeldung

https://www.baeldung.com/redis-redisson

  • Overview
  • Maven Dependencies
  • Configuration
  • Operation
  • Objects
  • Collections
  • Locks and Synchronizers
  • Services
  • Pipelining
  • Low-Level Client

Redisson is a Redis client for Java. In this article, we’ll explore some of its features, and demonstrate how it could facilitate building distributed business applications. Redisson constitutes an in-memory data grid that offers distributed Java objects and services backed by Redis.Its distributed in-memory data model allows sharing of domain objects and services across applications and servers. In this article we’…

See more on baeldung.com

Redis Slave configuration

On the two hosts left make a slaves configuration.

It will be the same for both — just repeat it.

Install Redis:

root@redis-1:/home/admin# apt -y install redis-server

Edit the :

...slaveof redis-0.setevoy.org.ua 6379...masterauth foobared...requirepass foobared...

Here:

  • — set the master’s host and port
  • — master’s auth
  • — auth on this replica

Restart the service:

root@redis-1:/home/admin# systemctl restart redis

Check its status:

root@redis-1:/home/admin# redis-cli -a foobared info replicationReplicationrole:slavemaster_host:redis-0.setevoy.org.uamaster_port:6379master_link_status:upmaster_last_io_seconds_ago:5master_sync_in_progress:0…

Check log:

root@redis-1:/home/admin# tail -f /var/log/redis/redis-server.log16961:S 29 Mar 10:54:36.263 * Connecting to MASTER redis-0.setevoy.org.ua:637916961:S 29 Mar 10:54:36.308 * MASTER <-> SLAVE sync started16961:S 29 Mar 10:54:36.309 * Non blocking connect for SYNC fired the event.16961:S 29 Mar 10:54:36.309 * Master replied to PING, replication can continue…16961:S 29 Mar 10:54:36.310 * Partial resynchronization not possible (no cached master)16961:S 29 Mar 10:54:36.311 * Full resync from master: 93585eeb7e32c0550c35f8d4935c9a18c4177ab9:116961:S 29 Mar 10:54:36.383 * MASTER <-> SLAVE sync: receiving 92 bytes from master16961:S 29 Mar 10:54:36.383 * MASTER <-> SLAVE sync: Flushing old data16961:S 29 Mar 10:54:36.383 * MASTER <-> SLAVE sync: Loading DB in memory16961:S 29 Mar 10:54:36.383 * MASTER <-> SLAVE sync: Finished with success

Connection to the master established, syncronization is done — okay, check the data:

root@redis-1:/home/admin# redis-cli -a foobared get test“test”

Data present — all works here as well.

Настройка Master и ведомые узлы

tmux

  1. SSH на сервер 1 . Перейдите, чтобы затем скопировать . Файлы конфигурации в этом руководстве названы в соответствии с рисунком выше:
  2. В , прокомментируйте директиву и включите режим кластера. Порты в этом примере будут в диапазоне от 6379 до 6381.
    /redis-stable/a_master.conf
  3. В конфигурации будет аналогичным, за исключением обновления номера порта. будет использоваться позже, чтобы сконфигурировать это в ведомое устройство для соответствующего мастера, а не в директиву.
    /redis-stable/c_slave.conf
  4. Повторите этот процесс для двух оставшихся линодов, указав номера портов для всех пар «ведущий-ведомый».
    сервер Мастер рабыня
    1 6379 6381
    2 6380 6379
    3 6381 6380

1.3 Особенности и возможности кластеров

1. Две ключевые особенности кластеров:

  • Масштабируемость — производительность кластера не ограничивается одним сервисным объектом, новые сервисные объекты могут динамически добавляться в кластер, тем самым повышая производительность кластера. Динамически добавлять серверы
  • Высокая доступность —- Кластер использует избыточность сервисных объектов, чтобы клиенты не могли легко получать предупреждения о неработающих сервисах. В кластере одна и та же услуга может предоставляться несколькими объектами службы. Если один сервисный объект выходит из строя, другой сервисный объект берет на себя отказавший сервисный объект. Функция восстановления из объекта службы с ошибками в другой объект службы, предоставляемый кластером, повышает доступность приложения.

2. Две возможности кластера:

  • Балансировка нагрузки и балансировка нагрузки могут распределять задачи между вычислительными и сетевыми ресурсами в кластерной среде более сбалансированным образом.
  • Восстановление после ошибки — по какой-то причине ресурс, выполняющий определенную задачу, завершается неудачно, и ресурс, выполняющий ту же задачу в другом объекте службы, затем завершает задачу. Этот процесс, при котором ресурсы в одном объекте не могут работать, а ресурсы в другом объекте продолжают прозрачно выполнять задачи, называется исправлением ошибок.

4.2 Начать строить

(1) Скопируйте 6 серверов и измените их номера портов на 6379, 6380, 6381, 6382, 6383, 6384. (2) Установите следующие свойства в файле конфигурации redis.windows.conf:

  • cluster-enabled yes
  • cluster-config-file nodes-6379.conf
  • cluster-node-timeout 15000
  • appendonly yes

(3) Напишите скрипт запуска startup.bat, содержимое которого:

  • title redis-6379
  • redis-server.exe redis.windows.conf

(4) Установите Ruby, необходимо использовать кластер redis. (5) Установите драйвер Redis Rudy redis-xxxx.gem ссылка для скачивания:Rubygems официальный адрес загрузки Загрузите ZIP-файл, разархивируйте его после загрузки. Переключите текущий каталог в разархивированный каталог, такой как D: \ redis-cluster \ rubygems-3.0.6 \ rubygems-3.0.6 и выполните ruby ​​setup.rb из командной строки Используйте GEM для повторной установки Redis: перейдите в каталог установки redis, вам нужно выполнить gem install redis в командной строке (6) Запустите каждый узел и выполните сценарий построения кластера, щелкните для запуска каждого узла start.bat и скопируйте redis-trib.rb в узел redis 6379. выполните команду: redis-trib.rb create —replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 Появится . Могу ли я установить вышеуказанную конфигурацию? (введите «да», чтобы принять): Пожалуйста, подтвердите и введите «да».

Running Sentinel

To run a Sentinel daemon the can be used just with a separate config — .

First, let’s create such config file on the Redis Master host:

sentinel monitor redis-test redis-0.setevoy.org.ua 6379 2sentinel down-after-milliseconds redis-test 6001sentinel failover-timeout redis-test 60000sentinel parallel-syncs redis-test 1bind 0.0.0.0sentinel auth-pass redis-test foobared

Here:

  • — the master-node address to be monitored, and the 2 is the Sentinel’s instances number to make a decisions
  • — time after which master will be considered as out of order
  • — time to wait after changing slave=>master roles
  • — number of simultaneous slaves synchronization after the master changed

Run it:

root@redis-0:/home/admin# redis-server /etc/redis/sentinel.conf --sentinel...10447:X 29 Mar 14:15:53.195 # Sentinel ID is e9fb72c8edb8ec2028e6ce820b9e72e56e07cf1e

10447:X 29 Mar 14:15:53.195 # +monitor master redis-test 35.158.154.25 6379 quorum 2

10447:X 29 Mar 14:15:53.196 * +slave slave 3.121.223.95:6379 3.121.223.95 6379 @ redis-test 35.158.154.25 6379

10447:X 29 Mar 14:16:43.402 * +slave slave 18.194.45.17:6379 18.194.45.17 6379 @ redis-test 35.158.154.25 6379

Check Sentinel’s status using the 26379 port:

root@redis-0:/home/admin# redis-cli -p 26379 info sentinelSentinelsentinel_masters:1sentinel_tilt:0sentinel_running_scripts:0sentinel_scripts_queue_length:0sentinel_simulate_failure_flags:0master0:name=redis-test,status=ok,address=35.158.154.25:6379,slaves=2,sentinels=1

Here:

  • — master is UP
  • — it has two slaves
  • — only one Sentinel instance is running for now

You can get some basic information here, for example — the master’s IP:

root@redis-0:/home/admin# redis-cli -p 26379 sentinel get-master-addr-by-name redis-test1) “35.158.154.25”2) “6379”

Now repeat Sentinel start on both slaves nodes using the same config as we did on the master and in the Sentinel’s log you must see new instances connected:

…10447:X 29 Mar 14:18:40.437 * +sentinel sentinel fdc750c7d6388a6142d9e27b68172f5846e75d8c 172.31.36.239 26379 @ redis-test 35.158.154.25 637910447:X 29 Mar 14:18:42.725 * +sentinel sentinel ecddb26cd27c9a17c4251078c977761faa7a3250 172.31.35.218 26379 @ redis-test 35.158.154.25 6379…

Check status again:

root@redis-0:/home/admin# redis-cli -p 26379 info sentinelSentinelsentinel_masters:1sentinel_tilt:0sentinel_running_scripts:0sentinel_scripts_queue_length:0sentinel_simulate_failure_flags:0master0:name=redis-test,status=ok,address=18.194.229.23:6379,slaves=2,sentinels=3

— okay.

Also, Sentinel will perform its own settings updates when needed:

root@redis-1:/home/admin# cat /etc/redis/sentinel.confsentinel myid fdc750c7d6388a6142d9e27b68172f5846e75d8csentinel monitor redis-test 35.158.154.25 6379 2sentinel down-after-milliseconds redis-test 6001bind 0.0.0.0sentinel failover-timeout redis-test 60000# Generated by CONFIG REWRITEport 26379dir “/home/admin”sentinel auth-pass redis-test foobaredsentinel config-epoch redis-test 0sentinel leader-epoch redis-test 0sentinel known-slave redis-test 18.194.45.17 6379sentinel known-slave redis-test 3.121.223.95 6379sentinel known-sentinel redis-test 172.31.35.218 26379 ecddb26cd27c9a17c4251078c977761faa7a3250sentinel known-sentinel redis-test 172.31.47.184 26379 e9fb72c8edb8ec2028e6ce820b9e72e56e07cf1esentinel current-epoch 0

Here is the sentinel myid fdc750c7d6388a6142d9e27b68172f5846e75d8c line added and the whole block after the #Generated by CONFIG REWRITE.

Концептуальное непонимание

Redis высокая доступность

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

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

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

​ Нагрузочная способность Redis Sentinel такая же, как и у одноточечного Redis., Но вы можете использовать распределенные решения Redis, такие как Codis, Twemproxy, Redis cluster и т. Д., Чтобы увеличить пропускную способность Redis.

В среде генерации рекомендуется развернуть не менее двух подчиненных Redis и не менее трех экземпляров дозорных.

Переключатель устойчивости к бедствиям

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

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

Redis Cluster

Redis Cluster — это технология серверного шардинга, официально доступна версия 3.0. В Redis Cluster Sharding использует концепцию слота.Кластер использует формулу CRC16 (key)% 16384, чтобы вычислить, какому слоту принадлежит ключ. Каждый узел в кластере Redis отвечает за распределение части из 16384 слотов,Каждый слот соответствует узлу, отвечающему за обработку . Например, кластер может иметь три хэш-слота, из которых:

  • Узел A отвечает за обработку хеш-слотов от 0 до 5500.
  • Узел B отвечает за обработку хеш-слотов с 5501 по 11000.
  • Узел C отвечает за обработку хеш-слотов с 11001 по 16383.

Общая проблема

  • При динамическом добавлении или уменьшении узловых узловНеобходимо перераспределить 16384 слота (В полуавтоматическом состоянии требуется ручное вмешательство? Требуется проверка)
  • Redis Cluster должен гарантировать, что узлы, соответствующие слотам 16384, могут нормально работать. Если узел выходит из строя,Не только слоты, за которые он отвечает, не будет работать весь кластер
  • Кластеру Redis требуется как минимум 3 главных узла.Для обеспечения высокой доступности Redis каждому главному узлу требуется как минимум один подчиненный узел.Таким образом, кластеру Redis требуется как минимум 6 узлов, 3 главных узла, 3 подчиненных узла. 。
  • Redis Cluster сам по себе обеспечивает возможность переключения при отказе и отказоустойчивости,Новая возможность идентификации узлов Redis Cluster, оценка сбоев и возможность аварийного переключения Это происходит через каждый узел в кластере, связывающийся с другими узлами, что называется шиной кластера.Используйте номер внешнего служебного порта +10000 и специальный двоичный протокол для связи между узлами . Например, если номер порта узла — 7111, номер порта, который он связывает с другими узлами, — 17111.
  • Кластер рассматривается как единое целое, и клиент может подключаться к любому узлу для работы, как при работе с одним экземпляром Redis.Если ключ, управляемый клиентом, не назначен узлу, Redis вернет команду управления, чтобы указать на правильный узел.
  • Redis Cluster был официально запущен после Redis 3.0. В крупномасштабных производственных средах не так много успешных примеров, и требуется время, чтобы проверить

нота: Taken from the Redis Sentinel design draft 1.3

Redis Master configuration

Install Redis:

root@redis-0:/home/admin# apt -y install redis-server

Edit a and in the set interfaces to listen on:

...bind 0.0.0.0...

You can specify multitype IPs here separated by spaces:

...bind 127.0.0.1 18.194.229.23...

Other valuable options here:

  • — clear enough but keep it in mind
  • — slaves will be working in the read-only mode, doesn’t affect a master node
  • — password for master authorization
  • and — decrease data loss chance, see the

Restart the service:

root@redis-0:/home/admin# systemctl restart redis

Check it using for the password:

root@redis-0:/home/admin# redis-cli -a foobared pingPONG

Check data replication status:

root@redis-0:/home/admin# redis-cli -a foobared info replicationReplicationrole:masterconnected_slaves:0master_repl_offset:0repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0

Add a new data:

root@redis-0:/home/admin# redis-cli -a foobared set test ‘test’OK

Get it back:

root@redis-0:/home/admin# redis-cli -a foobared get test“test”

Okay — everything works here

Redis cluster: 3 master nodes minimum? — Server Fault

https://serverfault.com/questions/815764

Nov 18, 2016 · If you rely on Redis to fail over, you need a minimal of three master nodes and three slave nodes (a minimal of 3 servers, each running a master and a slave). If you use external cluster software, for example heartbeat, you can setup two nodes, one being master and one being slave in cluster mode, allocate all 16384 slots to the master, and use …

ubuntu 18.04 — Redis-cli —cluster create command is not … Oct 08, 2020
How to configure Redis Cluster inside a Kubernetes cluster …
redis-cluster — add-node slave to existing cluster from …
Can I change the MASTERAUTH value on a running Redis …

See more results

4.1 Подготовка

(1)Redis 3.2 требует 6 серверов redis. Создайте псевдокластер. требует 6 экземпляров redis. должен работать на другом порту 6379-6384 (2) среда выполнения языка Ruby. Для реализации построения кластера нам необходимо использовать скрипт ruby. Ruby, простой и быстрый объектно-ориентированный (объектно-ориентированное программирование) язык сценариев, был разработан японским Юкихиро Мацумото в 1990-х годах и соответствует соглашениям GPL и Ruby License , Его вдохновение и особенности происходят из языков Perl, Smalltalk, Eiffel, Ada и Lisp. Сам язык Ruby также разработал альтернативы языка Ruby другим платформам, таким как JRuby (платформа Java) и IronRuby (платформа .NET). Автор Ruby начал писать Ruby 24 февраля 1993 года, и он не был официально выпущен для fj (новостной группы) до декабря 1995 года. Поскольку Perl звучит так же, как и жемчужина июньского камня, Ruby назван в честь рубина июльского камня. (3) RubyGems, называемый gems, представляет собой систему упаковки Ruby, используемую для упаковки компонентов Ruby. (4) Драйвер Redis Ruby redis-xxxx.gem (5) Redis-trib.rb, инструмент для создания кластера Redis

Redis Sentinel Automatic Failover

Now let’s check what will happen if the master will go down.

You can do it manually just by calling or by using the and sending the command with a time in seconds to make a master «down» or by sending a signal to kill the master with.

root@redis-0:/home/admin# redis-cli -a foobared DEBUG sleep 30

The Sentinel’s log on the master:

…10447:X 29 Mar 14:24:56.549 # +sdown master redis-test 35.158.154.25 637910447:X 29 Mar 14:24:56.614 # +new-epoch 110447:X 29 Mar 14:24:56.615 # +vote-for-leader ecddb26cd27c9a17c4251078c977761faa7a3250 110447:X 29 Mar 14:24:56.649 # +odown master redis-test 35.158.154.25 6379 #quorum 3/210447:X 29 Mar 14:24:56.649 # Next failover delay: I will not start a failover before Fri Mar 29 14:26:57 201910447:X 29 Mar 14:24:57.686 # +config-update-from sentinel ecddb26cd27c9a17c4251078c977761faa7a3250 172.31.35.218 26379 @ redis-test 35.158.154.25 637910447:X 29 Mar 14:24:57.686 # +switch-master redis-test 35.158.154.25 6379 3.121.223.95 637910447:X 29 Mar 14:24:57.686 * +slave slave 18.194.45.17:6379 18.194.45.17 6379 @ redis-test 3.121.223.95 637910447:X 29 Mar 14:24:57.686 * +slave slave 35.158.154.25:6379 35.158.154.25 6379 @ redis-test 3.121.223.95 637910447:X 29 Mar 14:25:03.724 # +sdown slave 35.158.154.25:6379 35.158.154.25 6379 @ redis-test 3.121.223.95 6379…

Currently, we are interested in those two lines here:

…10384:X 29 Mar 14:24:57.686 # +config-update-from sentinel ecddb26cd27c9a17c4251078c977761faa7a3250 172.31.35.218 26379 @ redis-test 35.158.154.25 637910384:X 29 Mar 14:24:57.686 # +switch-master redis-test 35.158.154.25 6379 3.121.223.95 6379…

Sentinel performed the slave-to-master reconfiguration.

35.158.154.25 — is the old master which is dead now, and 3.121.223.95 is a new master, elected from the slaves — it’s running on the redis-1 host.

Try adding data here:

root@redis-1:/home/admin# redis-cli -a foobared set test3 ‘test3’OK

While a similar attempt on the old master which became a slave now will lead to an error:

root@redis-0:/home/admin# redis-cli -a foobared set test4 ‘test4’(error) READONLY You can’t write against a read only slave.

And let’s kill a node at all and see what Sentinel will do now:

root@redis-0:/home/admin# redis-cli -a foobared DEBUG SEGFAULTError: Server closed the connection

Log:

…10447:X 29 Mar 14:26:21.897 * +reboot slave 35.158.154.25:6379 35.158.154.25 6379 @ redis-test 3.121.223.95 6379

Well — Sentinel just restarted that node

The basic Master-Slave replication

In this way, slaves will be a master’s read-only replicas keeping the same data which will be added to the master.

Master will send all data updates to its slaves — new keys expire, etc.

In case of the link between master and slave will be broken — a slave will try to reconnect to the master and make a partial synchronization to update data from a place where the previous sync was interrupted.

In case of such a partial sync is not possible — the slave will ask the master for a full synchronization and master will perform its data full snapshot which will be sent to this slave after this a usual sync will be restored.

A couple of notes here to keep in mind:

  • one master can have multitype slaves
  • slaves can accept connections from other slaves, making kind of “cascade” of a replicated nodes — a master on the top, a slave(s) in the middle and a slave(s) at the bottom
  • it’s strongly recommended to enable data persistence on the master to avoid data loss — see the
  • slave will work in the read-only mode by default, see the

Redis Cluster спецификация

Основные свойства и дизайн кластера

Основные цели Redis Cluster в порядке их значимости в дизайне:

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

Redis Cluster не поддерживает базы и команду .

Redis Cluster Bus

Узлы кластера общаются между собой с помощью TCP по бинарному протоколу, который называется шиной кластера. По протоколу отправляются информация об узлах, сообщения очередей, пинги, а также пользовательские аварийные переключения. Так как Redis Cluster не может быть использован как прокси, то при редиректе на другие узлы в ответе будут сообщения типа , .

Скопируйте

2.1 Реализация старой версии

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

2.2 Внедрение новой версии

  • Полная повторная синхронизация.
  • Частичная повторная синхронизация.
    • Повторно скопируйте после обработки отключения.
    • Ведущему устройству нужно только отправить команду обновления во время отключения ведомому устройству и позволить ему выполнить.
      • Ведущее устройство и ведомое устройство поддерживают собственное смещение репликации и добавляют N при распространении и получении распространения соответственно.
    • Скопируйте буферную область невыполненной работы.
      • Очередь FIFO фиксированного размера, поддерживаемая мастером, размер по умолчанию составляет 1 МБ.
      • Во время распространения команды запишите команду в буферную область.
      • В буферной области также записывается соответствующее смещение для каждого байта в очереди.
      • Для ведомого устройства, которое отключено и повторно подключено, если данные после смещения все еще существуют в буферной области, используется частичная ресинхронизация, в противном случае требуется полная ресинхронизация.
      • Отрегулируйте размер буферной области в соответствии с продолжительностью повторного подключения после отключения ведомого устройства и частотой команды записи ведущего устройства.
    • Идентификатор запущенного сервера.

2.3 Обнаружение сердцебиения

  • Используется для определения статуса сетевого подключения главного и подчиненного серверов.
  • Помогите в реализации опции конфигурации min-slaves, чтобы предотвратить выполнение мастером команд записи в небезопасном состоянии.
  • Команда обнаружения отсутствует.

1.redis мастер-подчиненный (Master-Slave)

1). Концепция ведущий-ведомый

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

2). Конфигурация ведущий-ведомый

установка Redis

1> Загрузите и установите сжатый пакет redis
2> Разархивируйте и войдите в папку. Запустите команду ./make install, чтобы установить redis
3> После установки войдите в папку redis-5.0 / src, выполните ./redis-server, чтобы указать файл конфигурации для запуска redis
4> redis-cli по умолчанию подключается к клиенту redis через порт 6379 машины
1> Закомментируйте привязку 127.0.0.1 в файле конфигурации redis-conf
2> Закрыть режим защиты redis protected-mode no

Как упоминалось ранее, после комментирования bind 127.0.0.1. Подключиться может любой пользователь. Но в Redis есть режим защиты, который нужно отключить.

Измените атрибут защищенного режима yes в файле redis.conf на no

3> 2 папки с файлами под redis. Имя может быть master slave
4> Скопируйте redis.conf на главный и подчиненный
5> Измените порт slave / redis.conf на 6380
6> Добавить конфигурацию ведомого IP-порта
7> Выполните команду redis-server под src и укажите файлы конфигурации в качестве только что настроенных файлов конфигурации главного и подчиненного устройства.
1> Подключитесь к серверу Redis 6379 и выполните репликацию информации
2> Подключитесь к серверу redis 6380 и выполните репликацию информации
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: