Pregunta:
Tengo una configuración de Load Balancer de capa 7 usando HAProxy para WordPress Multisite.
Estoy buscando tener cualquier cosa relacionada con el backend de WordPress para ser servido desde un grupo específico de servidores (A / K / A cualquier cosa en /wp-admin/
) mientras sirvo la interfaz de los sitios web de WordPress desde otro grupo de servidores.
¿Necesito ajustar algo en wp-config.php
para cambiar los nombres de las cookies para que incluyan la ID del servidor? o comprobar el ID del servidor en la cookie de WordPress? Siento que los problemas n. ° 1 y n. ° 2 están relacionados con las cookies. No tengo idea de por qué está sucediendo el número 3. Mis servidores no se están quedando atrás en absoluto y deberían responder bastante rápido.
Con mi configuración actual me enfrento a algunos problemas aquí:
-
De hecho, parece que me está conectando con el servidor de administración apropiado. Sin embargo, después de un tiempo en el tablero. Aparece el formulario de inicio de sesión de WordPress pidiéndome que vuelva a iniciar sesión.
-
La mayoría de las páginas de administración funcionan bien, sin embargo, de vez en cuando, de nuevo, al igual que el número 1, aparece el inicio de sesión de WordPress y me pide que vuelva a iniciar sesión.
-
De vez en cuando recibo un "Tiempo de espera de puerta de enlace 504: el servidor no respondió a tiempo".
Así es como se ve mi configuración:
defaults
log global
mode http
option httplog
option dontlognull
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
retries 3
option redispatch
maxconn 2000
timeout connect 5000
timeout check 5000
timeout client 30000
timeout server 30000
frontend http-in
bind *:80
option httplog
option http-server-close
acl has_domain hdr(host) -m found
acl has_www hdr_beg(host) -i www.
use_backend live_servers if has_domain has_www
acl has_admin path_beg /wp-admin
acl has_login path_beg /wp-login.php
acl has_custom_login path_beg /manage
use_backend admin_servers if has_admin or has_login or has_custom_login
default_backend live_servers
backend live_servers
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
cookie SERVERID insert indirect nocache
server s1 1.1.1.1:80 check cookie s1
server s2 2.2.2.2:80 check cookie s2
backend admin_servers
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
cookie SERVERID insert indirect nocache
server s1 1.1.1.1:80 check cookie s1
Estoy dispuesto a ofrecer una generosa recompensa por esto. Si hay alguna configuración que me falta o cree que podría mejorar mi configuración, proporcione una configuración completa que incluya todas las configuraciones apropiadas en su respuesta.
Editar: Actualmente estoy usando HAProxy 1.6.xy estoy dispuesto a actualizar a la última versión si eso es lo que se necesita para obtener una solución válida.
Respuesta:
El problema # 1 y # 2 :
No sé por qué necesita agregar y validar cookies adicionales, pero para mí, es simple y bastante sencillo:
Esto es lo que he probado en cajas vagabundas y con la estructura predeterminada de WordPress:
1 . Prepare 6 servidores separados
-
111.111.1.10
– servidor MySQL -
111.111.1.11
– Servidor HAProxy -
111.111.1.12
y111.111.1.13
– para URL de administrador -
111.111.1.14
y111.111.1.15
– para URL que no son de administrador
Configuraciones de HAProxy (v1.6):
defaults
log global
mode http
option httplog
option forwardfor
option dontlognull
option http-server-close
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
frontend http-revolver
bind 111.111.1.11:80
acl url_is_wp_admin path_beg /wp-admin /wp-login.php /manage
use_backend admin-servers if url_is_wp_admin
default_backend public-servers
backend public-servers
server s1 111.111.1.12:80 check
server s2 111.111.1.13:80 check
backend admin-servers
server s3 111.111.1.14:80 check
server s4 111.111.1.15:80 check
listen stats
bind 111.111.1.11:1984
stats enable
stats scope http-revolver
stats scope public-servers
stats scope admin-servers
stats uri /
stats realm Haproxy\ Statistics
stats auth user:password
2 . Utilice wpms.dev
como dominio de demostración y 111.111.1.11
a 111.111.1.11
en /etc/hosts
de la máquina host.
3 . Instale una caja base con ubuntu/trusty64
(pila LAMP + WP multisitio) en el servidor 111.111.1.12
.
El paso más importante para evitar el problema # 1 y # 2 es que, debido a que algunas cookies de WordPress dependen de rutas , debemos asegurarnos de que estas constantes sean consistentes en todos los servidores:
define('WP_HOME', 'http://wpms.dev');
define('WP_SITEURL', 'http://wpms.dev');
define('DOMAIN_CURRENT_SITE', 'wpms.dev');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
Para hacerlo, solo necesitamos agregarlo a wp-config.php
en este cuadro base.
4 . Empaquete la caja base y 111.111.1.13
en otros servidores: 111.111.1.13
, 111.111.1.14
y 111.111.1.15
. Ahora vagrant up
por todos los servidores y compruébalo.
Si tiene un error de autenticación ssh, debe apuntar config.ssh.private_key_path
a la private_key
del cuadro base en Vagrantfile
s de los cuadros duplicados.
El problema n. ° 3 está demasiado en el extranjero y puede que no esté relacionado con este tema. Puede ser un error de almacenamiento, un error de configuración del servidor … Debe solicitarlo en un sitio de red apropiado. 🙂