Лак игнорируя бэкэнд
У меня есть настройка лака с 2 серверными серверами с директором циклического перебора.
2 бэкэнда отображаются в varnishstat и varnishadm как здоровые.
вывод лака:
Backend name Admin Probe
boot.app1 probe Healthy 5/5
boot.app2 probe Healthy 5/5
Конфигурация VCL:
probe ping {
.interval = 5s;
.timeout = 1s;
.threshold = 3;
.window = 5;
.url = "/ping";
}
backend app1 {
.host = "app-1.example.com";
.port = "80";
.probe = ping;
}
backend app2 {
.host = "app-2.example.com";
.port = "80";
.probe = ping;
}
new application_servers = directors.round_robin();
application_servers.add_backend(app1);
application_servers.add_backend(app2);
set req.backend_hint = application_servers;
выход лакистата:
VBE.boot.app1.happy ffffffffff VVVVVVVVVVVVVVVVVVVVVVVV
VBE.boot.app1.bereq_hdrbytes 66.17K 0.00 91.00 0.00 0.00 0.00
VBE.boot.app1.beresp_hdrbytes 76.72K 0.00 106.00 0.00 0.00 0.00
VBE.boot.app1.beresp_bodybytes 11.91M 0.00 16.50K 0.00 0.00 0.00
VBE.boot.app1.conn 251 0.00 . 251.00 251.00 251.00
VBE.boot.app1.req 251 0.00 . 0.00 0.00 0.00
VBE.boot.app2.happy ffffffffff VVVVVVVVVVVVVVVVVVVVVVVV
Из команды varnishstat видно, что трафик, похоже, отправляется только на первый сервер в циклической конфигурации. Для сервера app2 нет других строк, кроме.happy
Есть мысли о том, что заставит директора выбирать первый сервер каждый раз?
1 ответ
Вам нужно изменить файл VCL на что-то вроде этого
probe ping {
.interval = 5s;
.timeout = 1s;
.threshold = 3;
.window = 5;
.url = "/ping";
}
backend app1 {
.host = "app-1.example.com";
.port = "80";
.probe = ping;
}
backend app2 {
.host = "app-2.example.com";
.port = "80";
.probe = ping;
}
sub vcl_init {
new application_servers = directors.round_robin();
application_servers.add_backend(app1);
application_servers.add_backend(app2);
}
sub vcl_recv{
set req.backend_hint = application_servers;
}