wp-admin – ¿Cómo equilibrar la carga de la capa 7 en el backend y el frontend de WordPress?

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í:

  1. 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.

  2. 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.

  3. 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 y 111.111.1.13 – para URL de administrador
  • 111.111.1.14 y 111.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. 🙂

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım