Gerenciamento de Cluster Redis

RedisBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como gerenciar um cluster Redis. O laboratório se concentra em tarefas essenciais de gerenciamento de cluster, incluindo a inicialização de um cluster, adição de nós, verificação da integridade do cluster e resharding de slots.

Começaremos inicializando um cluster Redis usando o comando redis-cli --cluster, que automatiza a configuração inicial. Em seguida, você aprenderá a adicionar um novo nó usando CLUSTER MEET. Depois, você verificará a integridade do cluster com CLUSTER INFO. Finalmente, você fará o resharding de slots entre os nós usando CLUSTER SETSLOT para balancear o cluster.

Inicialize o Cluster Redis

Nesta etapa, você inicializará um cluster Redis usando o comando redis-cli --cluster create. Este comando simplifica o processo de configuração de um cluster Redis funcional.

O que é um Cluster Redis?

Um cluster Redis é uma configuração distribuída que divide automaticamente os dados em vários nós Redis. Isso permite que você dimensione sua implantação Redis horizontalmente e gerencie conjuntos de dados maiores do que uma única instância Redis pode lidar.

Por que usar redis-cli --cluster create?

O comando redis-cli --cluster create fornece uma maneira direta de criar, gerenciar e interagir com um cluster Redis. Ele automatiza a configuração inicial e a descoberta de nós, facilitando a criação do cluster.

Passos:

  1. Iniciar Instâncias Redis:

    Primeiro, você precisa configurar e iniciar várias instâncias Redis. Para este laboratório, usaremos seis instâncias em execução nas portas 7000 a 7005. Cada instância precisa ser configurada com cluster-enabled yes.

    Para fazer isso, você pode usar os seguintes comandos para criar arquivos de configuração e iniciar as instâncias Redis. Observe que esses comandos são para fins de demonstração. O script de configuração já configurou e iniciou essas instâncias para você.

    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. Criar o Cluster:

    Agora, use o comando redis-cli --cluster create para criar o cluster. Este comando requer os endereços IP e as portas dos nós iniciais.

    Abra seu terminal e execute o seguinte comando:

    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: Inicia o processo de criação do cluster.
    • 127.0.0.1:7000 127.0.0.1:7001 ... 127.0.0.1:7005: Os endereços e portas das instâncias Redis.
    • --cluster-replicas 1: Especifica que cada nó mestre deve ter uma réplica.
  3. Confirmar a Criação do Cluster:

    A ferramenta redis-cli pedirá que você confirme a criação do cluster. Digite yes e pressione 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.

    Esta saída mostra a alocação de slots para cada nó mestre e a atribuição de réplicas.

  4. Conectar ao Cluster:

    Conecte-se ao cluster Redis usando redis-cli. Isso permite que você execute comandos no cluster.

    redis-cli -h 127.0.0.1 -p 7000
  5. Sair do redis-cli:

    Saia da sessão redis-cli para garantir que o comando seja registrado.

    exit

Você inicializou com sucesso um cluster Redis. Nas próximas etapas, exploraremos como adicionar nós, verificar a integridade do cluster e fazer resharding de slots.

Adicione um Novo Nó ao Cluster

Nesta etapa, você aprenderá como adicionar um novo nó a um cluster Redis existente usando o comando CLUSTER MEET. Este comando é essencial para expandir a capacidade do seu cluster e garantir alta disponibilidade.

Entendendo CLUSTER MEET

O comando CLUSTER MEET introduz um novo nó Redis ao cluster. Quando um nó recebe este comando, ele tenta se conectar ao nó especificado e iniciar o processo de handshake para se tornar parte do cluster.

Pré-requisitos:

  • Um cluster Redis inicializado conforme descrito na etapa anterior.
  • Uma nova instância Redis em execução e configurada para fazer parte do cluster, mas ainda não conectada. Para este laboratório, assumiremos que você tem uma nova instância em execução na porta 7006. Esta instância deve ser iniciada com a opção de configuração cluster-enabled yes. O script de configuração já configurou e iniciou esta instância para você.

Passos:

  1. Conectar a um Nó Existente:

    Conecte-se a um dos nós existentes no cluster usando redis-cli. Não importa a qual nó você se conecta, pois o comando CLUSTER MEET propagará as informações por todo o cluster.

    redis-cli -h 127.0.0.1 -p 7000
  2. Usar o Comando CLUSTER MEET:

    Agora que você está conectado a um nó no cluster, use o comando CLUSTER MEET para introduzir o novo nó (porta 7006).

    CLUSTER MEET 127.0.0.1 7006
    • CLUSTER MEET: O comando para adicionar um novo nó.
    • 127.0.0.1: O endereço IP do novo nó.
    • 7006: O número da porta do novo nó.

    Você deve ver a seguinte saída:

    OK

    Isso indica que o comando foi enviado com sucesso.

  3. Sair do redis-cli:

    Saia da sessão redis-cli para garantir que o comando seja registrado.

    exit

Você adicionou com sucesso um novo nó ao cluster Redis. Na próxima etapa, verificaremos a integridade do cluster.

Verifique a Saúde do Cluster

Nesta etapa, você aprenderá como verificar a integridade e o status do seu cluster Redis usando o comando CLUSTER INFO. Este comando fornece informações valiosas sobre o estado geral do cluster.

Entendendo CLUSTER INFO

O comando CLUSTER INFO retorna informações sobre o cluster Redis, que podem ser usadas para monitorar sua integridade e diagnosticar problemas.

Pré-requisitos:

  • Um cluster Redis inicializado e com um novo nó adicionado conforme descrito nas etapas anteriores.

Passos:

  1. Conectar a um Nó do Cluster:

    Conecte-se a qualquer um dos nós no cluster usando redis-cli.

    redis-cli -h 127.0.0.1 -p 7000
  2. Executar o Comando CLUSTER INFO:

    Use o comando CLUSTER INFO para recuperar informações do cluster.

    CLUSTER INFO

    Você deve ver uma saída semelhante à seguinte:

    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. Interpretando a Saída:

    Aqui está uma análise de algumas métricas-chave:

    • cluster_state:ok: O cluster está em um estado íntegro.
    • cluster_slots_assigned:16384: O número de slots atribuídos aos nós.
    • cluster_slots_ok:16384: O número de slots funcionando corretamente.
    • cluster_slots_pfail:0: O número de slots em um estado "potencialmente falho".
    • cluster_slots_fail:0: O número de slots em um estado "falhando".
    • cluster_known_nodes:7: O número total de nós que o nó atual conhece.
    • cluster_size:3: O número de nós mestres no cluster.
  4. Sair do redis-cli:

    Saia da sessão redis-cli para garantir que o comando seja registrado.

    exit

Você verificou com sucesso a integridade do seu cluster Redis usando o comando CLUSTER INFO.

Realocar Slots para o Novo Nó

Nesta etapa, você aprenderá como realocar slots em um cluster Redis usando o comando redis-cli --cluster reshard. Isso é importante para distribuir dados de forma uniforme, especialmente após adicionar novos nós.

Entendendo os Slots Redis e a Realocação (Resharding)

Um cluster Redis divide o espaço de chaves em 16384 slots. Cada nó mestre é responsável por um subconjunto desses slots. Quando você adiciona um novo nó, ele inicialmente não possui nenhum slot. A realocação move slots de nós existentes para o novo nó, balanceando os dados e a carga de trabalho.

Passos:

  1. Conectar ao Cluster usando redis-cli --cluster:

    Para realizar a operação de realocação, você usará o comando redis-cli --cluster reshard. Este comando fornece uma maneira interativa de redistribuir slots em todo o cluster.

    Abra seu terminal e execute o seguinte comando:

    redis-cli --cluster reshard 127.0.0.1:7000

    Este comando conecta-se ao cluster Redis através do nó em 127.0.0.1:7000 e inicia o processo de realocação.

  2. Especificar o Número de Slots a Serem Movidos:

    A ferramenta redis-cli solicitará que você insira o número de slots que deseja mover. Para este exemplo, vamos mover 101 slots para o novo nó.

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

    Insira 101 e pressione Enter.

  3. Inserir o ID do Nó de Destino:

    Em seguida, a ferramenta pedirá que você insira o ID do nó de destino, que é o novo nó que você adicionou na etapa anterior (porta 7006). Para encontrar o ID do nó, você pode usar o comando CLUSTER NODES conforme mostrado nas etapas anteriores, ou pode usar o seguinte comando para obter o ID do nó diretamente:

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

    Copie o ID do nó da saída. A ferramenta redis-cli solicitará:

    What is the receiving node ID?

    Cole o ID do nó e pressione Enter.

  4. Especificar os Nós de Origem:

    A ferramenta pedirá que você especifique os nós de origem dos quais retirar os slots. Você pode inserir all para redistribuir slots de todos os nós mestres existentes.

    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.

    Insira all e pressione Enter.

  5. Confirmar o Plano de Realocação:

    A ferramenta redis-cli exibirá o plano de realocação e pedirá que você confirme.

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

    Digite yes e pressione Enter para iniciar o processo de realocação.

  6. Aguardar a Conclusão da Realocação:

    A ferramenta redis-cli agora moverá os slots dos nós de origem para o nó de destino. Este processo pode levar algum tempo, dependendo da quantidade de dados no cluster. Você verá mensagens de progresso à medida que os slots forem movidos.

  7. Sair do redis-cli:

    Assim que a realocação for concluída, saia da sessão redis-cli.

    exit

Você agora realocou com sucesso os slots em seu cluster Redis usando o comando redis-cli --cluster reshard. Isso garante que os dados sejam distribuídos de forma mais uniforme em todo o cluster, incluindo o novo nó.

Resumo

Neste laboratório, você aprendeu como gerenciar um cluster Redis. Você começou inicializando um cluster usando redis-cli --cluster create, depois adicionou um novo nó com CLUSTER MEET. Você verificou a integridade do cluster usando CLUSTER INFO e, finalmente, realocou slots com redis-cli --cluster reshard para balancear o cluster. Essas são tarefas essenciais para gerenciar um cluster Redis e garantir sua escalabilidade e alta disponibilidade.