Назад | Перейти на главную страницу

Виртуальный хост с балансировкой нагрузки и сервер Amazon / DO с использованием HAProxy

У меня возникла проблема, и я надеюсь, что кто-то может указать мне правильное направление.

У меня есть сервер, на котором размещено несколько сайтов с использованием виртуальных хостов Apache (общие IP-адреса). Несколько месяцев назад у моего поставщика серверов был простой в Центре обработки данных, в результате чего мой сервер и все его вспомогательные учетные записи были недоступны. Спасибо!

Многие учетные записи не так важны, однако есть 1 или 2, которые я хотел бы сделать более устойчивыми / высокодоступными. Я играл с экземплярами облачных серверов (Amazon и Digital Ocean) и HAProxy и получил хорошую тестовую систему:

4 сервера:

  1. 1 х HA прокси LB
  2. 2 сервера приложений PHP / HTTP (зеркальное отображение с использованием RSync)
  3. 1 x MySQL БД

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

backend AppServers 
balance   roundrobin 
mode   http 
server TestServer1 12.34.56.78/~accname/ check 
server TestServer2 23.45.67.89:80 check backup 

** Я поменял IP-адреса для этой публикации. *

Схема того, чего я пытаюсь достичь:

Я не профессионал с HAProxy, и большинство маршрутов, которые я пробовал, не увенчались успехом.

Кто-нибудь когда-нибудь делал это и получалось? или знаете, что я делаю не так?

Да, это звучит довольно просто, насколько я понимаю.

Я бы сначала обратился к вашей конфигурации haproxy и сделал немного более эффективным, используя ACL, чтобы определить, является ли запрошенная учетная запись критической или некритичной :-)

Вам нужно будет добавить это в свой интерфейс:

acl critical_1 path_beg /~accname1
acl critical_2 path_beg /~accname2

use_backend AppServers_Critcal if critical_1
use_backend AppServers_Critcal if critical_2

default_backend AppServers

Затем добавьте эти бэкенды.

backend AppServers_Critcal
balance   roundrobin 
mode   http
server TestServer1 12.34.56.78:80 check inter 10s fall 3 
server TestServer2 23.45.67.89:80 check backup 

backend AppServers
balance   roundrobin 
mode   http
server TestServer1 12.34.56.78:80 check 

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

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

(inter 10s fall 3) Вам может быть интересно, что именно он делает; короче говоря, он просто ждет 30 секунд, а затем переходит к резервному копированию.

Таким образом, он ждет десять секунд, затем проверяет три раза подряд, прежде чем сдается и переходит к резервному серверу.

(Руководство по Rsync) Во-вторых, если вы еще не рассмотрели вопрос репликации / синхронизации сервера в удаленное место через rSync, вы можете выполнить следующие шаги, чтобы настроить простую автоматическую систему.

Сначала вам нужно будет установить rSync и SSH, если они еще не установлены. (На локальном и удаленном сервере)

(Операционная система на основе RedHat: ниже)

# yum -y install ssh rsync

(Операционная система на основе Debian: ниже)

# sudo apt-get install ssh rsync

После установки этих пакетов вы можете создать бесключевое соединение между обоими серверами, которое позволит вам без пароля подключаться к локальной машине, которую мы синхронизируем с удаленным местоположением.

** Однако обратите внимание, что это не лучшая практика и не самый безопасный, но один из самых простых способов достижения полной автоматизации. **

(Часть 1) На локальном компьютере вам нужно будет запустить эту команду для создания файла ssh-keygen.

# ssh-keygen

Затем эта команда предложит вам ответить на несколько вопросов; этот процесс довольно прост, все, что вам нужно сделать, это нажать клавишу ввода для каждого вопроса.

(Часть 2)

Затем мы скопируем открытый ключ на удаленный хост, используя следующую команду.

ssh-copy-id -i ~/.ssh/id_rsa.pub admin-user@23.45.67.89 #(Your remote server IP)

Затем он запросит у вас пароль для входа в ssh этого сервера (с использованием указанного выше пользователя; в нашем случае admin-user)

Теперь с этим покончили; Теперь вы заметите, что вы можете подключиться к удаленному серверу по ssh, не запрашивая пароль, что нам и нужно для достижения полной автоматической синхронизации.

Теперь мы можем вернуться к rSync.

Мы можем синхронизировать нужные нам файлы, выполнив эту команду

rsync -av --delete -e ssh /websites admin-user@23.45.67.89:/remote-folder/

и просто мы можем добавить это в crontab, чтобы этот процесс запускался каждые X дней или часов.

Ниже приведен простой пример, который будет запускать эту команду каждый день в полночь.

00 00 * * * rsync -av --delete -e ssh /websites admin-user@23.45.67.89:/remote-folder/

Это можно добавить, набрав

crontab -e

Надеюсь, это поможет!