Я хочу протестировать раннюю новую версию сервера, и для этого я хочу отразить часть реальных запросов, поступающих на рабочий сервер на моем тестовом сервере.
Модуль зеркала позволяет мне делать зеркало все трафик, но я не нашел, как выполнить частичное зеркалирование запросов, например, я хочу зеркалировать 30% трафика.
Это возможно? Если да, то как?
Если у вас два веб-сервера и вы хотите отправлять 30% запросов на сервер А и 70% запросов к серверу B вы можете поставить балансировщик нагрузки перед двумя веб-серверами. В любом случае вы должны поставить балансировщик нагрузки перед двумя веб-серверами, иначе весь трафик будет идти только на один или другой сервер.
Используя веса, вы можете указать, сколько трафика должно идти на первый или второй сервер. Ниже приведен простой пример:
http {
upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com weight=7;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
РЕДАКТИРОВАТЬ: Поскольку оба сервера являются производственными, вы можете использовать mirror
модуль на srv1.example.com отправить 30% трафика на ваш тестовый сервер. Согласен, это немного грязный прием, поэтому не стесняйтесь голосовать против, когда будут предложены лучшие решения.
РЕДАКТИРОВАТЬ 2: назначьте одинаковый IP-адрес обеим записям DNS A, если у вас только один сервер.
http {
...
split_clients "${remote_addr}AAA" $mirror_allowed {
30% 1;
* "";
}
}
server {
...
location / {
...
mirror /mirror;
}
location /mirror {
internal;
if ($mirror_allowed = "") {
return 200;
}
proxy_pass https://some.mirror.endpoint$request_uri;
}
}