Intereting Posts
get_the_tag_list () возвращает неверные ссылки Изменение меток формата блока TinyMCE Плагины кэша кэша WP очищают один и тот же кеш? Функция WP, дублирующая содержимое тела Предотвращение добавления WordPress номера порта синхронизации браузера при сохранении Получение WordPress для работы внутри приложения rails 3 Нужна помощь в расшифровке сообщений об ошибках и предупреждениях Удаляет ли плагин через администратор WordPress «полностью», удаляет код? Добавить класс в Категории Виджет Получить сообщение с идентификатором изображения с $ wpdb Подтвердить адрес электронной почты для подтверждения заказа Отображение неиспользуемых категорий в выпадающем меню Как изменить пароль WordPress без выхода из системы (необходимо для плагина) Бесплатная стартовая тема для создания мобильных сайтов? проблема с кодировкой с новой пользовательской таблицей

Как сложить 7 Баланс нагрузки WordPress Backend и Frontend?

У меня есть настройка балансировки нагрузки уровня 7 с использованием HAProxy для WordPress Multisite.

Я ищу, чтобы что-либо связанное с бэкэндом WordPress, которое должно быть подано из определенной группы серверов (A / K / A в /wp-admin/ ) во время работы с интерфейсом веб-сайтов WordPress от другой группы серверов.

Нужно ли что-то настраивать в wp-config.php для изменения имен wp-config.php cookie, чтобы они включали идентификатор сервера? или проверить идентификатор сервера в файле cookie WordPress? Я чувствую, что проблемы №1 и №2 связаны с печеньем. Я понятия не имею, почему № 3 происходит. Мои серверы не отстают, и они должны реагировать очень быстро.

С моей текущей конфигурацией я столкнулся с несколькими проблемами здесь:

  1. Кажется, он действительно соединяет меня с соответствующим сервером администратора. Однако через некоторое время в приборной панели. Появится форма входа в WordPress с просьбой снова войти в систему.

  2. Большинство страниц admin работают очень хорошо, однако время от времени, опять же, как и # 1, вход в WordPress для всплывающих окон и просит меня снова войти в систему.

  3. Каждый раз в этот момент я получаю «504 Gateway Time-out» – сервер не ответил вовремя ».

Вот как выглядит моя конфигурация:

 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 по 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 

Я готов предоставить для этого довольно здоровенную щедрость. Если есть какие-либо настройки, которые мне не хватает, или вы думаете, что можете улучшить мою конфигурацию, предоставьте полную конфигурацию, включая все соответствующие настройки в вашем ответе.

Изменить. В настоящее время я использую HAProxy 1.6.x и готов обновить до последней версии, если это то, что требуется для получения правильного решения.

Проблема № 1 и № 2 :

Не знаю, зачем вам добавлять и проверять дополнительные файлы cookie, но для меня это просто и довольно просто:

Это то, что я пробовал на бродячих боксах и со структурой WordPress по умолчанию:

1 . Подготовьте 6 отдельных серверов

  • 111.111.1.10 – Сервер MySQL
  • 111.111.1.11 – Сервер HAProxy
  • 111.111.1.12 & 111.111.1.13 – для URL-адресов администратора
  • 111.111.1.14 и 111.111.1.15 – для URL-адресов без администратора

Конфигурации 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 по 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 . Используйте wpms.dev как демонстрационный домен и укажите его в 111.111.1.11 в /etc/hosts хост-компьютера.

3 . Установите базовый блок с ubuntu/trusty64 (LAMP stack + WP multisite) на сервере 111.111.1.12 .

Самый важный шаг, который следует избегать проблемы № 1 и № 2, заключается в том, что некоторые куки WordPress зависят от путей , мы должны убедиться, что эти константы согласованы на всех серверах:

 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); 

Чтобы сделать это, нам просто нужно добавить его в wp-config.php в этом базовом поле.

4 . Пакет базового блока и 111.111.1.13 его на других серверах: 111.111.1.13 , 111.111.1.14 и 111.111.1.15 . Теперь vagrant up для всех серверов и проверить его.

Если у вас есть сбой аутентификации ssh, вы должны указать config.ssh.private_key_path на Vagrantfile базового поля в Vagrantfile s дублированных блоков.

Проблема № 3 слишком за границей и может быть не по теме. Это может быть ошибка хранения, ошибка конфигурации сервера … Вы должны спросить об этом на соответствующем сетевом сайте. 🙂

Большая часть вашего вопроса, похоже, связана с сервером, и здесь будет не по теме, но вот мои пять центов на связанную с WordPress часть.

WP имеет довольно простую систему cookie для входа в систему. Он хранит три файла cookie, один для основного URL-адреса, один для каталога wp-admin и один для wp-content\plugins . Они содержат только имя пользователя и двойной хешированный пароль. Ничего связанного с сервером. Итак, если установка найдена по правильному URL-адресу, эти куки не собираются блокировать что-либо, если они не истекают, это событие, которое контролируется плагином .

Кажется, вы сообщаете о нерегулярных выходах. Из вышесказанного следует, что могут произойти две вещи. Либо плагин возится с временем истечения файла cookie, либо URL-адрес не совпадает.

По поводу первого. Плагины (электронная коммерция) используют PHP-сессии для хранения данных. Эти данные могут храниться на стороне сервера. Если плагин каким-то образом регистрирует пользователя, когда некоторые данные сеанса отсутствуют, вы выйдете из системы, когда ваш балансировщик нагрузки решит перенаправить вас на другой сервер. Это объясняет нерегулярные отходы.

Относительно второго. Это потребует некоторой переадресации на другой URL-адрес между серверами. Для меня это кажется менее вероятным.