Режим кластера Redis: единая точка Redis, ведущий-ведомый Redis, Sentinel Redis, Кластерный кластер Redis

Redis

содержание

Redis single point, redis master-slave, redis sentinel sentinel, построение и использование конфигурации кластера redis
1 .redis 安装及配置
  1.1 redis 单点
    1.1.2 在命令窗口操作redis
    1.1.3 使用jedis客户端操作redis
    1.1.4 使用spring-redis操作
    1.1.5 使用Lettuce操作redis
  1.2 redis 主从
  1.3 哨兵sentinel
    1.3.2 哨兵sentinel配置
    1.3.3 启动哨兵,使用jedis连接哨兵操作redis
    1.3.4 编写程序&运行
    1.3.5模拟主节点宕机情况
  1.4 redis cluster
    1.4.1 配置 redis cluster 集群
    1.4.2启动redis集群
    1.4.3 使用jedis连接redis cluster 集群
  1.5 总结

Redis single point, redis master-slave, redis sentinel sentinel, построение и использование конфигурации кластера redis
Redis — это одно из наиболее широко используемых сегодня промежуточных программ интернет-компаниями.Мы открываем GitHub для поиска redis и видим, что введение проекта выглядит следующим образом:

Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, HyperLogLogs, Bitmaps.

Из этого предложения мы можем извлечь ключевые слова его характеристик:
База данных в памяти, База данных в памяти
поддержка: строки, списки, наборы, хэши, гиперлоги, растровые изображения
То есть высокая производительность, поддержка многих типов данных. В этой статье предполагается, что вы уже понимаете основы использования Redis, а затем обсуждается единая точка, высокая доступность и кластеризация Redis.

1 .redis установка и настройка

Установка Redis очень проста, откройте официальный сайт Redisredis.io.

  1. Загрузите последнюю версию установочного пакета, например redis-version.tar.gz.
  2. распаковатьtar zxvf redis-version.tar.gz
  3. Выполнить make (выполнение этой команды может сообщить об ошибке, такой как gcc, вы можете решить ее по очереди)

Если это компьютер Mac, установить Redis будет очень просто.brew install redisВот и все.

После установки redis давайте использовать его без паники и сначала сделать некоторую настройку. Открытымredis.confфайл, мы в основном ориентируемся на следующую конфигурацию:

port 6379             # 指定端口为 6379,也可自行修改 
daemonize yes         # 指定后台运行

1.1 Redis Onow

После установки Redis запустим его. Команда для запуска Redis:

redishome/bin/redis-server path/to/redis.config

Предполагая, что мы не настраиваем фоновый запуск (т.е. daemonize no), мы увидим следующий журнал запуска:

93825:C 20 Jan 2019 11:43:22.640 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
93825:C 20 Jan 2019 11:43:22.640 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=93825, just started
93825:C 20 Jan 2019 11:43:22.640 # Configuration loaded
93825:S 20 Jan 2019 11:43:22.641 * Increased maximum number of open files to 10032 (it was originally set to 256).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 5.0.3 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6380
 |    `-._   `._    /     _.-'    |     PID: 93825
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'   

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

1.1.2 Управление redis в командном окне

Используйте команду:telnet localhost 6379для подключения к Redis, или вы можете использовать код напрямую для подключения теста. После подключения вы увидите следующую информацию:

Connected to localhost.
Escape character is '^]'.

Попробуем ввести несколько команд:

set hello world     设置key-value
get hello           获取key值
expire hello 10     设置10秒过期
ttl hello           查看过期时间
del hello           删除key

Таким образом, мы испытали Redis, который, можно сказать, очень прост. Только что мы использовали командную строку для работы с Redis.Давайте воспользуемся кодом для работы с Redis.Возьмем Java в качестве примера, мы используем java-redis-клиент с открытым исходным кодом.

1.1.3 Использование клиента jedis для работы с Redis

Откройте GitHub, найдите redis, и после входа на домашнюю страницу проекта мы увидим, как его использовать:

  1. Добавить зависимость от джедая

    redis.clients jedis 3.0.0 jar compile
  2. Напишите код следующим образом

    Jedis jedis = new Jedis("localhost",6379);

    jedis.set("hello", "world");

    String value = jedis.get("hello");

    System.out.println(value); // get world

    jedis.del("hello");

    System.out.println(jedis.get("hello"));// get null

1.1.4 Работа с spring-redis

Приведенный выше пример jedis, работающего с redis, очень прост: помимо jedis вы также можете использовать spring-redis. Действуйте следующим образом

  1. настроить редис

  2. Написать код

    public class Example {

    // inject the actual template
    @Autowired
    private RedisTemplate<String, String> template;
    
    // inject the template as ListOperations
    // can also inject as Value, Set, ZSet, and HashOperations
    @Resource(name="redisTemplate")
    private ListOperations<String, String> listOps;
    
    public void addLink(String userId, URL url) {
        listOps.leftPush(userId, url.toExternalForm());
        // or use template directly
        redisTemplate.boundListOps(userId).leftPush(url.toExternalForm());
    }
    

    }

1.1.5 Использование Lettuce для управления Redis

Салат на основе неттинеблокирующийКлиент Redis. Поддерживает Java8 и отзывчивость. Его официальный сайтlettuce.io/. Салат и весной также можно использовать с.
Чтобы использовать салат, вам нужно добавить следующие зависимости Maven:

<dependency>
    <groupId>io.lettuce</groupId>
    <artifactId>lettuce-core</artifactId>
    <version>5.1.5.RELEASE</version>
</dependency>

Базовый пример кода get, set выглядит следующим образом:

public class LettuceTest {

    public static void main(String[] args) {
        RedisURI uri = new RedisURI();
        uri.setHost("myredishost");
        uri.setPort(6379);
        uri.setDatabase(0);
        RedisClient redisClient = RedisClient.create(uri);
        StatefulRedisConnection<String, String> connection = redisClient.connect();
        RedisCommands<String, String> syncCommands = connection.sync();

        syncCommands.set("testKey", "Hello, Redis!");
        System.out.println(syncCommands.get("testKey"));
        
        connection.close();
        redisClient.shutdown();
    }
}

1.2 master-slave redis

Выше мы запустили редис и работали с ним. Конечно, это всего лишь экспериментальная игра. Предположим, мы используем Redis в нашей производственной среде, что мне делать, если Redis зависает? Если вы дождетесь, пока операция и обслуживание перезапустят Redis и восстановят данные, это может занять много времени. Тогда в этот период наш сервис недоступен, чего нельзя допускать. Предположим, мы становимся master-slave, и после того, как главная библиотека зависает, эксплуатация и обслуживание позволяют подчиненной библиотеке взять на себя управление, тогда служба может продолжать работать, как так называемая готовность.

Конфигурация master-slave в redis очень проста, процесс выглядит следующим образом (в случае демонстрации ps конфигурация master-slave находится на одном компьютере):

  1. Скопируйте два файла конфигурации Redis (для запуска двух Redis вам понадобится только одна программа Redis и два разных файла конфигурации Redis)

    mkdir redis-master-slave cp path/to/redis/conf/redis.conf path/to/redis-master-slave master.conf cp path/to/redis/conf/redis.conf path/to/redis-master-slave slave.conf

  2. Изменить настройку

    master.conf

    port 6379

    master.conf

    port 6380 slaveof 127.0.0.1 6379

  3. Запустите два редиса отдельно

    redis-server path/to/redis-master-slave/master.conf redis-server path/to/redis-master-slave/slave.conf

После запуска откройте два окна командной строки и выполните telnet localhost 6379 telnet localhost 6380
Затем выполните информационную команду в двух окнах соответственно, вы можете увидеть

# Replication
role:master

# Replication
role:slave
master_host:127.0.0.1
master_port:6379

Конфигурация master-slave в порядке.

Затем после того, как главное окно выполнит set, перейдите в подчиненное окно, чтобы выполнить get, вы можете получить его, указав, что синхронизация master-slave прошла успешно.

В это время, если мы выполним set в подчиненном окне, будет сообщено об ошибке:

-READONLY You can't write against a read only replica.

Поскольку узел доступен только для чтения.

1.3 Страж

Выше мы представили master-slave Библиотека slave действует как «марионетка» и может «дополнять» и «брать на себя» при необходимости. Конфигурация master-slave, которую мы настроили, должна быть «подготовлена». После зависания главного redis вы можете немедленно переключиться на подчиненный redis. Это может занять всего несколько минут, но все же требует ручного управления. Предположим, главный редис зависает в 23 часа ночи, а вам звонят через 10 минут, и начальник просит побыстрее его починить, вот вы встаете с кровати и исправляете, не правда ли? Головная боль. Если вы отключитесь, и кто-то еще узнает пароль сервера, разве система не выключится за одну ночь? слишком пугающе.

Вот где Redis Sentinel пригодится. Sentinel обычно переводится как sentinel, то есть часовой, здесь он используется для наблюдения за работоспособностью master и slave узлов. Когда клиент подключается к главному и подчиненному узлам Redis, он сначала подключается к Sentinel, и Sentinel сообщает клиенту, какой адрес у главного Redis, а затем клиент подключается к Redis и выполняет последующие операции. Когда мастер-узел зависает, клиент не может установить соединение и сообщает об ошибке.Клиент пытается снова отправить дозорного, чтобы запросить адрес главного мастера, а затем клиент получает [новоизбранный мастер redis], и тогда он может работать счастливо снова.

1.3.2 Конфигурация Sentinel

Чтобы проиллюстрировать полезность дозорного, давайте проведем эксперимент. Настройте 3 redis (1 главный и 2 подчиненных) и 1 дозорный. Действуйте следующим образом:

mkdir redis-sentinel
cd redis-sentinel
cp redis/path/conf/redis.conf path/to/redis-sentinel/redis01.conf
cp redis/path/conf/redis.conf path/to/redis-sentinel/redis02.conf
cp redis/path/conf/redis.conf path/to/redis-sentinel/redis03.conf
touch sentinel.conf

Выше мы создали 3 файла конфигурации Redis, 1 файл конфигурации Sentinel. Мы устанавливаем redis01 в качестве главного, а redis02 и redis03 в качестве подчиненных.

vim redis01.conf
port 63791

vim redis02.conf
port 63792
slaveof 127.0.0.1 63791

vim redis03.conf
port 63793
slaveof 127.0.0.1 63791

vim sentinel.conf
daemonize yes
port 26379
sentinel monitor mymaster 127.0.0.1 63793 1   # 下面解释含义

Все вышеперечисленное знакомо с конфигурацией master-slave, нужно пояснить только конфигурацию Sentinel sentinel.conf:

mymaster        为主节点名字,可以随便取,后面程序里边连接的时候要用到
127.0.0.1 63793 为主节点的 ip,port
1               后面的数字 1 表示选举主节点的时候,投票数。1表示有一个sentinel同意即可升级为master

1.3.3 Запустите Sentinel и используйте jedis для подключения Sentinel для работы с Redis.

Выше мы настроили redis master-slave, 1 master, 2 slave и 1 sentinel. Запустим отдельно redis и запустим дозорный

redis-server path/to/redis-sentinel/redis01.conf
redis-server path/to/redis-sentinel/redis02.conf
redis-server path/to/redis-sentinel/redis03.conf

redis-server path/to/redis-sentinel/sentinel.conf --sentinel

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

1.3.4 Написать программу и запустить

Следующая программа используется для подключения дозорного и управления redis.

   public static void main(String[] args) throws Exception{

        Set<String> hosts = new HashSet<>();
        hosts.add("127.0.0.1:26379");
        //hosts.add("127.0.0.1:36379"); 配置多个哨兵
       
        JedisSentinelPool pool = new JedisSentinelPool("mymaster",hosts);
        Jedis jedis = null;

        for(int i=0 ;i<20;i++){
            Thread.sleep(2000);

            try{

                jedis = pool.getResource();
                String v = randomString();
                jedis.set("hello",v);

                System.out.println(v+"-->"+jedis.get("hello").equals(v));

            }catch (Exception e){
                System.out.println(" [ exception happened]" + e);
            }
        }
    }

Программа очень проста, запускается 20 раз в петле, подключите Sentinel, установите случайную строку в Redis и получить результат. Распечатать информацию и выдвигать исключения.

1.3.5 Моделирование случая, когда главный узел не работает

Запустите указанную выше программу (Обратите внимание, что при экспериментировании с этим эффектом вы можете увеличить время ожидания или увеличить цикл for, чтобы предотвратить преждевременную остановку программы, и неудобно видеть общий эффект.), а затем отключите основной Redis, чтобы смоделировать ситуацию, когда Redis зависает. Теперь основной редис — это redis01, а порт — 63791.

redis-cli -p 63791 shutdown

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

# Sentinel ID is fd0634dc9876ec60da65db5ff1e50ebbeefdf5ce
# +monitor master mymaster 127.0.0.1 63791 quorum 1
* +slave slave 127.0.0.1:63792 127.0.0.1 63792 @ mymaster 127.0.0.1 63791
* +slave slave 127.0.0.1:63793 127.0.0.1 63793 @ mymaster 127.0.0.1 63791
# +sdown master mymaster 127.0.0.1 63791
# +odown master mymaster 127.0.0.1 63791 #quorum 1/1
# +new-epoch 1
# +try-failover master mymaster 127.0.0.1 63791
# +vote-for-leader fd0634dc9876ec60da65db5ff1e50ebbeefdf5ce 1
# +elected-leader master mymaster 127.0.0.1 63791
# +failover-state-select-slave master mymaster 127.0.0.1 63791
# +selected-slave slave 127.0.0.1:63793 127.0.0.1 63793 @ mymaster 127.0.0.1 63791
* +failover-state-send-slaveof-noone slave 127.0.0.1:63793 127.0.0.1 63793 @ mymaster 127.0.0.1 63791
* +failover-state-wait-promotion slave 127.0.0.1:63793 127.0.0.1 63793 @ mymaster 127.0.0.1 63791
# +promoted-slave slave 127.0.0.1:63793 127.0.0.1 63793 @ mymaster 127.0.0.1 63791
# +failover-state-reconf-slaves master mymaster 127.0.0.1 63791
* +slave-reconf-sent slave 127.0.0.1:63792 127.0.0.1 63792 @ mymaster 127.0.0.1 63791
* +slave-reconf-inprog slave 127.0.0.1:63792 127.0.0.1 63792 @ mymaster 127.0.0.1 63791
* +slave-reconf-done slave 127.0.0.1:63792 127.0.0.1 63792 @ mymaster 127.0.0.1 63791
# +failover-end master mymaster 127.0.0.1 63791
# +switch-master mymaster 127.0.0.1 63791 127.0.0.1 63793
* +slave slave 127.0.0.1:63792 127.0.0.1 63792 @ mymaster 127.0.0.1 63793
* +slave slave 127.0.0.1:63791 127.0.0.1 63791 @ mymaster 127.0.0.1 63793
# +sdown slave 127.0.0.1:63791 127.0.0.1 63791 @ mymaster 127.0.0.1 63793
# -sdown slave 127.0.0.1:63791 127.0.0.1 63791 @ mymaster 127.0.0.1 63793
* +convert-to-slave slave 127.0.0.1:63791 127.0.0.1 63791 @ mymaster 127.0.0.1 63793

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

初始情况下,1主2从
# +monitor master mymaster 127.0.0.1 63791 quorum 1
* +slave slave 127.0.0.1:63792 127.0.0.1 63792 @ mymaster 127.0.0.1 63791
* +slave slave 127.0.0.1:63793 127.0.0.1 63793 @ mymaster 127.0.0.1 63791
发现主挂了,准备 故障转移
# +try-failover master mymaster 127.0.0.1 63791
将主切换到了 63793 即redis03 
# +switch-master mymaster 127.0.0.1 63791 127.0.0.1 63793

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

14:45:20.675 [main] INFO redis.clients.jedis.JedisSentinelPool - Trying to find master from available Sentinels...
14:45:25.731 [main] DEBUG redis.clients.jedis.JedisSentinelPool - Connecting to Sentinel 192.168.1.106:26379
14:45:25.770 [main] DEBUG redis.clients.jedis.JedisSentinelPool - Found Redis master at 127.0.0.1:63792
14:45:25.771 [main] INFO redis.clients.jedis.JedisSentinelPool - Redis master running at 127.0.0.1:63792, starting Sentinel listeners...
14:45:25.871 [main] INFO redis.clients.jedis.JedisSentinelPool - Created JedisPool to master at 127.0.0.1:63792
ejahaeegig-->true
deeeadejjf-->true
 [ exception happened]redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
 [ exception happened]........
 [ exception happened]........
 [ exception happened]........
 [ exception happened]........
 [ exception happened]........
 [ exception happened]........
 [ exception happened]........
 [ exception happened]........
 [ exception happened]........
 14:46:02.737 [MasterListener-mymaster-[192.168.1.106:26379]] DEBUG redis.clients.jedis.JedisSentinelPool - Sentinel 192.168.1.106:26379 published: mymaster 127.0.0.1 63792 127.0.0.1 63793.
14:46:02.738 [MasterListener-mymaster-[192.168.1.106:26379]] INFO redis.clients.jedis.JedisSentinelPool - Created JedisPool to master at 127.0.0.1:63793
haiihiihbb-->true
ifgebdcicd-->true
aajhbjagag-->true

Process finished with exit code 0

Из результатов

Начал нормальную работу Redis, и дважды его настраивал.
Главный редис зависает, джедаи не могут получить соединение, и сообщается об ошибке JedisConnectionException: Не удалось получить ресурс из пула
Пока не выбран основной редис, программа продолжает сообщать об ошибках.
Выбран основной редис, программа работает нормально и, наконец, завершается.
Мы видим, что значение, установленное в последнем прогоне, равно aajhbjagag, мы можем подключиться к любому из оставшихся 2-х редисов, получить приветствие, и результат должен быть таким же.

1.4 redis cluster

В предыдущих главах мы изучили redis single point, redis master-slave и добавили высокодоступный дозорный режим. Работа, которую мы проделали, заключается только в обеспечении резервного копирования данных и высокой доступности.До сих пор наша программа всегда записывала данные в один редис, а другие редисы были просто резервными копиями. В реальных сценариях один узел Redis может не соответствовать требованиям, потому что:

  • Параллельный ограниченный одиночный Redis
  • Один редис получает все данные, и в итоге памяти слишком много, и памяти слишком много, и файла rdb слишком много, Синхронно восстанавливать данные из большого файла rdb будет очень медленно.

Все, нам нужен кластер Redis, который является кластером Redis.

Кластер Redis — этоОбмен данными между несколькими узлами Redisсборка.

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

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

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

Для того, чтобы настроить redis-кластер, нам нужно подготовить как минимум 6 redis, почему хотя бы 6? Мы можем найти следующее предложение в официальной документации Redis:

Note that the minimal cluster that works as expected requires to contain at least three master nodes. 

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

1.4.1 Настройка кластера Redis

Как упоминалось выше, для настройки кластера Redis требуется как минимум 6 узлов Redis. Поэтому узлы, которые нам нужно подготовить и настроить, следующие:

主:redis01  从 redis02    slaveof redis01
主:redis03  从 redis04    slaveof redis03
主:redis05  从 redis06    slaveof redis05


mkdir redis-cluster
cd redis-cluster
mkdir redis01 到 redis06 6个文件夹
cp redis.conf 到 redis01 ... redis06
修改端口
分别配置3组主从关系

1.4.2 Запуск кластера Redis

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

redis-5.0.3/src/redis-cli --cluster create 127.0.0.1:6371 127.0.0.1:6372 127.0.0.1:6373 127.0.0.1:6374 127.0.0.1:6375 127.0.0.1:6376 --cluster-replicas 1

Обратите внимание, что здесь используется ip:port, а не domain:port, потому что я получаю сообщение об ошибке при использовании чего-то вроде localhost:6371:

ERR Invalid node address specified: localhost:6371

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

cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:1515
cluster_stats_messages_pong_sent:1506
cluster_stats_messages_sent:3021
cluster_stats_messages_ping_received:1501
cluster_stats_messages_pong_received:1515
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:3021

Мы видим, чтоcluster_state:ok,cluster_slots_ok:16384,cluster_size:3.

1.4.3 Используйте jedis для подключения к кластеру Redis

Выше мы настроили кластер Redis, включающий 6 узлов Redis, 3 ведущих и 3 подчиненных. Давайте используем jedis для подключения к кластеру Redis. код показывает, как показано ниже:

    public static void main(String[] args) {

        Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
        //Jedis Cluster will attempt to discover cluster nodes automatically
        jedisClusterNodes.add(new HostAndPort("127.0.0.1", 6371));
        jedisClusterNodes.add(new HostAndPort("127.0.0.1", 6372));
        jedisClusterNodes.add(new HostAndPort("127.0.0.1", 6373));
        jedisClusterNodes.add(new HostAndPort("127.0.0.1", 6374));
        jedisClusterNodes.add(new HostAndPort("127.0.0.1", 6375));
        jedisClusterNodes.add(new HostAndPort("127.0.0.1", 6376));
        JedisCluster jc = new JedisCluster(jedisClusterNodes);
        jc.set("foo", "bar");
        String value = jc.get("foo");
        System.out.println(" ===> " + value);
    }

Сверху устанавливаем информациюset foo bar, но я не знаю, на какой Redis он установлен. Пожалуйста, подумайте об этом, мы находимся в режиме кластера, поэтому данные разбросаны по разным слотам. Кластер Redis имеет 16384 хэш-слота. После того, как каждый ключ проходит проверку CRC16, модуль 16384 используется для определения, какой слот разместить. Каждый узел отвечает за часть хеш-слота, например, если в текущем кластере 3 узла, то:

  • Узел A содержит хеш-слоты от 0 до 5500.
  • Узел B содержит хеш-слоты с 5501 по 11000.
  • 11001 к узлу C содержит номер хеш-слота 16384.

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

Суммировать

До сих пор мы понимали и практиковали установку redis, redis single point, redis master-slave, redis sentinel sentinel, redis cluster cluster.
Давайте разберемся в разнице и взаимосвязи между redis master-slave, redis sentinel и redis machine.

Redis master-slave: это отношения резервного копирования, мы работаем с главной библиотекой, и данные также будут синхронизированы с подчиненной библиотекой. Если основная библиотечная машина выйдет из строя, подчиненная библиотека может выйти из строя. Это похоже на то, что вы потеряли диск D, но у вас есть резервная копия на жестком диске вашего мобильного телефона.
Redis Sentinel: Sentinel гарантирует высокую доступность и автоматический переход на другой ресурс в особых случаях.Sentinel смотрит на ваш «кластер redis master-slave».Если главная библиотека умирает, она сообщит вам, кто новый босс.
Кластер Redis: Кластер гарантирует высокий параллелизм, потому что некоторые братья помогают совмещать его. При этом кластеризация приведет к разбросу данных, и весь redis-кластер будет разбит на кучу слотов данных, то есть в разные слоты будут помещены разные ключи.

Master-Slave обеспечивает резервное копирование данных, Sentinel обеспечивает высокую доступность, то есть отказоустойчивость, а кластер обеспечивает высокий параллелизм.

Все будет знакомо после того, как вы это сделаете.