Em uma configuração de vários nós com contêineres web_only atrás de um balanceador de carga, notei que algumas configurações, quando alteradas, são aplicadas apenas em um único nó (provavelmente aquele ao qual me conectei através do balanceador de carga ao fazer as alterações). Notei especificamente: Aviso global, Posts fixados globalmente e, mais recentemente, ao alterar o tema para atualizar um tema personalizado.
No final, as alterações são representadas aos usuários apenas se o balanceador de carga os conectar ao mesmo nó onde foram feitas. Isso leva a carregamentos de página mistos e renderização confusa do site em alguns casos.
Agora a pergunta. Preciso executar algum comando de recarregamento de configuração no rake em todos os nós após tais alterações ou talvez alguma variável de ambiente específica precise ser adicionada ao contêiner ao executá-lo, para que os recarregamentos automáticos/modo de cluster propaguem a configuração para os nós irmãos automaticamente?
Obrigado! Eu tinha a sensação de que estava faltando algo ali. Existe talvez algum artigo na documentação que mencione após quais alterações de configuração tais ações são necessárias? Dei uma olhada rápida nos artigos da documentação e não notei nada específico para isso ou para configuração de HA.
Só para confirmar: vocês têm um banco de dados redis compartilhado entre todos os nós? Isso é essencial para o funcionamento do Discourse. (alguns outros aplicativos funcionam com um redis por nó, mas tentar fazer isso com o Discourse causará os tipos de problemas que você descreve)
Sim. O Redis é compartilhado por todas as instâncias de nó do Discourse. Eu criei a configuração para ser HA (Alta Disponibilidade), então há S3/Redis/PostgreSQL separados.
Você observa alguma mensagem de erro semelhante a Global messages on xx timed out, message bus is no longer functioning correctly em /logs?
Anteriormente, descobri que quando o Redis e o barramento de mensagens rodam em hosts separados, ocorrem timeouts, resultando na falha de sincronização entre diferentes workers do Unicorn.
Minha solução alternativa foi recarregar periodicamente todo o servidor Unicorn.
Ah. Afinal, houve aquelas mensagens Global messages on xx timed out, message bus is no longer functioning correctly. Mas eu olhei por engano no diretório de logs real. Agora, ao olhar na seção de erros de logs da interface web, notei as entradas que você mencionou. Preciso me acostumar com o fato de que erros diferentes aparecem em lugares diferentes para o discourse. Ainda é bom ter recursos no lado web do discourse.