Намагаючись зробити те, що написано в заголовку: зберегти існуючі сеанси під великим навантаженням та подати 503-повідомленням для новоприбулих відвідувачів.
Проблема: вона працює, але сеанси тривають не більше 90 секунд.
Поточні результати мене цікавлять, чи не вистачає налаштування тайм-ауту.
Призначення
Я намагаюся отримати хапрокси для:
- надсилати запити на нові сеанси на бекенд-001, коли загальна кількість сеансів на фронтальному рівні знаходиться нижче певного порогу.
- подати помилку 503 для нових сеансів, коли загальна кількість сеансів на фронті перевершує цей поріг
- дозволяти запити для існуючих сеансів, навіть якщо кількість сеансів перевищує поріг
Таким чином, відвідувачів, які перебувають у заповненні багатоступеневої форми, не здивує помилка 503, а новим відвідувачам можна буде сказати "будь ласка, поверніться пізніше, тому що ми справді зайняті зараз".
Налаштування
Установка така:
{visitors}
↓
[haproxy]
↓
[rails app on unicorn served by nginx] (right now just one
backend: 'backend-001')
сучасний підхід
Для досягнення вищесказаного я використовую конфігурацію нижче.
Цей прилад призначений для тестування з дуже низькою межею (10 підключень на передній частині (fe_conn gt 10)), щоб полегшити тестування.
Щоб поставити сервер під деяке навантаження, я використовую httperf наступним чином:
httperf --hog --server staging.machine.tld --uri / do_some_things --wsess = 500,10,30 - швидкість 2
global
daemon
maxconn 10000
defaults
mode http
timeout connect 6s
timeout client 60s
timeout server 60s
balance roundrobin
option http-server-close
frontend http-in
bind [PUBLIC_IP]:80
default_backend backend-001
acl too_many fe_conn gt 10
use_backend b_too_many if too_many
backend backend-001
fullconn 10
appsession _session_id len 128 timeout 7200s
cookie SERVERID insert maxidle 7200s
server Server1 127.0.10.1:80 cookie backend-001 check
backend b_too_many
errorfile 503 /var/www/50x.html
проблема
Як було сказано вище, проблема полягає в тому, що вона майже працює, але сеанси тривають не більше 90 секунд.
Якщо ви продовжуєте натискати, ви можете продовжувати свою сесію, навіть якщо 10 сеансів зайняті.
При спробі відкрити сторінку на сервері з іншим екземпляром браузера ви отримуєте помилку 503.
Отже, схоже, я майже там. Хтось має уявлення про те, що може бути причиною короткого часу сеансу?
І особливо, як я можу це виправити :)
(відредагувати: видалено 'вагу 1 maxconn 10' з рядка 'сервер', не актуально і може заплутатись) (редагуйте 2-е: виправлено '10 сеансів на передній частині 'до '10 з'єднань на передній частині')