Синхронизация нескольких серверов Varnish Cache - PullRequest
4 голосов
/ 17 августа 2011

У нас есть два сервера, web1 и web2, каждый из которых работает с Apache и Varnish.Они сбалансированы по нагрузке с продолжительностью 30 минут.

В нашем тестировании мы обнаружили, что в некоторых случаях страницы кэшировались в одном экземпляре Varnish (скажем, web1), но не на Varnish в web2.

Есть ли способ сохранитьих в синхронизации?Так что, когда страница кэшируется (или удаляется) в web1, она также загружается (или удаляется) из web2, и наоборот?

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Вы можете использовать один лак в качестве основы для другого лака.

Вы можете сделать что-то вроде:

// use random director so you can fall back to web
director varnish random {
    {
        .backend = varnish2;
        .weight  = 100000000;
    }
    {
        .backend = web;
        .weight = 1;
    }
}

acl othervarnish {
        "{hostname}";
}

sub vcl_recv {
  set req.backend = web;

  // switch backend to varnish only if you haven't come from there
  if (!client.ip ~ othervarnish) {
     set req.backend = varnish;
  }
}

Но обратите внимание, похоже, что не работает сESIS .

0 голосов
/ 12 августа 2017

Я также ищу решение для решения такой же проблемы, но пока не нашел его.

Обходной путь может быть:

Установите HAProxy перед вашими веб-серверами и активируйте липкие сессии. Поэтому пользователь будет перенаправлен только на один сервер лака, который он посещал ранее (и содержит те же кэшированные данные).

Чтобы правильно очистить оба лака, ваш сценарий или приложение должны выполнить итерацию по списку всех серверов лака и очистить их один за другим.

На мой взгляд, это решение не рекомендуется. Varnish должен поддерживать настройку сетки, где все серверы могут синхронизироваться во времени (возможная согласованность).

...