Управление кластером Redis

RedisRedisBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе вы узнаете, как управлять кластером Redis. Лабораторная работа посвящена основным задачам управления кластером, включая инициализацию кластера, добавление узлов, проверку работоспособности кластера и перераспределение слотов (resharding slots).

Мы начнем с инициализации кластера Redis с помощью команды redis-cli --cluster, которая автоматизирует начальную конфигурацию. Затем вы научитесь добавлять новый узел с помощью CLUSTER MEET. Далее вы проверите работоспособность кластера с помощью CLUSTER INFO. Наконец, вы перераспределите слоты между узлами с помощью CLUSTER SETSLOT, чтобы сбалансировать кластер.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL redis(("Redis")) -.-> redis/RedisGroup(["Redis"]) redis/RedisGroup -.-> redis/setup_redis("Install Redis") redis/RedisGroup -.-> redis/launch_server("Start Redis Server") redis/RedisGroup -.-> redis/access_cli("Connect Using CLI") subgraph Lab Skills redis/setup_redis -.-> lab-552095{{"Управление кластером Redis"}} redis/launch_server -.-> lab-552095{{"Управление кластером Redis"}} redis/access_cli -.-> lab-552095{{"Управление кластером Redis"}} end

Инициализация кластера Redis

На этом шаге вы инициализируете кластер Redis с помощью команды redis-cli --cluster create. Эта команда упрощает процесс настройки функционального кластера Redis.

Что такое кластер Redis?

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

Зачем использовать redis-cli --cluster create?

Команда redis-cli --cluster create предоставляет простой способ создания кластера Redis, управления им и взаимодействия с ним. Она автоматизирует начальную конфигурацию и обнаружение узлов, что упрощает создание кластера.

Шаги:

  1. Запуск экземпляров Redis:

    Сначала необходимо настроить и запустить несколько экземпляров Redis. Для этой лабораторной работы мы будем использовать шесть экземпляров, работающих на портах с 7000 по 7005. Каждый экземпляр должен быть настроен с параметром cluster-enabled yes.

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

    REDIS_CONF="/etc/redis/redis.conf"
    for port in 7000 7001 7002 7003 7004 7005; do
      CONF_FILE="/etc/redis/redis-${port}.conf"
      sudo cp "$REDIS_CONF" "$CONF_FILE"
      sudo sed -i "s/^port 6379/port ${port}/g" "$CONF_FILE"
      sudo sed -i "s/^#cluster-enabled yes/cluster-enabled yes/g" "$CONF_FILE"
      sudo sed -i "s/^#cluster-config-file nodes.conf/cluster-config-file nodes-${port}.conf/g" "$CONF_FILE"
      sudo sed -i "s/^#cluster-node-timeout 15000/cluster-node-timeout 15000/g" "$CONF_FILE"
      sudo sed -i "s/^#appendonly no/appendonly yes/g" "$CONF_FILE"
      sudo redis-server "$CONF_FILE" &
    done
    sleep 5
  2. Создание кластера:

    Теперь используйте команду redis-cli --cluster create для создания кластера. Эта команда требует IP-адреса и порты начальных узлов.

    Откройте свой терминал и выполните следующую команду:

    redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
    • redis-cli --cluster create: Запускает процесс создания кластера.
    • 127.0.0.1:7000 127.0.0.1:7001 ... 127.0.0.1:7005: Адреса и порты экземпляров Redis.
    • --cluster-replicas 1: Указывает, что каждый главный узел (master node) должен иметь одну реплику.
  3. Подтверждение создания кластера:

    Инструмент redis-cli попросит вас подтвердить создание кластера. Введите yes и нажмите Enter.

    >>> Creating cluster
    >>> Performing hash slots allocation on 6 nodes...
    >>> Master[0] -> Slots 0 - 5460
    >>> Master[1] -> Slots 5461 - 10922
    >>> Master[2] -> Slots 10923 - 16383
    >>> Adding replica node to Master[0]
    >>> Adding replica node to Master[1]
    >>> Adding replica node to Master[2]
    >>> M: 49a4928719291928192819281928192819281928 127.0.0.1:7000
       slots:[0-5460] (5461 slots) master
    >>> M: 9281928192819281928192819281928192819281 127.0.0.1:7001
       slots:[5461-10922] (5462 slots) master
    >>> M: 19281928192819281928192819281928192819281 127.0.0.1:7002
       slots:[10923-16383] (5461 slots) master
    >>> S: 81928192819281928192819281928192819281928 127.0.0.1:7003
       replicates 49a4928719291928192819281928192819281928
    >>> S: 28192819281928192819281928192819281928192 127.0.0.1:7004
       replicates 9281928192819281928192819281928192819281
    >>> S: 928192819281928192819281928192819281928192 127.0.0.1:7005
       replicates 19281928192819281928192819281928192819281
    >>> Can I set the above configuration? (type 'yes' to accept): yes
    >>> Slots 0-5460 assigned to node 49a4928719291928192819281928192819281928
    >>> Slots 5461-10922 assigned to node 9281928192819281928192819281928192819281
    >>> Slots 10923-16383 assigned to node 19281928192819281928192819281928192819281
    >>> Adding replica 81928192819281928192819281928192819281928 to 49a4928719291928192819281928192819281928
    >>> Adding replica 28192819281928192819281928192819281928192 to 9281928192819281928192819281928192819281
    >>> Adding replica 928192819281928192819281928192819281928192 to 19281928192819281928192819281928192819281
    >>> [OK] All nodes agree about the cluster configuration.
    >>> >>> Check cluster info
    >>> >>> Nodes
    >>> M: 49a4928719291928192819281928192819281928 127.0.0.1:7000
       slots:[0-5460] (5461 slots) master
       1 additional replica(s)
    >>> M: 9281928192819281928192819281928192819281 127.0.0.1:7001
       slots:[5461-10922] (5462 slots) master
       1 additional replica(s)
    >>> M: 19281928192819281928192819281928192819281 127.0.0.1:7002
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
    >>> S: 81928192819281928192819281928192819281928 127.0.0.1:7003
       replicates 49a4928719291928192819281928192819281928
    >>> S: 28192819281928192819281928192819281928192 127.0.0.1:7004
       replicates 9281928192819281928192819281928192819281
    >>> S: 928192819281928192819281928192819281928192 127.0.0.1:7005
       replicates 19281928192819281928192819281928192819281
    >>> [OK] All nodes agree about the cluster configuration.
    >>> All 16384 slots covered.

    Этот вывод показывает распределение слотов по каждому главному узлу и назначение реплик.

  4. Подключение к кластеру:

    Подключитесь к кластеру Redis с помощью redis-cli. Это позволит вам выполнять команды в кластере.

    redis-cli -h 127.0.0.1 -p 7000
  5. Выход из redis-cli:

    Выйдите из сеанса redis-cli, чтобы команда была зарегистрирована.

    exit

Теперь вы успешно инициализировали кластер Redis. В следующих шагах мы рассмотрим, как добавлять узлы, проверять работоспособность кластера и перераспределять слоты.

Добавление нового узла в кластер

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

Понимание CLUSTER MEET

Команда CLUSTER MEET представляет новый узел Redis кластеру. Когда узел получает эту команду, он пытается подключиться к указанному узлу и начать процесс "рукопожатия" (handshake) , чтобы стать частью кластера.

Предварительные условия:

  • Кластер Redis, инициализированный, как описано в предыдущем шаге.
  • Новый экземпляр Redis, запущенный и настроенный как часть кластера, но еще не подключенный. Для этой лабораторной работы мы будем считать, что у вас есть новый экземпляр, работающий на порту 7006. Этот экземпляр должен быть запущен с опцией конфигурации cluster-enabled yes. Скрипт установки уже настроил и запустил этот экземпляр для вас.

Шаги:

  1. Подключение к существующему узлу:

    Подключитесь к одному из существующих узлов в кластере с помощью redis-cli. Не имеет значения, к какому узлу вы подключаетесь, поскольку команда CLUSTER MEET распространит информацию по всему кластеру.

    redis-cli -h 127.0.0.1 -p 7000
  2. Использование команды CLUSTER MEET:

    Теперь, когда вы подключены к узлу в кластере, используйте команду CLUSTER MEET, чтобы представить новый узел (порт 7006).

    CLUSTER MEET 127.0.0.1 7006
    • CLUSTER MEET: Команда для добавления нового узла.
    • 127.0.0.1: IP-адрес нового узла.
    • 7006: Номер порта нового узла.

    Вы должны увидеть следующий вывод:

    OK

    Это указывает на то, что команда была успешно отправлена.

  3. Выход из redis-cli:

    Выйдите из сеанса redis-cli, чтобы команда была зарегистрирована.

    exit

Вы успешно добавили новый узел в кластер Redis. На следующем шаге мы проверим работоспособность кластера.

Проверка работоспособности кластера

На этом шаге вы узнаете, как проверить работоспособность и состояние вашего кластера Redis с помощью команды CLUSTER INFO. Эта команда предоставляет ценную информацию об общем состоянии кластера.

Понимание CLUSTER INFO

Команда CLUSTER INFO возвращает информацию о кластере Redis, которую можно использовать для мониторинга его работоспособности и диагностики проблем.

Предварительные условия:

  • Кластер Redis, инициализированный и с добавленным новым узлом, как описано в предыдущих шагах.

Шаги:

  1. Подключение к узлу кластера:

    Подключитесь к любому из узлов в кластере с помощью redis-cli.

    redis-cli -h 127.0.0.1 -p 7000
  2. Выполнение команды CLUSTER INFO:

    Используйте команду CLUSTER INFO для получения информации о кластере.

    CLUSTER INFO

    Вы должны увидеть вывод, подобный следующему:

    cluster_state:ok
    cluster_slots_assigned:16384
    cluster_slots_ok:16384
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:7
    cluster_size:3
    cluster_current_epoch:7
    cluster_my_epoch:7
    ...
  3. Интерпретация вывода:

    Вот разбивка некоторых ключевых показателей:

    • cluster_state:ok: Кластер находится в работоспособном состоянии.
    • cluster_slots_assigned:16384: Количество слотов (slots), назначенных узлам.
    • cluster_slots_ok:16384: Количество слотов, функционирующих правильно.
    • cluster_slots_pfail:0: Количество слотов в состоянии "потенциально сбойных" (potentially failing).
    • cluster_slots_fail:0: Количество слотов в состоянии "сбойных" (failing).
    • cluster_known_nodes:7: Общее количество узлов, о которых знает текущий узел.
    • cluster_size:3: Количество главных узлов (master nodes) в кластере.
  4. Выход из redis-cli:

    Выйдите из сеанса redis-cli, чтобы команда была зарегистрирована.

    exit

Вы успешно проверили работоспособность своего кластера Redis с помощью команды CLUSTER INFO.

Перераспределение слотов на новый узел (Reshard Slots)

На этом шаге вы узнаете, как перераспределить слоты (re-shard slots) в кластере Redis с помощью команды redis-cli --cluster reshard. Это важно для равномерного распределения данных, особенно после добавления новых узлов.

Понимание слотов Redis и перераспределения (Resharding)

Кластер Redis делит пространство ключей (keyspace) на 16384 слота. Каждый главный узел (master node) отвечает за подмножество этих слотов. Когда вы добавляете новый узел, он изначально не владеет никакими слотами. Перераспределение (resharding) перемещает слоты с существующих узлов на новый узел, балансируя данные и рабочую нагрузку.

Шаги:

  1. Подключение к кластеру с использованием redis-cli --cluster:

    Для выполнения операции перераспределения (resharding) вы будете использовать команду redis-cli --cluster reshard. Эта команда предоставляет интерактивный способ перераспределения слотов по всему кластеру.

    Откройте свой терминал и выполните следующую команду:

    redis-cli --cluster reshard 127.0.0.1:7000

    Эта команда подключается к кластеру Redis через узел по адресу 127.0.0.1:7000 и запускает процесс перераспределения (resharding).

  2. Укажите количество слотов для перемещения:

    Инструмент redis-cli предложит вам ввести количество слотов, которые вы хотите переместить. В этом примере давайте переместим 101 слот на новый узел.

    How many slots do you want to move? (default: all)

    Введите 101 и нажмите Enter.

  3. Введите идентификатор целевого узла (Target Node ID):

    Далее инструмент попросит вас ввести идентификатор узла (node ID) целевого узла, которым является новый узел, добавленный вами на предыдущем шаге (порт 7006). Чтобы найти идентификатор узла, вы можете использовать команду CLUSTER NODES, как показано в предыдущих шагах, или вы можете использовать следующую команду, чтобы получить идентификатор узла напрямую:

    redis-cli -h 127.0.0.1 -p 7006 cluster nodes | grep myself | awk '{print $1}'

    Скопируйте идентификатор узла из вывода. Инструмент redis-cli предложит вам:

    What is the receiving node ID?

    Вставьте идентификатор узла и нажмите Enter.

  4. Укажите исходные узлы (Source Nodes):

    Инструмент попросит вас указать исходные узлы, с которых нужно взять слоты. Вы можете ввести all, чтобы перераспределить слоты со всех существующих главных узлов (master nodes).

    Please enter all the source node IDs.
      Type 'all' to use all the nodes as source nodes for the hash slots.
      Type 'done' to stop entering IDs.

    Введите all и нажмите Enter.

  5. Подтвердите план перераспределения (Resharding Plan):

    Инструмент redis-cli отобразит план перераспределения (resharding plan) и попросит вас подтвердить его.

    Do you want to proceed with the reshard plan? (type 'yes' to accept):

    Введите yes и нажмите Enter, чтобы начать процесс перераспределения (resharding).

  6. Дождитесь завершения перераспределения (Resharding):

    Инструмент redis-cli теперь переместит слоты с исходных узлов на целевой узел. Этот процесс может занять некоторое время, в зависимости от объема данных в кластере. Вы увидите сообщения о ходе выполнения по мере перемещения слотов.

  7. Выход из redis-cli:

После завершения перераспределения (resharding) выйдите из сеанса redis-cli.

```redis
exit
```

Вы успешно перераспределили слоты (re-sharded slots) в своем кластере Redis с помощью команды redis-cli --cluster reshard. Это гарантирует, что данные будут более равномерно распределены по кластеру, включая новый узел.

Итог

В этой лабораторной работе вы научились управлять кластером Redis. Вы начали с инициализации кластера с помощью redis-cli --cluster create, затем добавили новый узел с помощью CLUSTER MEET. Вы проверили работоспособность кластера с помощью CLUSTER INFO и, наконец, перераспределили слоты (re-sharded slots) с помощью redis-cli --cluster reshard, чтобы сбалансировать кластер. Это важные задачи для управления кластером Redis и обеспечения его масштабируемости и высокой доступности (high availability).