Finish writing section "Gestion du load-balancing".

This commit is contained in:
Romain Dessort 2012-05-22 08:57:08 +00:00
parent fe3b5a0a2f
commit 7d868fbfa6
1 changed files with 58 additions and 13 deletions

View File

@ -133,14 +133,16 @@ header HTTP \emph{Cache-Control} en ajoutant (dans le premier \texttt{if}:
set beresp.http.cache-control = ``max-age=432000'';
\end{verbatim}
\paragraph{Indiquer si un object provient du cache ou pas dans les headers HTTP}
\paragraph{Indiquer si un objet provient du cache ou pas dans les headers HTTP}
Dans un but de debugage, il peut être intéressant d'indiquer si un contenu
provient du cache de Varnish ou non. Cela se fait simplement comme ceci:
\begin{verbatim}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
\end{verbatim}
@ -171,21 +173,64 @@ director baz round-robin {
\end{verbatim}
Et enfin, on indique dans quel cas il sera utilisé (dans l'exemple il sera
utilisé dans tous les cas):
utilisé dans tous les cas, pas de condition):
\begin{verbatim}
sub vcl_recv {
if (req.http.host ~ "^.*$") {
set req.backend = baz;
}
set req.backend = baz;
}
\end{verbatim}
Il s'agit ici de la configuration la plus simple possible. Maintenant, il peut
être intéressant d'ajuster certains paramètres:
\begin{itemize}
\item poids
\item max connection
\item s/round-robin/client et critères pour sticky
\item Dans l'exemple ci dessus, le director est en mode round-robin. Le trafic
est alors réparti équitablement entre les backend. On peut définir un
«poids» pour chacun des backends, afin de jouer sur la répartition du trafic
entre eux:
\begin{verbatim}
director baz random {
{
.backend = www00;
.weight = 6;
}
{
.backend = www01;
.weight = 4;
}
}
\end{verbatim}
Pour cela, on change le mode du director pour \emph{random}.
\item Une directive importante est \texttt{.max\_connections}. Elle permet de
limiter le nombre de connexions concurrentes envoyées sur un backend. En en
positionnant une sur chacun des backends, Varnish saura qu'il devra ignorer
le backend saturé et en choisir un autre, afin de ne pas le surchargé.
\begin{verbatim}
backend www00 {
.host = "192.0.2.8";
.port = "80";
.max_connections = 80;
}
\end{verbatim}
\item Il est possible également de répartir les requêtes sur les backends
suivant des critères sur la requête. Le mode du director à utiliser est
alors \emph{client}:
\begin{verbatim}
director baz client {
{ .backend = www00; }
{ .backend = www01; }
}
sub vcl_recv {
set req.backend = baz;
set client.identity = req.ip;
}
\end{verbatim}
Dans l'exemple ci-dessus, le critère utilisé est l'IP du client
(\texttt{client.identity = req.ip}. Les autres critères possibles sont le
user-agent (\texttt{req.http.user-agent}), l'URL (\texttt{client.url}) ou encore
un cookie de session (\texttt{req.http.cookie}).
\end{itemize}
\subsection{Gestion du failover}