O cluster Redis precisa do Sentinel?

Com o Gitlab Enterprise Edition, você pode usar o pacote Omnibus para configurar várias máquinas com o daemon Sentinel.

Redis Sentinel e Fix-Slave-Config Problema: Redis Node está sendo definido como escravo de dois mestres quando não deve ser.

Eu tenho usado o Redis Sentinel para failover em uma grande frota Redis composta por 12 sentinelas e mais de 500 fragmentos, cada um com um mestre e um escravo. No entanto, encontrei um problema estranho em que certos nós Redis estão sendo emitidos repetidamente o comando +fix-slave-config pelos sentinels. Isso resultou em alguns escravos alternando entre o mestre correto e outro mestre errado. Não notei esse problema em menor escala. Estou procurando conselhos sobre como consertar ou depurar ainda mais esse problema.

Eu observei dois problemas específicos:

A) As mensagens +figuras-escravos que mencionei anteriormente.

B) o sentinela.O arquivo conf mostra que certos escravos têm dois mestres, mesmo que eles tenham apenas um.

Inicialmente, a frota tem um certo nó escravo xxx.Xxx.Xxx.177 com o mestre xxx.Xxx.Xxx.244 (Formando Shard 188). No entanto, sem nenhuma interrupção do nó, o mestre deste escravo é trocado para xxx.Xxx.Xxx.96 (que é o mestre para o Shard 188) e depois de volta ao mestre correto, e este ciclo se repete. Eu verifiquei isso acessando os nós escravos e mestres e usando o comando Redis-Cli Info. Todos os nós Redis são iniciados com a configuração correta, e todos os nós do Sentinel têm a configuração correta em seu Sentinel.arquivos conf. Quando eu consultei cada sentinela, todos eles têm exatamente a mesma lista de mestres após cada mudança de escravo para mestre.

Ao verificar os arquivos de log dos meus 12 sentinelas, vejo que a cada minuto há uma mensagem A +Fix-Slave-Config sendo enviada. aqui estão alguns exemplos:

Sentinel #8: 20096: x 22 out 01:41:49.793 * +escravo de configuração de correção xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #1: 9832: x 22 out 01:42:50.795 * +escravo de configuração de correção xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-172 xxx.Xxx.Xxx.244 6379
Sentinel #6: 20528: x 22 out 01:43:52.458 * +escravo de figuragem-escravo da escrava xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #10: 20650: x 22 out 01:43:52.464 * +escravo de configuração de correção xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #2: 20838: x 22 out 01:44:53.489e.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-172 xxx.Xxx.Xxx.244 6379

Quando eu corro o comando Sentinel Masters, notei algo estranho. No caso 1, o Shard-188 tem dois escravos em vez de um. O mesmo padrão é observado quando xxx.Xxx.Xxx.177 cai sob o Shard-172 ou Shard-182:

Caso 1) mestre é xxx.Xxx.Xxx.244 e xxx.Xxx.Xxx.177 é um de seus escravos:

183) 1) “Nome”
2) “Shard-172”
3) “IP”
4) “xxx.Xxx.Xxx.244 “
5) “Porto”
6) “6379”
7) “Runid”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “Bandeiras”
10) “Mestre”
11) “Comandos pendentes”
12) “0”
13)
14) “0”
15) “Last-Ok-Ping-Reply”
16) “14”
17) “Último ping-ryply”
18) “14”
19) “Após os milissegundos”
20) “30000”
21) “Info-Refresh”
22) “5636”
23) “relatado por funções”
24) “Mestre”
25) “tempo relatado por função”
26) “17154406”
27) “Config-Epoch”
28) “0”
29) “números escravos”
30) “1”
31) “Num-outros-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Failover-timeout”
36) “60000”
37) “Parallel-Syncs”
38) “1”
72) 1) “Nome”
2) “Shard-188”
3) “IP”
4) “xxx.Xxx.Xxx.96 “
5) “Porto”
6) “6379”
7) “Runid”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) “Bandeiras”
10) “Mestre”
11) “Comandos pendentes”
12) “0”
13)
14) “0”
15) “Last-Ok-Ping-Reply”
16) “927”
17) “Último ping-ryply”
18) “927”
19) “Após os milissegundos”
20) “30000”
21) “Info-Refresh”
22) “5333”
23) “relatado por funções”
24) “Mestre”
25) “tempo relatado por função”
26) “17154312”
27) “Config-Epoch”
28) “0”
29) “números escravos”
30) “2”
31) “Num-outros-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Failover-timeout”
36) “60000”
37) “Parallel-Syncs”
38) “1”

Caso 2) Mestre é xxx.Xxx.Xxx.96 e xxx.Xxx.Xxx.177 é um de seus escravos:

79) 1) “Nome”
2) “Shard-172”
3) “IP”
4) “xxx.Xxx.Xxx.244 “
5) “Porto”
6) “6379”
7) “Runid”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “Bandeiras”
10) “Mestre”
11) “Comandos pendentes”
12) “0”
13)
14) “0”
15) “Last-Ok-Ping-Reply”
16) “1012”
17) “Último ping-ryply”
18) “1012”
19) “Após os milissegundos”
20) “30000”
21) “Info-Refresh”
22) “1261”
23) “relatado por funções”
24) “Mestre”
25) “tempo relatado por função”
26) “17059720”
27) “Config-Epoch”
28) “0”
29) “números escravos”
30) “1”
31) “Num-outros-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Failover-timeout”
36) “60000”
37) “Parallel-Syncs”
38) “1”
273) 1) “Nome”
2) “Shard-188”
3) “IP”
4) “xxx.Xxx.Xxx.96 “
5) “Porto”
6) “6379”
7) “Runid”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) “Bandeiras”
10) “Mestre”
11) “Comandos pendentes”
12) “0”
13)
14) “0”
15) “Last-Ok-Ping-Reply”
16) “886”
17) “Último ping-ryply”
18) “886”
19) “Após os milissegundos”
20) “30000”
21) “Info-Refresh”
22) “5333”
23) “relatado por funções”
24) “Mestre”
25) “tempo relatado por função”
26) “17154312”
27) “Config-Epoch”
28) “0”
29) “números escravos”
30) “2”
31) “Num-outros-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Failover-timeout”
36) “60000”
37) “Parallel-Syncs”
38) “1”

Estes são os detalhes do meu problema com o Redis Sentinel e o problema do figuro. Parece que certos escravos estão sendo definidos como escravos de dois mestres, o que está causando comportamento inesperado no meu cluster redis. Estou procurando uma solução para esse problema e apreciarei qualquer conselho ou sugestão.

O cluster Redis precisa do Sentinel

Com o Gitlab Enterprise Edition, você pode usar o pacote Omnibus para configurar várias máquinas com o daemon Sentinel.

Redis Sentinel e Fix-Slave-Config Problema: Redis Node está sendo definido como escravo de dois mestres quando não deve ser.

А вззжжно, арра эpthэээрной пчччээлююююююяяяюю sentido аююэээth а а edade троной пчччч п п пччч пччччiliar.

Estou tentando usar o Sentinel para failover em grande frota de Redis (12 Sentinels, mais de 500 Shard de um mestre e um escravo cada). Estou encontrando um problema muito estranho, onde meus sentinelas emitem repetidamente o comando +fix-slave-config para certos nós Redis, e o resultado sendo certos escravos alternando entre o mestre correto e outro mestre errado. Eu não percebi isso acontecendo em menor escala, pelo que vale. Qualquer conselho sobre o que consertar ou mais depuração?

Eu notei dois problemas específicos:

A) +mensagens de configuração-escravo, conforme declarado acima.

B) o sentinela.Conf mostra certos escravos com dois mestres (eles devem ter apenas um)

A frota em seu estado inicial tem um certo nó escravo xxx.Xxx.Xxx.177 com um mestre xxx.Xxx.Xxx.244 (juntos, eles compreendem o Shard 188 na frota). Sem interrupções de nós, o mestre do escravo é trocado para xxx.Xxx.Xxx.96 (Mestre para o Shard 188) e depois de volta, e depois adiantado. Isso é verificado pela sshing nos nós escravos e mestres e verificando informações de redis-cli. Todos os nós Redis começaram na configuração correta. Todos os nós sentinel tinham a configuração correta em seu sentinela.conf. Cada Sentinel tem exatamente a mesma lista de mestres quando os consultei após cada um desses escravos-> Mestres.

Nos meus 12 sentinelas, o seguinte é registrado. A cada minuto, há uma mensagem A +Fix-Slave-Config enviada:

Sentinel #8: 20096: x 22 out 01:41:49.793 * +escravo de configuração de correção xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #1: 9832: x 22 out 01:42:50.795 * +escravo de configuração de correção xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-172 xxx.Xxx.Xxx.244 6379
Sentinel #6: 20528: x 22 out 01:43:52.458 * +escravo de figuragem-escravo da escrava xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #10: 20650: x 22 out 01:43:52.464 * +escravo de configuração de correção xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #2: 20838: x 22 out 01:44:53.489e.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-172 xxx.Xxx.Xxx.244 6379

Aqui está a saída do comando Sentinel Masters. O estranho é que o Shard-188 tem dois escravos, quando na verdade deve ter apenas 1. A saída parece a mesma para quando xxx.Xxx.Xxx.177 está sob o Shard-172 e Shard-182.

Caso 1) xxx.Xxx.Xxx.244 é o mestre de xxx.Xxx.Xxx.177

183) 1) “Nome”
2) “Shard-172”
3) “IP”
4) “xxx.Xxx.Xxx.244 ”
5) “Porto”
6) “6379”
7) “Runid”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “Bandeiras”
10) “Mestre”
11) “Comandos pendentes”
12) “0”
13)
14) “0”
15) “Last-Ok-Ping-Reply”
16) “14”
17) “Último ping-ryply”
18) “14”
19) “Após os milissegundos”
20) “30000”
21) “Info-Refresh”
22) “5636”
23) “relatado por funções”
24) “Mestre”
25) “tempo relatado por função”
26) “17154406”
27) “Config-Epoch”
28) “0”
29) “números escravos”
30) “1”
31) “Num-outros-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Failover-timeout”
36) “60000”
37) “Parallel-Syncs”
38) “1”
72) 1) “Nome”
2) “Shard-188”
3) “IP”
4) “xxx.Xxx.Xxx.96 ”
5) “Porto”
6) “6379”
7) “Runid”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) “Bandeiras”
10) “Mestre”
11) “Comandos pendentes”
12) “0”
13)
14) “0”
15) “Last-Ok-Ping-Reply”
16) “927”
17) “Último ping-ryply”
18) “927”
19) “Após os milissegundos”
20) “30000”
21) “Info-Refresh”
22) “5333”
23) “relatado por funções”
24) “Mestre”
25) “tempo relatado por função”
26) “17154312”
27) “Config-Epoch”
28) “0”
29) “números escravos”
30) “2”
31) “Num-outros-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Failover-timeout”
36) “60000”
37) “Parallel-Syncs”
38) “1”

Caso 2) xxx.Xxx.Xxx.96 é o mestre de xxx.Xxx.Xxx.177

79) 1) “Nome”
2) “Shard-172”
3) “IP”
4) “xxx.Xxx.Xxx.244 ”
5) “Porto”
6) “6379”
7) “Runid”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “Bandeiras”
10) “Mestre”
11) “Comandos pendentes”
12) “0”
13)
14) “0”
15) “Last-Ok-Ping-Reply”
16) “1012”
17) “Último ping-ryply”
18) “1012”
19) “Após os milissegundos”
20) “30000”
21) “Info-Refresh”
22) “1261”
23) “relatado por funções”
24) “Mestre”
25) “tempo relatado por função”
26) “17059720”
27) “Config-Epoch”
28) “0”
29) “números escravos”
30) “1”
31) “Num-outros-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Failover-timeout”
36) “60000”
37) “Parallel-Syncs”
38) “1”
273) 1) “Nome”
2) “Shard-188”
3) “IP”
4) “xxx.Xxx.Xxx.96 ”
5) “Porto”
6) “6379”
7) “Runid”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) “Bandeiras”
10) “Mestre”
11) “Comandos pendentes”
12) “0”
13)
14) “0”
15) “Last-Ok-Ping-Reply”
16) “886”
17) “Último ping-ryply”
18) “886”
19) “Após os milissegundos”
20) “30000”
21) “Info-Refresh”
22) “5762”
23) “relatado por funções”
24) “Mestre”
25) “tempo relatado por função”
26) “17059758”
27) “Config-Epoch”
28) “0”
29) “números escravos”
30) “2”
31) “Num-outros-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Failover-timeout”
36) “60000”
37) “Parallel-Syncs”
38) “1”

Meu sentinela inicial.conf para cada sentinela é

MaxClients 20000
Aviso de nível de logle
LogFile “/Home/Redis/Logs/Sentinel.registro”
Sentinel Monitor Shard-172 Redis-B-172 7
Sentinel para baixo-depois de moções-segundos Shard-172 30000
Sentinel Failover-timeout Shard-172 60000
Sentinel Parallel-Syncs Shard-172 1
.
Sentinel Monitor Shard-188 Redis-B-188 7
Sentinel Down-After-milissegunds Shard-188 30000
Sentinel Failover-timeout Shard-188 60000
Sentinel Parallel-Syncs Shard-188 1

Aqui está o Sentinel resultante.conf (para todos os sentinelas) Após alguns minutos- observe os dois escravos:

Sentinel Monitor Shard-172 xxx.Xxx.Xxx.244 6379 7
Sentinel Failover-timeout Shard-172 60000
Sentinel Config-Epoch Shard-172 0
Sentinel Leader-Epoch Shard-172 0
Sentinel SHARD SHARD-172 STENTINEL XXX.Xxx.Xxx.177 6379 Sentinel conhecido Sentinel Shard-172 .
.
Sentinel Monitor Shard-188 xxx.Xxx.Xxx.96 6379 7
Sentinel Failover-timeout Shard-188 60000
Sentinel Config-Epoch Shard-188 0
Sentinel Leader-Epoch Shard-188 0
Sentinel conhecido Shard-188 xxx.Xxx.Xxx.194 6379 Sentinel SHARD SHARD-188 XXX.Xxx.Xxx.177 6379
Sentinel conhecido Sentinel Shard-188 .

Replicação e failover de Redis com Omnibus Gitlab (Premium self)

Nota: Esta é a documentação para os pacotes Omnibus Gitlab. Para usar o seu próprio Redis não contestado, siga a documentação relevante.

Nota: Em Redis Lingo, Primary é chamado de mestre. Neste documento, o primário é usado em vez de mestre, exceto as configurações onde o mestre é necessário.

Usar Redis em ambiente escalável é possível usando um Primário x Réplica Topologia com um serviço Redis Sentinel para assistir e iniciar automaticamente o procedimento de failover.

Redis requer autenticação se usado com Sentinel. Veja a documentação de segurança Redis para obter mais informações. Recomendamos usar uma combinação de uma senha Redis e regras de firewall apertadas para proteger seu serviço Redis. Você é altamente encorajado a ler a documentação Redis Sentinel antes de configurar o Redis com o Gitlab para entender completamente a topologia e a arquitetura.

Antes de mergulhar nos detalhes da criação de Redis e Redis Sentinel para uma topologia replicada, leia este documento uma vez como um todo para entender melhor como os componentes estão unidos.

Você precisa de pelo menos 3 máquinas independentes: físico, ou VMs que encontram máquinas físicas distintas. É essencial que todas as instâncias primárias e réplicas de Redis sejam executadas em diferentes máquinas. Se você deixar de provisionar as máquinas dessa maneira específica, qualquer problema com o ambiente compartilhado poderá reduzir toda a sua configuração.

Não há problema em executar um Sentinel ao lado de uma instância primária ou réplica Redis. No entanto, não deve haver mais do que um sentinela na mesma máquina.

Você também precisa levar em consideração a topologia de rede subjacente, certificando -se de ter conectividade redundante entre as instâncias Redis / Sentinel e Gitlab, caso contrário, as redes se tornam um único ponto de falha.

Executar redis em um ambiente em escala requer algumas coisas:

  • Várias instâncias redis
  • Executar redis em um Primário x Réplica Topologia
  • Várias instâncias do Sentinel
  • Suporte ao aplicativo e visibilidade a todas as instâncias Sentinel e Redis

Redis Sentinel pode lidar com as tarefas mais importantes em um ambiente de HA e isso é para ajudar a manter os servidores online com o mínimo ou sem tempo de inatividade. Redis Sentinel:

  • Monitores Primário e Réplicas instâncias para ver se estão disponíveis
  • Promove um Réplica para Primário quando o Primário falha
  • Rebentando a Primário para Réplica quando falhou Primário Volte online (para evitar a participação de dados)
  • Pode ser consultado pelo aplicativo para sempre se conectar à corrente Primário servidor

Quando um Primário Não responde, é responsabilidade do aplicativo (no nosso caso, o Gitlab) lidar com o tempo limite e se reconectar (consultar um Sentinela para um novo Primário).

Para entender melhor como configurar corretamente o Sentinel, leia a documentação do Redis Sentinel primeiro, pois não a configurar corretamente pode levar à perda de dados ou pode derrubar todo o seu cluster, invalidar o esforço de failover.

Configuração recomendada

Para uma configuração mínima, você precisa instalar o pacote Omnibus Gitlab em 3 independente máquinas, ambos com Redis e Sentinela:

  • Redis Primary + Sentinel
  • REPLICA REDIS + Sentinel
  • REPLICA REDIS + Sentinel

Se você não tem certeza ou não entende o porquê e de onde vem a quantidade de nós, leia a visão geral da configuração Redis e a visão geral da configuração do Sentinel.

Para uma configuração recomendada que possa resistir a mais falhas, você precisa instalar o pacote Omnibus Gitlab em 5 independente máquinas, ambos com Redis e Sentinela:

  • Redis Primary + Sentinel
  • REPLICA REDIS + Sentinel
  • REPLICA REDIS + Sentinel
  • REPLICA REDIS + Sentinel
  • REPLICA REDIS + Sentinel

Visão geral da configuração do Redis

Você deve ter pelo menos 3 servidores Redis: 1 primário, 2 réplicas e eles precisam estar em máquinas independentes (veja a explicação acima).

Você pode ter nós Redis adicionais, isso ajuda a sobreviver a uma situação em que mais nós desce. Sempre que houver apenas 2 nós online, um failover não é iniciado.

Como exemplo, se você tiver 6 nós Redis, um máximo de 3 pode ser simultaneamente para baixo.

Existem requisitos diferentes para os nós sentineados. Se você os hospedar nas mesmas máquinas Redis, pode ser necessário levar essas restrições em consideração ao calcular a quantidade de nós a serem provisionados. Consulte a documentação do Sentinel Setup Visão geral para obter mais informações.

Todos os nós Redis devem ser configurados da mesma maneira e com especificações de servidor semelhantes, como em uma situação de failover, qualquer Réplica pode ser promovido como o novo Primário pelos servidores Sentinel.

A replicação requer autenticação, então você precisa definir uma senha para proteger todos os nós Redis e os Sentinels. Todos eles compartilham a mesma senha, e todas as instâncias devem poder conversar entre si sobre a rede.

Visão geral da configuração do Sentinel

Sentinels assista a outros sentinelas e nós Redis. Sempre que um sentinela detecta que um nó redis não está respondendo, anuncia o status do nó para os outros sentinels. Os sentinels têm que alcançar um quorum (A quantidade mínima de sentinelas concordando que um nó está inativo) para poder iniciar um failover.

Sempre que o quorum é atendido, o maioria de todos os nós sentinel conhecidos precisam estar disponíveis e alcançáveis, para que eles possam eleger o sentinela líder quem toma todas as decisões para restaurar a disponibilidade de serviço por:

  • Promovendo um novo Primário
  • Reconfigurando o outro Réplicas e faça -os apontar para o novo Primário
  • Anuncie o novo Primário Para todos os outros colegas de Sentinel
  • Reconfigure o velho Primário e rebaixar Réplica Quando voltar online

Você deve ter pelo menos três servidores Redis Sentinel e eles precisam ser cada um em uma máquina independente (que se acredita falhar de forma independente), idealmente em diferentes áreas geográficas.

Você pode configurá -los nas mesmas máquinas em que você configurou os outros servidores Redis, mas entenda que, se um nó inteiro cair, você perde um Sentinel e uma instância Redis.

O número de sentinelas deve sempre ser um chance número, para que o algoritmo de consenso seja eficaz no caso de uma falha.

Em uma topologia de 3 nós, você só pode pagar um nó Sentinel descendo. Sempre que o maioria Dos sentinels diminui, a proteção de partição de rede evita ações destrutivas e um failover não é iniciado.

aqui estão alguns exemplos:

  • Com 5 ou 6 sentinelas, um máximo de 2 pode começar para começar um failover.
  • Com 7 sentinelas, um máximo de 3 nós pode diminuir.

O Líder A eleição às vezes pode falhar na rodada de votação quando consenso não é alcançado (veja o número ímpar de requisitos de nós acima). Nesse caso, uma nova tentativa é feita após a quantidade de tempo definida no Sentinel [‘Failover_timeout’] (em milissegundos).

Nota: Podemos ver onde o Sentinel [‘Failover_timeout’] é definido mais tarde.

A variável Failover_timeout tem muitos casos de uso diferentes. De acordo com a documentação oficial:

  • O tempo necessário para reiniciar um failover depois que um failover anterior já foi tentado contra o mesmo primário por um determinado sentinela, é duas vezes o tempo limite de failover.
  • O tempo necessário para uma réplica replicando para um primário errado de acordo com uma configuração de corrente sentinela, para ser forçado a se replicar com o primário direito, é exatamente o tempo limite de failover (contando desde o momento em que um sentinela detectou a equívoco).
  • O tempo necessário para cancelar um failover que já está em andamento, mas não produziu nenhuma mudança de configuração (réplica de ninguém, mas ainda não é reconhecido pela réplica promovida).
  • O tempo máximo que um failover em andamento espera que todas as réplicas sejam reconfiguradas como réplicas do novo primário. No entanto, mesmo após esse período, as réplicas são reconfiguradas pelos sentinelas de qualquer maneira, mas não com a progressão exata de sincronização paralela, conforme especificado.

Configurando Redis

Esta é a seção em que instalamos e configuramos as novas instâncias Redis.

Supõe -se que você instalou o Gitlab e todos os seus componentes do zero. Se você já possui o Redis instalado e em execução, leia como mudar de uma instalação de máquina única.

Nota: Redis nós (primário e réplica) precisam da mesma senha definida em redis [‘senha’] . A qualquer momento, durante um failover, os sentinels podem reconfigurar um nó e alterar seu status de primária para réplica e vice -versa.

Requisitos

Os requisitos para uma configuração Redis são os seguintes:

  1. Provisionar o número mínimo necessário de instâncias, conforme especificado na seção de configuração recomendada.
  2. Nós Não Recomende a instalação do Redis ou Redis Sentinel nas mesmas máquinas que seu aplicativo GitLab está em execução, pois isso enfraquece sua configuração de HA. No entanto, você pode optar por instalar Redis e Sentinel na mesma máquina.
  3. Todos os nós Redis devem poder conversar um com o outro e aceitar conexões de entrada sobre as portas Redis (6379) e Sentinel (26379) (a menos que você altere as padrão).
  4. O servidor que hospeda o aplicativo GitLab deve poder acessar os nós Redis.
  5. Proteja os nós do acesso de redes externas (Internet), usando o firewall.

Mudando de uma instalação de máquina única existente

Se você já possui uma instalação de gitlab de máquina única, precisa se replicar primeiro desta máquina, antes de desativar a instância Redis dentro dela.

Sua instalação de máquina única é a inicial Primário, e os outros 3 devem ser configurados como Réplica apontando para esta máquina.

Após a replicação, você precisa interromper os serviços na instalação de uma máquina, para girar o Primário para um dos novos nós.

Faça as alterações necessárias na configuração e reinicie os novos nós novamente.

Para desativar Redis na instalação única, editar/etc/gitlab/gitlab.RB:

Redis[['habilitar'] = falso

Se você não conseguir replicar primeiro, poderá perder dados (trabalhos de fundo não processados).

Passo 1. Configurando a instância Primária Redis

  1. Ssh no Primário Servidor Redis.
  2. Baixe/instale o pacote Omnibus Gitlab que você deseja usar Etapas 1 e 2 Na página do downloads do gitlab.
    • Certifique -se de selecionar o pacote omnibus correto, com a mesma versão e tipo (comunidade, Enterprise Editions) da sua instalação atual.
    • Não conclua nenhuma outra etapa na página de download.
  3. Editar/etc/gitlab/gitlab.RB e adicione o conteúdo:

# Especifique a função do servidor como 'redis_master_role' papéis [['redis_master_role'] # Endereço IP apontando para um IP local que as outras máquinas podem alcançar. # Você também pode definir o bind como '0.0.0.0 'que ouça em todas as interfaces. # Se você realmente precisa se ligar a um IP acessível externo, faça # Claro que você adiciona regras de firewall extras para evitar acesso não autorizado. Redis[['vincular'] = '10.0.0.1 ' # Defina uma porta para que o Redis possa ouvir solicitações de TCP que permitem outro # máquinas para se conectar a ele. Redis[['porta'] = 6379 # Configure a autenticação de senha para redis (use a mesma senha em todos os nós). Redis[['senha'] = 'Redis-password-gaes-here'

gitlab_rails[['Auto_migrate'] = falso

NOTA: Você pode especificar várias funções como Sentinel e Redis como: ROUNS [‘Redis_Sentinel_Role’, ‘Redis_Master_Role’] . Leia mais sobre papéis.

Passo 2. Configurando as instâncias de réplica Redis

  1. Ssh no réplica Servidor Redis.
  2. Baixe/instale o pacote Omnibus Gitlab que você deseja usar Etapas 1 e 2 Na página do downloads do gitlab.
    • Certifique -se de selecionar o pacote omnibus correto, com a mesma versão e tipo (comunidade, Enterprise Editions) da sua instalação atual.
    • Não conclua nenhuma outra etapa na página de download.
  3. Editar/etc/gitlab/gitlab.RB e adicione o conteúdo:

# Especifique a função do servidor como 'redis_replica_role' papéis [['redis_replica_role'] # Endereço IP apontando para um IP local que as outras máquinas podem alcançar. # Você também pode definir o bind como '0.0.0.0 'que ouça em todas as interfaces. # Se você realmente precisa se ligar a um IP acessível externo, faça # Claro que você adiciona regras de firewall extras para evitar acesso não autorizado. Redis[['vincular'] = '10.0.0.2 ' # Defina uma porta para que o Redis possa ouvir solicitações de TCP que permitem outro # máquinas para se conectar a ele. Redis[['porta'] = 6379 # A mesma senha para a autenticação Redis que você configurou para o nó principal. Redis[['senha'] = 'Redis-password-gaes-here' # O IP do nó Redis Primário. Redis[['master_ip'] = '10.0.0.1 ' # Porta do servidor Redis Primary, descomposição para mudar para não padrão. Padrões # para `6379`. #redis ['master_port'] = 6379

Sudo toque /etc/gitlab/skip-auto-reconfigure

NOTA: Você pode especificar várias funções como Sentinel e Redis como: ROUNS [‘Redis_Sentinel_Role’, ‘Redis_Master_Role’] . Leia mais sobre papéis.

Esses valores não precisam ser alterados novamente em/etc/gitlab/gitlab.RB após um failover, como os nós são gerenciados pelos sentinels e, mesmo após uma reconfiguração do GitLab-CTL, eles recebem sua configuração restaurada pelos mesmos sentinelas.

etapa 3. Configurando as instâncias Redis Sentinel

NOTA: Se você estiver usando uma instância externa do Redis Sentinel, exclua o parâmetro requisito da configuração do Sentinel. Este parâmetro faz com que os clientes relatem a autenticação Noauth necessária. . Redis Sentinel 3.2.x não suporta autenticação de senha.

Agora que os servidores Redis estão todos configurados, vamos configurar os servidores Sentinel.

Se você não tem certeza se seus servidores Redis estão funcionando e replicando corretamente, leia a replicação de solução de problemas e corrija -a antes de prosseguir com a configuração do Sentinel.

Você deve ter pelo menos 3 servidores Redis Sentinel e eles precisam ser cada um em uma máquina independente. Você pode configurá -los nas mesmas máquinas onde você configurou os outros servidores Redis.

Com o Gitlab Enterprise Edition, você pode usar o pacote Omnibus para configurar várias máquinas com o daemon Sentinel.

  1. SSH no servidor que hospeda o Redis Sentinel.
  2. Você pode omitir esta etapa se os Sentinels estiverem hospedados no mesmo nó que as outras instâncias Redis.Baixe/instale o pacote Omnibus Gitlab Enterprise Edition usando Etapas 1 e 2 Na página do downloads do gitlab.
    • Certifique -se de selecionar o pacote omnibus correto, com a mesma versão que o aplicativo GitLab está executando.
    • Não conclua nenhuma outra etapa na página de download.
  3. Editar/etc/gitlab/gitlab.RB e adicione o conteúdo (se você estiver instalando os sentinels no mesmo nó que as outras instâncias do Redis, alguns valores podem ser duplicados abaixo):

papéis [['Redis_sentinel_role'] # Deve ser o mesmo em todos os nó sentinela Redis[['master_name'] = 'gitlab-redis' # A mesma senha para a autenticação Redis que você configurou para o nó principal. Redis[['senha mestra'] = 'Redis-password-gaes-here' # O IP do nó Redis Primário. Redis[['master_ip'] = '10.0.0.1 ' # Defina uma porta para que o Redis possa ouvir solicitações de TCP que permitem outro # máquinas para se conectar a ele. Redis[['porta'] = 6379 # Porta do servidor Redis Primary, descomposição para mudar para não padrão. Padrões # para `6379`. #redis ['master_port'] = 6379 ## Configure o Sentinel sentinela[['vincular'] = '10.0.0.1 ' # Porta que o Sentinel escuta, o descomamento para mudar para não inadimplente. Padrões # para `26379`. # Sentinel ['porta'] = 26379 ## quorum deve refletir a quantidade de votação dos sentinels necessários para iniciar um failover. ## valor não deve ser maior do que a quantidade de sentinelas. ## ## O quorum pode ser usado para ajustar o Sentinel de duas maneiras: ## 1. Se a o quorum estiver definido para um valor menor que a maioria dos sentinelas ## Nós implantamos, estamos basicamente tornando o Sentinel mais sensato a falhas primárias, ## desencadear um failover assim que apenas uma minoria de sentinelas não for mais ## capaz de conversar com o primário. ## 1. Se um quorum é definido como um valor maior que a maioria dos sentinelas, somos ## tornando o Sentinel capaz de failover somente quando houver um número muito grande (maior ## do que a maioria) de sentinelas bem conectadas que concordam com o primário estar em baixo.s sentinela[['quorum'] = 2 ## Considere o servidor sem resposta após a quantidade X de MS. # Sentinel ['Down_after_millisEconds'] = 10000 ## especifica o tempo limite de failover em milissegundos. É usado de várias maneiras: ## ## - o tempo necessário para reiniciar um failover após um failover anterior foi ## já tentado contra o mesmo primário por um determinado Sentinel, é dois ## vezes o tempo limite de failover. ## ## - O tempo necessário para uma réplica replicando para um primário errado de acordo ## para uma configuração de corrente sentinela, a ser forçada a replicar ## com a primária direita, é exatamente o tempo limite de failover (contando desde ## no momento em que um sentinela detectou a configuração incorreta). ## ## - o tempo necessário para cancelar um failover que já está em andamento, mas ## não produziu nenhuma alteração de configuração (réplica de ninguém ainda não ## reconhecido pela réplica promovida). ## ## - o tempo máximo que um failover em andamento espera que toda a réplica seja ## reconfigurado como réplicas do novo primário. No entanto, mesmo depois desse período ## as réplicas são reconfiguradas pelos sentinelas de qualquer maneira, mas não com ## a progressão exata paralela-síncs, conforme especificado. # Sentinel ['Failover_timeout'] = 60000

Sudo toque /etc/gitlab/skip-auto-reconfigure

Passo 4. Configurando o aplicativo GitLab

A parte final é informar o principal servidor de aplicativos GitLab dos servidores Redis Sentinels e credenciais de autenticação.

Você pode ativar ou desativar o suporte do Sentinel a qualquer momento em instalações novas ou existentes. Do ponto de vista do aplicativo GitLab, tudo o que exige são as credenciais corretas para os nós do Sentinel.

Embora não exija uma lista de todos os nós do Sentinel, em caso de falha, ele precisa acessar pelo menos um dos listados.

NOTA: As etapas a seguir devem ser executadas no servidor de aplicativos GitLab, que idealmente não deve ter redis ou sentinelas para uma configuração de HA.

  1. Ssh no servidor onde o aplicativo GitLab está instalado.
  2. Editar/etc/gitlab/gitlab.RB e adicione/altere as seguintes linhas:

## deve ser o mesmo em cada nó Sentinel Redis[['master_name'] = 'gitlab-redis' ## a mesma senha para a autenticação Redis que você configurou para o nó principal. Redis[['senha mestra'] = 'Redis-password-gaes-here' ## Uma lista de Sentinels com `host` e` Port` gitlab_rails[['Redis_sentinels'] = [[ 'hospedar' => '10.0.0.1 ', 'porta' => 26379>, 'hospedar' => '10.0.0.2 ', 'porta' => 26379>, 'hospedar' => '10.0.0.3 ', 'porta' => 26379> ]

Etapa 5. Ativar monitoramento

Se você habilitar o monitoramento, ele deve ser ativado em todos Servidores Redis.

  1. Certifique -se de coletar consul_server_nodes, que são os endereços IP ou os registros DNS dos nós do servidor consul, para a próxima etapa. Observe que eles são apresentados como y.Y.Y.Y Consul1.Gitlab.exemplo.com z.Z.Z.Z
  2. Criar/editar/etc/gitlab/gitlab.RB e adicione a seguinte configuração:

# Ativar descoberta de serviço para Prometheus cônsul[['habilitar'] = verdadeiro cônsul[['Monitoring_service_discovery'] = verdadeiro # Substitua os espaços reservados # Y.Y.Y.Y Consul1.Gitlab.exemplo.com z.Z.Z.Z # com os endereços dos nós do servidor consul cônsul[['configuração'] =  RETY_JOIN: %w (y.Y.Y.Y Consul1.Gitlab.exemplo.com z.Z.Z.Z), > # Definir os abordes da rede que os exportadores ouvem node_exporter[['Listen_address'] = '0.0.0.0: 9100 ' Redis_exporter[['Listen_address'] = '0.0.0.0: 9121 '

Exemplo de uma configuração mínima com 1 primária, 2 réplicas e 3 sentinelas

Neste exemplo, consideramos que todos os servidores têm uma interface de rede interna com IPS nos 10.0.0.x alcance, e que eles podem se conectar usando esses IPs.

Em um uso do mundo real, você também estabeleceria regras de firewall para impedir o acesso não autorizado de outras máquinas e bloquear o tráfego de fora (Internet).

Usamos os mesmos 3 nós com Redis + Sentinela Topologia discutida no Redis Configure Visão geral e Documentação para Visão geral da configuração do Sentinel.

Aqui está uma lista e descrição de cada máquina e o designado IP:

  • 10.0.0.1: Redis Primary + Sentinel 1
  • 10.0.0.2: réplica Redis 1 + Sentinel 2
  • 10.0.0.3: REPLICA REDIS 2 + Sentinel 3
  • 10.0.0.4: Aplicativo GitLab

Após a configuração inicial, se um failover for iniciado pelos nós do sentinela, os nós Redis serão reconfigurados e o Primário muda permanentemente (inclusive em redis.conf) de um nó para o outro, até que um novo failover seja iniciado novamente.

O mesmo acontece com o Sentinel.Conf que é substituído após a execução inicial, depois de qualquer novo nó Sentinel começar a assistir ao Primário, ou um failover promove um diferente Primário nó.

Exemplo de configuração para Redis Primary e Sentinel 1

papéis [['Redis_sentinel_role', 'redis_master_role'] Redis[['vincular'] = '10.0.0.1 ' Redis[['porta'] = 6379 Redis[['senha'] = 'Redis-password-gaes-here' Redis[['master_name'] = 'gitlab-redis' # Deve ser o mesmo em todos os nó sentinela Redis[['senha mestra'] = 'Redis-password-gaes-here' # o mesmo valor definido em redis ['senha'] na instância primária Redis[['master_ip'] = '10.0.0.1 ' # IP da instância inicial do Redis primário #Redis ['master_port'] = 6379 # porta da instância inicial do Redis Primário, o excumínio para mudar para não inadimplente sentinela[['vincular'] = '10.0.0.1 ' # Sentinel ['porta'] = 26379 # Uncomment para alterar a porta padrão sentinela[['quorum'] = 2 # Sentinel ['Down_after_millisEconds'] = 10000 # Sentinel ['Failover_timeout'] = 60000

Reconfigure Omnibus Gitlab para que as mudanças tenham efeito.

Exemplo de configuração para Redis Replica 1 e Sentinel 2

papéis [['Redis_sentinel_role', 'redis_replica_role'] Redis[['vincular' = '10.0.0.2 ' Redis[['porta'] = 6379 Redis[['senha'] = 'Redis-password-gaes-here' Redis[['senha mestra'] = 'Redis-password-gaes-here' Redis[['master_ip'] = '10.0.0.1 ' # IP do servidor Redis Primary #Redis ['master_port'] = 6379 # porta do servidor Redis Primary, descomamento para alterar para não -padrão Redis[['master_name'] = 'gitlab-redis' # Deve ser o mesmo em todos os nó sentinela sentinela[['vincular'] = '10.0.0.2 ' # Sentinel ['porta'] = 26379 # Uncomment para alterar a porta padrão sentinela[['quorum'] = 2 # Sentinel ['Down_after_millisEconds'] = 10000 # Sentinel ['Failover_timeout'] = 60000

Reconfigure Omnibus Gitlab para que as mudanças tenham efeito.

Exemplo de configuração para Redis Replica 2 e Sentinel 3

papéis [['Redis_sentinel_role', 'redis_replica_role'] Redis[['vincular'] = '10.0.0.3 ' Redis[['porta'] = 6379 Redis[['senha'] = 'Redis-password-gaes-here' Redis[['senha mestra'] = 'Redis-password-gaes-here' Redis[['master_ip'] = '10.0.0.1 ' # IP do servidor Redis Primary #Redis ['master_port'] = 6379 # porta do servidor Redis Primary, descomamento para alterar para não -padrão Redis[['master_name'] = 'gitlab-redis' # Deve ser o mesmo em todos os nó sentinela sentinela[['vincular'] = '10.0.0.3 ' # Sentinel ['porta'] = 26379 # Uncomment para alterar a porta padrão sentinela[['quorum'] = 2 # Sentinel ['Down_after_millisEconds'] = 10000 # Sentinel ['Failover_timeout'] = 60000

Reconfigure Omnibus Gitlab para que as mudanças tenham efeito.

Exemplo de configuração para o aplicativo GitLab

Redis[['master_name'] = 'gitlab-redis' Redis[['senha mestra'] = 'Redis-password-gaes-here' gitlab_rails[['Redis_sentinels'] = [[ 'hospedar' => '10.0.0.1 ', 'porta' => 26379>, 'hospedar' => '10.0.0.2 ', 'porta' => 26379>, 'hospedar' => '10.0.0.3 ', 'porta' => 26379> ]

Reconfigure Omnibus Gitlab para que as mudanças tenham efeito.

Configuração avançada

Omnibus Gitlab configura algumas coisas por trás das cortinas para facilitar a vida dos sysadmins. Se você quiser saber o que acontece por baixo, continue lendo.

Executando vários clusters Redis

O Omnibus Gitlab suporta a execução de instâncias separadas de Redis e Sentinel para diferentes classes de persistência.

Aula Propósito
cache Armazenar dados em cache.
filas Armazenar sidekiq trabalhos de fundo.
shared_state Armazenar dados relacionados à sessão e outros dados persistentes.
ActionCable Back -end de pub/sub -fila para ActionCable.
Trace_chunks Armazenar dados de trace ci rastrear.

Para fazer isso funcionar com o Sentinel:

  1. Configure as diferentes instâncias de Redis/Sentinels com base em suas necessidades.
  2. Para cada instância de aplicação do Rails, edite seu/etc/gitlab/gitlab.Arquivo RB:

gitlab_rails[['Redis_cache_instance'] = Redis_cache_url gitlab_rails[['Redis_queues_instance'] = Redis_queues_url gitlab_rails[['Redis_shared_state_instance'] = Redis_shared_state_url gitlab_rails[['Redis_ActionCable_instance'] = Redis_actioncable_url gitlab_rails[['Redis_trace_chunks_instance'] = Redis_trace_chunks_url # Configure os Sentinels gitlab_rails[['Redis_cache_sentinels'] = [[  hospedar: Redis_cache_sentinel_host, porta: 26379 >,  hospedar: Redis_Cache_Sentinel_Host2, porta: 26379 > ] gitlab_rails[['Redis_queues_Sentinels'] = [[  hospedar: Redis_queues_sentinel_host, porta: 26379 >,  hospedar: Redis_queues_sentinel_host2, porta: 26379 > ] gitlab_rails[['Redis_Shared_State_Sentinels'] = [[  hospedar: Shared_state_sentinel_host, porta: 26379 >,  hospedar: Shared_state_sentinel_host2, porta: 26379 > ] gitlab_rails[['Redis_ActionCable_Sentinels'] = [[  hospedar: ActionCable_Sentinel_Host, porta: 26379 >,  hospedar: ActionCable_Sentinel_Host2, porta: 26379 > ] gitlab_rails[['Redis_trace_chunks_sentinels'] = [[  hospedar: Trace_chunks_sentinel_host, porta: 26379 >,  hospedar: Trace_chunks_sentinel_host2, porta: 26379 > ]

  • Os URLs do Redis devem estar no formato: Redis: //: senha@Sentinel_Primary_Name, onde:
    • A senha é a senha de texto simples para a instância Redis.
    • Sentinel_Primary_Name é o nome principal do Sentinel com Redis [‘master_name’], por exemplo, Gitlab-Redis-Cache .

    sudo Reconfiguração do GitLab-CTL

    NOTA: Para cada classe de persistência, o GitLab Padas para usar a configuração especificada em gitlab_rails [‘redis_sentinels’], a menos que seja substituído pelas configurações descritas anteriormente.

    Controle serviços de corrida

    No exemplo anterior, usamos redis_sentinel_role e redis_master_role, o que simplifica a quantidade de alterações de configuração.

    Se você deseja mais controle, aqui está o que cada um define para você automaticamente quando ativado:

    ## Redis Sentinel Papel redis_sentinel_role[['habilitar'] = verdadeiro # Quando a função do Sentinel é ativada, os seguintes serviços também são ativados sentinela[['habilitar'] = verdadeiro # Os seguintes serviços estão desativados Redis[['habilitar'] = falso Bootstrap[['habilitar'] = falso nginx[['habilitar'] = falso PostGresql[['habilitar'] = falso gitlab_rails[['habilitar'] = falso sala de correio[['habilitar'] = falso ------- ## Redis Primary/Replica Fun Redis_Master_Role[['habilitar'] = verdadeiro # Ative apenas um deles redis_replica_role[['habilitar'] = verdadeiro # Ative apenas um deles # Quando a função de Redis Primary ou Replica for ativada, os seguintes serviços são # ativado desativado. Se as funções de Redis e Sentinel forem combinadas, ambos # Serviços estão ativados. # Os seguintes serviços estão desativados sentinela[['habilitar'] = falso Bootstrap[['habilitar'] = falso nginx[['habilitar'] = falso PostGresql[['habilitar'] = falso gitlab_rails[['habilitar'] = falso sala de correio[['habilitar'] = falso # Para a função de réplica Redis, também altere essa configuração de padrão 'true' para 'false': Redis[['mestre'] = falso

    Você pode encontrar os atributos relevantes definidos em gitlab_rails.rb .

    Solução de problemas

    Leitura adicional

    1. Arquiteturas de referência
    2. Configure o banco de dados
    3. Configure o NFS
    4. Configure os balanceadores de carga

    Redis Sentinel

    Atenção. O mecanismo de Redis Sentinel depreciado será aposentado na versão 7 Creativio 7.18.3. Recomendamos mudar para o Redis Cluster depois de atualizar o Creativio para a versão 7.18.0.

    O mecanismo Redis Sentinel é usado para fornecer tolerância a falhas para os repositórios Redis usados ​​por Creativio. Ele fornece os seguintes recursos:

    • Monitoramento. Sentinel garante que as instâncias de mestre/escravo funcionem corretamente em redis.
    • Notificações. Os administradores do sistema Sentinel alertam se algum erro relacionado à instância ocorrer em redis.
    • Failover automático. Se a instância do Redis Master não estiver funcionando corretamente, o Sentinel promove uma das instâncias de escravos para um mestre e reconfigura o resto para trabalhar com a nova instância mestre. Creativio também é notificado sobre o novo endereço de conexão Redis.

    Atenção. Creativio não suporta clusters Redis na versão 7.17.4 e anterior.

    Redis Sentinel é um sistema distribuído projetado para executar várias instâncias que cooperam juntas. Esta abordagem tem as seguintes vantagens:

    • A falha é registrada apenas se várias instâncias sentinelas (que formam um quorum) concordarem que a instância mestre não estiver disponível em Redis. Isso é feito para reduzir o número de alertas falsos.
    • O mecanismo Sentinel ainda estará disponível, mesmo que várias instâncias do sentinela não estejam respondendo ou não funcionarão completamente. Isso é feito para aumentar a tolerância a falhas.

    Especificos notáveis ​​do Sentinel

    • Pelo menos três instâncias sentinelas são necessárias para uma implantação robusta. Essas instâncias devem ser colocadas em computadores ou máquinas virtuais que se acredita falharem de uma maneira independente, eu. e., As falhas registradas por essas instâncias sentinelas devem ser causadas por diferentes fontes. Por exemplo, os computadores estão localizados em diferentes zonas de rede.
    • Devido à replicação assíncrona, o sistema distribuído (Sentinel + Redis) não garante que todos os dados sejam salvos se ocorrer uma falha.
    • A tolerância a falhas da configuração deve ser monitorada regularmente e confirmada por meio de testes que simulam falhas.
    • Docker Port Remapping cria certos problemas com os processos Sentinel (consulte o Bloco Sentinel, Docker, Nat e possíveis problemas da documentação do Sentinel).

    Requisitos mínimos de tolerância a falhas para Redis Sentinel

    • M1, M2 são instâncias mestres de Redis.
    • R1, R2, R3 são instâncias de escravos Redis.
    • S1, S2, S3 são instâncias sentinelas.
    • C1 é um aplicativo cretio.
    • [M2] é promovido a instância (e. g., de escravo a mestre).

    Recomendamos o uso de uma configuração com pelo menos três instâncias Redis e Sentinel (consulte o Exemplo 2: Configuração básica com três caixas bloco da documentação do Sentinel). Essa configuração é baseada em três nós (computadores ou máquinas virtuais), cada uma contendo instâncias em execução de Redis e Sentinel (FIG. 1). Duas instâncias do Sentinel (S2 e S3) formam um quorum (o número de instâncias necessárias para garantir a tolerância a falhas da atual instância mestre).

    Figo. 1 Os três nós Configuração: Quorum = 2

    scr_chapter_setup_redis_sentinel_3_pionts_configuration.png

    Durante a operação regular, o aplicativo Creativio Client escreve seus dados em uma instância mestre (M1). Esses dados são replicados de forma assíncrona às instâncias de escravos (R2 e R3).

    Se a instância Redis Master (M1) ficar indisponível, as instâncias do Sentinel (S1 e S2) consideram isso uma falha e inicie o processo de failover. Uma das instâncias de escravo de Redis (R2 ou R3) é promovido ao mestre, permitindo que o aplicativo o use em vez da instância mestre anterior.

    Atenção. Há um risco de perder registros em qualquer configuração do Sentinel, que usa replicação de dados assíncronos. Isso ocorre se os dados não foram escritos na instância de escravos, promovidos a um mestre.

    Observação. Outras configurações possíveis tolerantes a falhas são descritas na documentação do Sentinel .

    Problemas de separação de rede

    Se a conexão de rede for perdida, existe o risco de que o Creatio continue trabalhando com a antiga instância Redis Master (M1), enquanto a recém -promovida instância mestre ([M2]) já foi atribuída (Fig. 2).

    Figo. 2 Separação de rede

    scr_chapter_setup_redis_sentinel_nerwork_splitting.png

    Isso é facilmente evitado, permitindo que a opção pare de escrever dados, caso a instância mestre detecte que o número de instâncias de escravos diminuiu. Para fazer isso, defina os seguintes valores no Redis.Configuration arquivo da instância Redis Master:

    Minlaves-to-write 1 min-escravo-max-lag 10

    Como resultado, se a instância Redis Master (M1) não poderá transferir dados para pelo menos uma instância de escravo, ele deixará de receber dados em 10 segundos após a primeira tentativa. Uma vez que o sistema é recuperado por instâncias sentinelas que formam um quorum (S2 e S3), o aplicativo Creativio (C1) será reconfigurado para trabalhar com o novo mestre – Instale (M2).

    Atenção. Se a rede for restaurada, a instância mestre não poderá continuar sua operação automaticamente após parar. Se a instância restante do escravo Redis (R3) também ficar indisponível, o sistema parará de funcionar completamente.

    requisitos de sistema

    Redis é um banco de dados na memória; portanto, a capacidade de RAM e a taxa de desempenho são os principais requisitos para sua operação correta. Como o Redis é um aplicativo de thread único que usa um único núcleo de processador, um único nó (computador ou máquina virtual) com um processador de núcleo duplo é necessário para trabalhar com uma única instância Redis. As instâncias do Sentinel requerem relativamente poucos recursos e podem ser executados no mesmo nó que Redis.

    Recomenda -se implantar Redis e Sentinel no Linux OS.

    A tabela abaixo mostra os requisitos recomendados do sistema para um único nó (computador ou máquina virtual), dependendo do número de usuários do cretio.

    O cluster Redis precisa do Sentinel?

    О эээ сйранibus

    Ы з ззарегиgléria. С помощью этой страницы мы сможем определить, что запросы отправляете именно вы, а не робот. Почpels эээ моогitu произойth?

    Эта страница отображается в тех случаях, когда автоматическими системами Google регистрируются исходящие из вашей сети запросы, которые нарушают Условия использования. Ponto. Ээth момо номттаая и оозз илэз и ээ и эз и эз и з и ззз и зз и ээз и ээз иth ээ эth ээзз эth эзз иthлз ио и зз и иth эз иээ эээо иth эз эээ ээо ээоо иth иэзз эth эзт эth эз ио эээ иth эз иэз иthлзз иоз ил иээ иээо иэээ иээо иth ио иээ эth иэ иээ эth иэ иээ эth ио иэ ээог seguir.

    Ит и и и и и и и и и чззжfia м ирржжжfia м иржжжжfia м мжжжжжж<ь м м иржжжfia. não. Если вы используете общий доступ в Интернет, проблема может быть с компьютером с таким же IP-адресом, как у вас. Орратитеitivamente к с о и и с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с а с с а с а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а &rdquo;. ПодробнÉ.

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