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.conf
comando para iniciar a instância do Redis-servidor, respectivamente. Use redis-cli -p 6380
o 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 port
Você pode alterar dinamicamente o nó mestre do servidor pertence. SLAVEOF NO ONE
Fechar 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 ONE
comando 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:
- comando escravo SYNC é enviado para o mestre
- 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
- arquivo mestre será enviado para o RDB escravo
- 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:
- pedido de sincronização escravo ao mestre
- Se o escravo não está sincronizado com qualquer mestre ou através SLAVEOF NO comando ONE é executado, o mestre envia um
PSYNC ? -1
comando para sincronizar o montante total solicitado. - 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
- Se o escravo não está sincronizado com qualquer mestre ou através SLAVEOF NO comando ONE é executado, o mestre envia um
- resposta do pedido de sincronização mestre
- 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
+continue
para copiar os dados na memória intermédia para a sincronização escravo - 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.
- 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
- Se sua versão é muito baixa não suporta o
PSYNC
comando 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
INFO
comando para atualizar a topologia, o novo nó escravo automaticamente sentidos. -
nó a cada 1s sentinela aos transmite nó mestre do
PING
comando de detecção de batimento cardíaco. -
linfonodo sentinela a cada 2s
__sentinel__:hello
transmite 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 addr
perguntou 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 é:
- Slave nós filtro para fora insalubre
- Selecione
slave-priority
os 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 - 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
- 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:
- Emitido SLAVEOF NINGUÉM comando para o nó mestre recém-eleito, para ser o novo nó mestre
- SLAVEOF emitir comandos para outros nós escravos seguir o novo nó mestre
- 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