Замена Apache Camel на F5 для балансировки нагрузки на 4 веб-сервера

Простите за нулевое знание F5 и его реализации. У нас есть 4 веб-сервера, на которых мы хотим использовать F5 для распределения нагрузки. Мы заменяем программный балансировщик нагрузки Apache Camel.

Текущая реализация:

  1. Каждый клиент создает идентификатор сеанса, когда клиент инициирует взаимодействие и отправляет запрос SOAP на URL-адрес SW LB. http://Server1:7001/WebService

  2. Балансировщик нагрузки SW использует алгоритм циклического перебора для поиска подходящего сервера из следующих 4 пунктов назначения и создает карту конечной точки сервера и идентификатора сеанса. http://Server1:9080/WebService http://Server2:9080/WebService http://Server3:9080/WebService http://Server4:9080/WebService

  3. SW LB поддерживает этот сеанс в течение 10 минут. Если в течение этого времени снова поступает запрос для того же идентификатора сеанса, для обработки запроса используется тот же целевой сервер. Таким образом, если у пользователя есть сеанс с Server2, этот сервер будет обслуживать его до тех пор, пока пользователь не завершит сеанс (или тайм-аут сеанса).

Как видно на Server1, у нас есть балансировщик нагрузки + веб-сервис. Мы убираем балансировщик нагрузки SW для перехода на F5.

Вышеупомянутую схему можно реализовать на F5? И F5 даст нам новый URL? Чем мы поделимся с нашими клиентами, чтобы получать запросы? Например, http://[new_IP_HW_LB]:[new_portvisible/WebService

Сможет ли он извлекать идентификатор сеанса из входящего запроса и поддерживать липкую карту сеанса?


person Tahir Akram    schedule 02.06.2016    source источник


Ответы (1)


Да, вы можете заменить Apache Camel на F5, и ваша настройка довольно стандартна. Создайте 4 узла, пул с 4 участниками и виртуальный сервер.

F5 потребуется новый IP-адрес [URL], если Server1 не предоставит адрес. Вы также можете использовать стандартный порт (80 для HTTP, 443 для HTTPS).

Самая сложная часть - это постоянство идентификатора сеанса. Вам нужно будет создать профиль универсального сохранения (Local Traffic »Profiles» Persistence) с тайм-аутом 600 секунд и создать iRule для создания записи на основе формата XML. iRules может быть непростым делом, но у сообщества DevCentral уже есть решение, которое вы можете адаптировать.

Кредит Stanislas от DevCentral: как получить параметры ответа. Этот iRule захватит параметр в теге <uid> XML.

when HTTP_RESPONSE {
  # Trigger collection for up to 1MB of data
  if {[HTTP::header exists "Content-Length"] && [HTTP::header "Content-Length"] <= 1048576}{
    set content_length [HTTP::header "Content-Length"]
  } else {
      set content_length 1048576
  }
  # Check if $content_length is not set to 0
  if { ([HTTP::status] == 200) && ($content_length > 0)} {
    HTTP::collect $content_length
  }
}

when HTTP_RESPONSE_DATA {
    # do stuff with the payload
    #find the application unique identifier between <uid> and </uid> (5 is the length of <uid> string)
    persist add uie [string trim [findstr [HTTP::payload] "<uid>" 5 "</uid>"]]
}

when HTTP_REQUEST {
    persist uie [string trim [findstr [HTTP::payload] "<uid>" 5 "</uid>"]]

}
person Theo    schedule 03.06.2016