Etherpad-lite: Existe um guia para configurar o balanceamento de carga?

Criado em 7 dez. 2016  ·  5Comentários  ·  Fonte: ether/etherpad-lite

tl; dr;
Estamos vendo coisas estranhas em nossa configuração de balanceamento de carga. Pads diferentes para o mesmo PadID com base em qual balanceador de carga está respondendo. Existem documentos oficiais ou confiáveis ​​no Etherpad de balanceamento de carga que estou apenas não conseguindo encontrar?

A versão longa;
Então, pergunto porque temos um sistema que está usando um balanceador de carga para vários serviços e o domínio etherpad volta para um único servidor etherpad. O balanceador de carga também é um único ponto de terminação para https.

O problema que estamos vendo é que, quando testamos em dispositivos móveis, parece que fomos direcionados para um balanceador de carga e os desktops foram direcionados para o outro. Não sei o motivo específico por que foi esse o caso. O problema, entretanto. Cada balanceador de carga atendeu a um documento diferente, apesar de ter o mesmo PadID. A verificação dos registros mostrou que apenas um bloco foi criado neste dia também.

Desligamos o secundário e o definimos como failover. Todos os dispositivos agora exibiam o mesmo documento, sendo o das máquinas desktop. Quando desligamos o primário, forçando o secundário a agir como failover, todos os dispositivos viram o outro documento que os dispositivos móveis inicialmente viram.

A esquisitice aqui é que eles compartilham o mesmo PadID.

Tenho pesquisado coisas relacionadas a isso e ainda não encontrei esse problema específico. Eu encontrei uma série de conversas sobre teste de carga e algumas sobre balanceamento de carga, mas as de balanceamento de carga nunca pareceram chegar a nenhuma conclusão.

Para referência, estou envolvido em um projeto que tenta implantar isso em um ambiente de produção para colaboração em situações de emergência. Não sou um desenvolvedor node.js, então, leve isso em consideração ao fazer perguntas técnicas sobre isso. Não me importo com perguntas que podem parecer simples ou óbvias para um desenvolvedor node.js; na verdade, provavelmente são necessárias. Também faço parte de uma equipe e tenho acesso muito limitado aos servidores de produção. No entanto, estou em contato próximo com os administradores de sistemas que cuidam desse lado das coisas.

Question wontfix

Comentários muito úteis

SESSIONKEY.txt não pareceu desempenhar nenhum papel significativo.

Notamos que o parâmetro "head" tem valores diferentes para cada servidor e que é usado na construção da chave para o armazenamento de chave: valor .

por exemplo
`eth1

pad: 58483aee8a6dd9.65340416 | {"atext": {"text": "Test \ n \ nUntest? \ n \ n \ n", "atribs": " 4 + 4 5 | 4 + b | 1 + 1"}, "pool": { "numToAttrib": {"0": ["autor", "a.kFcgC1Xr1xVyK6VP"], "1": ["autor", "a.KokfEaKFHuLOrj8Q"], "2": ["autor", "a.XvjPbBqDZM7WEI6 "]," 3 ": [" autor "," a.UTXpIyYgqxjhQBJN "]," 4 ": [" autor "," a.6adq2JkT7Yv40gBK "]," 5 ": [" autor "," a.vPuSKAf3Gx2voZlH "] }, "nextNum": 6}, "head": 95, "chatHead": - 1, "publicStatus": false, "passwordHash": null, "savedRevisions": []}

eth2

pad: 58483aee8a6dd9.65340416 | {"atext": {"text": "Teste \ n \ nTeste \ n \ nWTH \ n \ n ... \ n \ n \ n", "atribs": " 4 + 4 5 | 8 + i | 1 +1 "}," pool ": {" numToAttrib ": {" 0 ": [" autor "," a.kFcgC1Xr1xVyK6VP "]," 1 ": [" autor "," a.KokfEaKFHuLOrj8Q "]," 2 " : ["autor", "a.XqjPbBqDZM7WEIv6"], "3": ["autor", "a.UTXpIyYgqxjhQBJN"], "4": ["autor", "a.6adq2JkT7Yv40gBK"], "5": [ "author", "a.VImJzfCalZs11fia"]}, "nextNum": 6}, "head": 105, "chatHead": 0, "publicStatus": false, "passwordHash": null, "savedRevisions": []}
`

Estamos a ponto de desistir do balanceamento de carga e partir para uma abordagem de failover. Alta disponibilidade é o nosso principal objetivo.

Seria bom ter uma declaração oficial dos líderes do projeto sobre isso. Isso poupará muito tempo aos outros na busca pela resposta.

Todos 5 comentários

Olá, @Unifex , parece que cada instância do Etherpad tem seu próprio banco de dados. Vocês estão usando um banco de dados remoto para armazenar as almofadas? Você tem acesso a settings.json na pasta raiz do Etherpad? Você poderia nos dizer a configuração do banco de dados nesse arquivo?

Não conheço nenhum doc sobre balanceamento de carga para Etherpad e não sei se ele está preparado para replicar suas mudanças através de diferentes DBs para redundância, então talvez ter um DB para cada instância é o que está fazendo você ter esse comportamento.

Olá @lpagliari ,

Obrigado pela resposta. Apenas um aviso. Minha resposta menos rápida é devido a viver no futuro e a maior parte do mundo está dormindo enquanto estamos aqui na Nova Zelândia.

Acredito que só temos um DB. Definitivamente, temos apenas um servidor de banco de dados para ele. Eu fiz uma solicitação aos administradores de sistema para verificar se esse é o caso. Espero descobrir que um está apontando para o servidor de banco de dados e o outro está configurado incorretamente (o padrão dirtyDB ainda está em vigor, talvez ...)

Deve ter uma resposta dentro de meia hora.

Mais uma vez obrigado pela resposta.

Cumprimentos,
Ouro

Ok, acabei de ouvir de volta e ambos os servidores com carga balanceada estão de fato apontando para o mesmo banco de dados nos mesmos servidores de banco de dados. Verificamos no servidor postgres e podemos ver os dois servidores com uma conexão ao banco de dados. Eu pedi que o administrador do sistema também visse o arquivo settings.json e eles fossem iguais. Ele deu um passo adiante e verificou o hash no arquivo e eles eram idênticos.

O que observamos, porém, APIKEY.txt são os mesmos em ambos, mas SESSIONKEY.txt são diferentes.

Olhando para isso agora.

SESSIONKEY.txt não pareceu desempenhar nenhum papel significativo.

Notamos que o parâmetro "head" tem valores diferentes para cada servidor e que é usado na construção da chave para o armazenamento de chave: valor .

por exemplo
`eth1

pad: 58483aee8a6dd9.65340416 | {"atext": {"text": "Test \ n \ nUntest? \ n \ n \ n", "atribs": " 4 + 4 5 | 4 + b | 1 + 1"}, "pool": { "numToAttrib": {"0": ["autor", "a.kFcgC1Xr1xVyK6VP"], "1": ["autor", "a.KokfEaKFHuLOrj8Q"], "2": ["autor", "a.XvjPbBqDZM7WEI6 "]," 3 ": [" autor "," a.UTXpIyYgqxjhQBJN "]," 4 ": [" autor "," a.6adq2JkT7Yv40gBK "]," 5 ": [" autor "," a.vPuSKAf3Gx2voZlH "] }, "nextNum": 6}, "head": 95, "chatHead": - 1, "publicStatus": false, "passwordHash": null, "savedRevisions": []}

eth2

pad: 58483aee8a6dd9.65340416 | {"atext": {"text": "Teste \ n \ nTeste \ n \ nWTH \ n \ n ... \ n \ n \ n", "atribs": " 4 + 4 5 | 8 + i | 1 +1 "}," pool ": {" numToAttrib ": {" 0 ": [" autor "," a.kFcgC1Xr1xVyK6VP "]," 1 ": [" autor "," a.KokfEaKFHuLOrj8Q "]," 2 " : ["autor", "a.XqjPbBqDZM7WEIv6"], "3": ["autor", "a.UTXpIyYgqxjhQBJN"], "4": ["autor", "a.6adq2JkT7Yv40gBK"], "5": [ "author", "a.VImJzfCalZs11fia"]}, "nextNum": 6}, "head": 105, "chatHead": 0, "publicStatus": false, "passwordHash": null, "savedRevisions": []}
`

Estamos a ponto de desistir do balanceamento de carga e partir para uma abordagem de failover. Alta disponibilidade é o nosso principal objetivo.

Seria bom ter uma declaração oficial dos líderes do projeto sobre isso. Isso poupará muito tempo aos outros na busca pela resposta.

Este problema foi automaticamente marcado como obsoleto porque não teve atividades recentes. Ele será fechado se nenhuma outra atividade ocorrer. Obrigado por suas contribuições.

Esta página foi útil?
0 / 5 - 0 avaliações