]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
* there was a bug in the way the backup servers were handled. They
authorWilly TARREAU <willy@pcw.(none)>
Wed, 1 Mar 2006 21:37:57 +0000 (22:37 +0100)
committerWilly TARREAU <willy@pcw.(none)>
Wed, 1 Mar 2006 21:37:57 +0000 (22:37 +0100)
  were erroneously load-balanced while the doc said the opposite.
  Since load-balanced backup servers is one of the features some
  people have been asking for, the problem was fixed to reflect the
  documented behaviour and a new option 'allbackups' was introduced
  to provide the feature to those who need it.

doc/haproxy-en.txt
doc/haproxy-fr.txt
haproxy.c

index 635af438527e2a0252c473aeafe4e6eb4a8de950..5b6e3c55ba43f70b245fd5e6c2f71a3341ba6272 100644 (file)
@@ -2,9 +2,9 @@
                              H A - P r o x y
                             Reference  Manual
                            -------------------
-                              version 1.2.8
+                              version 1.2.9
                               willy tarreau
-                                2006/01/29
+                                2006/03/01
 
 ============
 | Abstract |
@@ -880,8 +880,10 @@ a backup server, clients assigned to this server will stick to it even when the
 other ones come back. Conversely, if no cookie is assigned to such a server,
 the clients will get their cookies removed (empty cookie = removal), and will
 be balanced against other servers once they come back. Please note that there
-is no load-balancing among backup servers. If there are several backup servers,
-the second one will only be used when the first one dies, and so on.
+is no load-balancing among backup servers by default. If there are several
+backup servers, the second one will only be used when the first one dies, and
+so on. To force load-balancing between backup servers, specify the 'allbackups'
+option.
 
 Since version 1.1.17, it is also possible to visually check the status of all
 servers at once. For this, you just have to send a SIGHUP signal to the proxy.
@@ -979,6 +981,18 @@ Examples :
         server srv1 192.168.1.1 check port 25 inter 30000 rise 1 fall 2
         server srv2 192.168.1.2 backup
 
+# Load-balancing using a backup pool (requires haproxy 1.2.9)
+    listen http_proxy 0.0.0.0:80
+        mode http
+        balance roundrobin
+        option httpchk
+        server inst1 192.168.1.1:80 cookie s1 check
+        server inst2 192.168.1.2:80 cookie s2 check
+        server inst3 192.168.1.3:80 cookie s3 check
+        server back1 192.168.1.10:80 check backup
+        server back2 192.168.1.11:80 check backup
+        option allbackups  # all backups will be used
+
 
 3.2) Redistribute connections in case of failure
 ------------------------------------------------
index 1cc6e473516fbb3c45be2cac4b0ca014e1af207f..b14238a76aefcc4b7bad506ed55b0ae30bb990ff 100644 (file)
@@ -2,9 +2,9 @@
                              H A - P r o x y
                            Manuel de référence
                            -------------------
-                              version 1.2.8
+                              version 1.2.9
                               willy tarreau
-                                2006/01/29
+                                2006/03/01
 
 ================
 | Introduction |
@@ -877,12 +877,13 @@ utilis
 ajouter le mot clé "backup" sur la ligne de définition du serveur. Un serveur
 de secours n'est appelé que lorsque tous les serveurs normaux, ainsi que tous
 les serveurs de secours qui le précèdent sont hors d'usage. Il n'y a donc pas
-de répartition de charge entre des serveurs de secours. Ce type de serveurs
-peut servir à retourner des pages d'indisponibilité de service. Dans ce cas,
-il est préférable de ne pas affecter de cookie, afin que les clients qui le
-rencontrent n'y soient pas affectés définitivement. Le fait de ne pas mettre
-de cookie envoie un cookie vide, ce qui a pour effet de supprimer un éventuel
-cookie affecté précédemment.
+de répartition de charge entre des serveurs de secours par défaut. A partir
+de la version 1.2.9, il est possible de les utiliser simultanément grâce à
+l'option 'allbackups'. Ce type de serveurs peut servir à retourner des pages
+d'indisponibilité de service. Dans ce cas, il est préférable de ne pas affecter
+de cookie, afin que les clients qui le rencontrent n'y soient pas affectés
+définitivement. Le fait de ne pas mettre de cookie envoie un cookie vide, ce
+qui a pour effet de supprimer un éventuel cookie affecté précédemment.
 
 Depuis la version 1.1.22, il est possible d'envoyer les tests de fonctionnement
 vers un port différent de celui de service. C'est nécessaire principalement
@@ -989,6 +990,18 @@ Exemples :
         server srv1 192.168.1.1 check port 25 inter 30000 rise 1 fall 2
         server srv2 192.168.1.2 backup
 
+# Utilisation d'un groupe de serveurs pour le backup (nécessite haproxy 1.2.9)
+    listen http_proxy 0.0.0.0:80
+        mode http
+        balance roundrobin
+        option httpchk
+        server inst1 192.168.1.1:80 cookie s1 check
+        server inst2 192.168.1.2:80 cookie s2 check
+        server inst3 192.168.1.3:80 cookie s3 check
+        server back1 192.168.1.10:80 check backup
+        server back2 192.168.1.11:80 check backup
+        option allbackups  # all backups will be used
+
 
 3.2) Reconnexion vers un répartiteur en cas d'échec direct
 ----------------------------------------------------------
index bd1ec69de4723bf160f4c2c6b7887d980a5f9f51..c5784a75fbcf2bcfa47c2ccadc4d87253f54e5cf 100644 (file)
--- a/haproxy.c
+++ b/haproxy.c
@@ -325,6 +325,7 @@ int strlcpy2(char *dst, const char *src, int size) {
 #define PR_O_CHK_CACHE 0x00020000      /* require examination of cacheability of the 'set-cookie' field */
 #define PR_O_TCP_CLI_KA        0x00040000      /* enable TCP keep-alive on client-side sessions */
 #define PR_O_TCP_SRV_KA        0x00080000      /* enable TCP keep-alive on server-side sessions */
+#define PR_O_USE_ALL_BK        0x00100000      /* load-balance between backup servers */
 
 /* various session flags */
 #define SN_DIRECT      0x00000001      /* connection made on the server matching the client cookie */
@@ -1778,6 +1779,14 @@ static inline struct server *find_server(struct proxy *px) {
                return srv;
            srv = srv->next;
        } while (srv != px->cursrv);
+
+       /* By default, we look for the first backup server if all others are
+        * DOWN. But in some cases, it may be desirable to load-balance across
+        * all backup servers.
+        */
+       if (!(px->options & PR_O_USE_ALL_BK))
+           srv = px->srv;
+
     } while (ignore_backup--);
     return NULL;
 }
@@ -6590,6 +6599,10 @@ int cfg_parse_listen(char *file, int linenum, char **args) {
            /* enable TCP keep-alives on server sessions */
            curproxy->options |= PR_O_TCP_SRV_KA;
        }
+       else if (!strcmp(args[1], "allbackups")) {
+           /* Use all backup servers simultaneously */
+           curproxy->options |= PR_O_USE_ALL_BK;
+       }
        else if (!strcmp(args[1], "httpchk")) {
            /* use HTTP request to check servers' health */
            if (curproxy->check_req != NULL) {