Redis replicação mestre-escravo e sentinela

Cada servidor Redis instância pode ser configurado com vários nós escravos, servidor escravo também pode ter um nó escravo secundário pode ser organizado em estrutura de árvore complexa (embora o ambiente de produção muito poucas pessoas fazem).

Configurar a replicação mestre-escravo

Para tentar configurar a replicação mestre-escravo, precisamos de pelo menos duas instâncias de servidor Redis. A maneira mais fácil é fazer o download do site oficial Redis redis-servidor arquivos executáveis ​​binários, respectivamente, nos diretórios mestre e escravo.

Criando arquivos de configuração redis.conf estão em cada diretório. Exemplos de mestre para o ficheiro de configuração default, em um exemplo de mestre-escravo configuração escravo replicar:

# 和主服务器 6379 区分
port 6380

# 主服务器 ip 端口
slaveof 127.0.0.1 6379

# 如果主服务器配置了密码请写在这个配置项中
# masterauth <master-password>

##
## 接下来的选项保留默认配置即可,这里仅做介绍
##

# 当与 master 断开连接或正在进行同步时
# yes: 仍然正常响应客户端请求,但可能返回过时数据
# no: 除 INFO 和 SLAVEOF 命令正常外,其它命令均返回 SYNC with master in progress 错误
slave-serve-stale-data yes

# 从服务器只读
slave-read-only yes

Use o redis-server redis.confcomando para iniciar a instância do Redis-servidor, respectivamente. Use redis-cli -p 6380o comando a partir do servidor:

127.0.0.1:6380> info Replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:16
master_sync_in_progress:0
slave_repl_offset:3640
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:0b4e100aa9e9fda54aeba2bc110316d811ac2ff6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3640
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:3640
127.0.0.1:6380> get a
1
127.0.0.1:6380> set a 2
(error) READONLY You can't write against a read only slave.

SLAVEOF host portVocê pode alterar dinamicamente o nó mestre do servidor pertence. SLAVEOF NO ONEFechar função de cópia, e a transição da parte de trás escravo ao servidor mestre do servidor, os conjuntos de dados originais obtidos de sincronização não pode ser descartada. Quando o servidor primário falhar, use o SLAVEOF NO ONEcomando para levantar um servidor escravo é mestre.

Copie princípio mestre-escravo

SINCRONIZAR

Em versões anteriores para 2,8 Redis anos, Redis suporta apenas replicação incremental de volume completo não suporta replicação, o que afeta muito o desempenho da sincronização mestre-escravo.

Versões anteriores ao processo de replicação 2,8 mestre-escravo Redis é como se segue:

  1. comando escravo SYNC é enviado para o mestre
  2. execução do comando mestre bgsave gerar arquivo RDB. Ao mesmo tempo, todos os novos comando de escrita será escrito no buffer de cópia
  3. arquivo mestre será enviado para o RDB escravo
  4. O comando tampão de sincronização mestre para escravo, uma sincronização mestre-escravo é completada

PSYNC

Redis 2,8 comando PSYNC em vez de começar a usar o comando SYNC, o total PSYNC e replicação de replicação incremental.

master e slave nós todos têm uma RunID como sua identificação única.

mestre e escravo irá manter cada um deslocamento de cópia, identifica o progresso de sincronização no momento da replicação incremental.

mestre mantém uma cópia de um tampão FIFO (atraso de replicação), o tamanho padrão de 1 MB.

# 复制缓冲区大小
repl-backlog-size 1mb

# 当 master 不再与任何 slave 保持连接时,复制缓冲区可能被清空
# repl-backlog-ttl 用于配置从断开连接到清空缓冲区间隔的秒数
# 0 表示永不清除缓冲区
repl-backlog-ttl 3600

Em seguida, podemos começar a explicar o processo de comando PSYNC:

  1. pedido de sincronização escravo ao mestre
    1. Se o escravo não está sincronizado com qualquer mestre ou através SLAVEOF NO comando ONE é executado, o mestre envia um PSYNC ? -1comando para sincronizar o montante total solicitado.
    2. Caso contrário, o mestre envia um psync <runid> <offset>comando requisitos de sincronização incremental, onde ID é a última sincronização mestre RunID, deslocamento é a sincronização compensado
  2. resposta do pedido de sincronização mestre
    1. Se o pedido escravo periódica sincronização e satisfaz: .. 1 RunID em si mesmo; 2 sincronização compensar cópias de si próprio no buffer, em resposta +continuepara copiar os dados na memória intermédia para a sincronização escravo
    2. Se o pedido de sincronização periódica escravo, mas não satisfaz a duas condições acima, ou a solicitação total de sincronização quantidade escravo, a resposta ao mesmo tempo +fullresync <runid> <offset>para executar uma quantidade sincronização completa, em que RunID são auto-identificação, deslocamento em si é o desvio de sincronização.
  3. Se sua versão é muito baixa não suporta o PSYNCcomando no erro de resposta, escravo tenta usar o comando Sync para sincronizar.

sentinela

mestre-escravo arquitetura simples replicação após falha mestre não estará disponível, Redis Sentinels (sentinel) espera mecanismo oficial de comutação garante automaticamente a alta disponibilidade.

Sentinela através de um conjunto de mecanismos para monitorar linfonodo sentinela estado de operação mestre-escravo do nó, e a eleição de um novo nó principal após o nó primário falhar.

linfonodo sentinela executa periodicamente três tarefas:

  • Linfonodo sentinela 10s intervalos a partir do nó mestre envia um INFOcomando para atualizar a topologia, o novo nó escravo automaticamente sentidos.

  • nó a cada 1s sentinela aos transmite nó mestre do PINGcomando de detecção de batimento cardíaco.

  • linfonodo sentinela a cada 2s __sentinel__:hellotransmite seu próprio entendimento do Sentinel informações de nó e o canal de informação mestre. Todos linfonodo sentinela vai subscrever o canal, e essa atualização Sentinela informações cluster.

Se a sentinela descoberta nó nó mestre tempo limite de resposta batimento cardíaco, então esse mestre desligada subjetiva. Neste ponto, o mestre pode realmente ter entrado em colapso pode ser apenas uma falha de rede ocorre entre este linfonodo sentinela e mestre.

Ele considera que a subjetiva mestre desligada Sentinela será enviada para o outro sentinela sentinel is-master-down-by addrperguntou se o mestre offline. Se mais de metade do Sentinela considera que o mestre tem sido a linha de montagem é considerado mestre desligada objetivo.

linfonodo sentinela elegerá seu primeiro recebido é mestre-terra-por ordem do remetente para o líder sentinela. Se um nó para obter mais da metade da votação será o líder sentinela, se não for o nó receber mais de metade dos votos vai entrar na próxima rodada de votação. Este processo de seleção é semelhante ao algoritmo Paxos.

líder sentinela é responsável por selecionar um nó mestre escravo de um novo nó, selecione a lógica é:

  1. Slave nós filtro para fora insalubre
  2. Selecione slave-priorityos valores de configuração do menor nó. Se uma pluralidade de nós escravo de prioridade a partir do menor e o mesmo se passa para a próxima etapa
  3. Selecione Copiar no máximo nó offset, o que significa que os dados do nó acima o mais completo. Se uma pluralidade de nós escravo ainda são o mesmo que o deslocamento para a próxima etapa
  4. A seleção de um mínimo do RunID nó

Após a eleição do novo nó mestre executa o processo de atualização:

  1. Emitido SLAVEOF NINGUÉM comando para o nó mestre recém-eleito, para ser o novo nó mestre
  2. SLAVEOF emitir comandos para outros nós escravos seguir o novo nó mestre
  3. No sentinela nó de cluster off-line para atualizar o mestre para nós escravos off-line, o comando que segue o novo mestre após seu retorno

Acho que você gosta

Origin www.linuxidc.com/Linux/2020-04/162786.htm
Recomendado
Clasificación