Después de un cambio de configuración, algunas configuraciones no están sincronizadas en nodos hermanos en una configuración multi-nodo de Discourse

Hola,

En una configuración de múltiples nodos con un contenedor web_only detrás de un balanceador de carga, noté que algunas configuraciones, cuando se cambian, solo se aplican a un solo nodo (probablemente al que estaba conectado a través del balanceador de carga al realizar los cambios).

Noté específicamente estos: Global notice (Aviso global), Globally pinned posts (Publicaciones fijadas globalmente) y ahora el último, al cambiar el tema para actualizar uno personalizado.

Al final, los cambios solo se representan para los usuarios si el balanceador de carga los conecta al mismo nodo donde se realizaron. Lo que lleva a cargas de página mixtas y a una representación desordenada del sitio en algunos casos.

Ahora la pregunta.

¿Necesito ejecutar algún comando de recarga de configuración en rake en todos los nodos después de tales cambios o quizás se deba agregar alguna variable de entorno específica al contenedor al ejecutarlo, para que las recargas automáticas/modo clúster para que la configuración se propague automáticamente a los nodos hermanos?

Sí, podrías intentar lo siguiente:

su discourse -c 'bundle exec rake cache:clear'

Alternativamente, si quieres entrar en la consola de rails, SiteSetting.refresh! probablemente haría lo mismo.

¡Gracias! Tenía la sensación de que me faltaba algo ahí. ¿Quizás hay algún artículo de documentación que mencione después de qué cambios de configuración se requieren dichas acciones? Hice una búsqueda rápida en los artículos de documentación y no noté nada al respecto o específicamente para la configuración de HA.

Solo para confirmar: ¿tienen una base de datos Redis compartida entre todos los nodos? Eso es esencial para que Discourse funcione.

(algunas otras aplicaciones funcionan con un Redis por nodo, pero intentar hacer eso con Discourse causará el tipo de problemas que describes)

Sí. Redis es compartido por todas las instancias de nodos de Discourse. Creé la configuración para que sea HA, por lo que hay S3/Redis/PostgreSQL separados.

¿Observas algún mensaje de error similar a Global messages on xx timed out, message bus is no longer functioning correctly dentro de /logs?

Anteriormente, descubrí que cuando Redis y el bus de mensajes se ejecutan en hosts separados, se producen tiempos de espera (timeouts), lo que provoca un fallo en la sincronización entre diferentes workers de Unicorn.

Mi solución temporal fue recargar periódicamente todo el servidor Unicorn.

He buscado en los logs de todos los nodos, no veo tales entradas de registro.

Ah. Después de todo, estuvieron esos mensajes Global messages on xx timed out, message bus is no longer functioning correctly. Pero erróneamente busqué en el directorio de logs real. Ahora, al mirar en la sección de errores de los logs de la interfaz web, sí noté las entradas que mencionaste. Necesito acostumbrarme al hecho de que los diferentes errores aparecen en diferentes lugares para Discourse. Aún así, es bueno tener funciones en el lado web de Discourse.