LINUX.ORG.RU
ФорумAdmin

Nginx и балансировка с поддержкой сессий

 ,


1

1

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

Единственное, что мне приходит в голову, это манипуляции куками - а потом, по ним определять куда идти. Это теоретическая мысль.

С практической точки зрения нагуглил какой-то левый nginx-sticky-module, который делает ровно то, что я хочу. Кто-нибудь сталкивался с ним?

★★★★
Ответ на: комментарий от router

Да я чушь маленько сморозил. Понял я идею. Спасибо.

zloelamo ★★★★
() автор топика
Ответ на: комментарий от router

Остается вопрос с proxy. ip_hash берет внутренний адресс клиента в ЛВС. Подозреваю, что из юзверь агента. Если прокся подменяет это адресс у меня возникнут проблемы.

zloelamo ★★★★
() автор топика
Ответ на: комментарий от zloelamo

если тебе нужна более умная балансировка, попробуй поставить haproxy за нжинксом и маршрутизировать, например, по куке

нжинкс, как балансер, слишком беден фукционалом

Skolotovich ★★★
()
Ответ на: комментарий от zloelamo

Не хочется лишнюю сущность добавлять, честно говоря.

это не сущность, это очень полезная штука, будет часто выручать если разберешься как с ней работать

Skolotovich ★★★
()

еще как вариант - хранить сессии в одном месте,
например memcache, слушающим порт на хосте балансировщика

для этого надо будет поменять php.ini
http://php.net/manual/en/memcached.sessions.php


ip_hash хорош, но с ним веса(weight)) нельзя юзать
то есть вариант балансировки только «всем поровну»

neomag
()
Ответ на: комментарий от zloelamo

Потому что липкие сессии не осилили :) А на самом деле нам нужно было проксировать http streaming.

leave ★★★★★
()
Последнее исправление: leave (всего исправлений: 1)
Ответ на: комментарий от zloelamo

Вот как он его берёт:
nginx-0.8.53/src/http/modules/ngx_http_upstream_ip_hash_module.c:
91 static ngx_int_t
92 ngx_http_upstream_init_ip_hash_peer(ngx_http_request_t *r,
93 ngx_http_upstream_srv_conf_t *us)
94 {
...
114 if (r->connection->sockaddr->sa_family == AF_INET) {
115
116 sin = (struct sockaddr_in *) r->connection->sockaddr;
117 p = (u_char *) &sin->sin_addr.s_addr;
118 iphp->addr[0] = p[0];
119 iphp->addr[1] = p[1];
120 iphp->addr[2] = p[2];
121
122 } else {
123 iphp->addr[0] = 0;
124 iphp->addr[1] = 0;
125 iphp->addr[2] = 0;
126 }
...
164 for (i = 0; i < 3; i++) {
165 hash = (hash * 113 + iphp->addr) % 6271;
166 }

http://serverfault.com/questions/310729/what-ip-does-nginx-use-for-ip-hash-st...

oxumorron
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.