2006-06-25 20:48:02 -04:00
|
|
|
/*
|
2009-10-03 05:21:53 -04:00
|
|
|
* include/types/backend.h
|
|
|
|
|
* This file assembles definitions for backends
|
|
|
|
|
*
|
|
|
|
|
* Copyright (C) 2000-2009 Willy Tarreau - w@1wt.eu
|
|
|
|
|
*
|
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
|
* License as published by the Free Software Foundation, version 2.1
|
|
|
|
|
* exclusively.
|
|
|
|
|
*
|
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
|
*/
|
2006-06-25 20:48:02 -04:00
|
|
|
|
|
|
|
|
#ifndef _TYPES_BACKEND_H
|
|
|
|
|
#define _TYPES_BACKEND_H
|
|
|
|
|
|
2006-06-29 12:54:54 -04:00
|
|
|
#include <common/config.h>
|
2009-10-03 05:21:53 -04:00
|
|
|
#include <types/lb_fwlc.h>
|
|
|
|
|
#include <types/lb_fwrr.h>
|
|
|
|
|
#include <types/lb_map.h>
|
|
|
|
|
#include <types/server.h>
|
2006-06-29 12:54:54 -04:00
|
|
|
|
2009-10-03 06:21:20 -04:00
|
|
|
/* Parameters for lbprm.algo */
|
|
|
|
|
|
|
|
|
|
/* Lower bits define the kind of load balancing method, which means the type of
|
|
|
|
|
* algorithm, and which criterion it is based on. For this reason, those bits
|
|
|
|
|
* also include information about dependencies, so that the config parser can
|
|
|
|
|
* detect incompatibilities.
|
2007-11-30 10:23:20 -05:00
|
|
|
*/
|
|
|
|
|
|
2009-10-03 06:21:20 -04:00
|
|
|
/* LB parameters. Depends on the LB kind. Right now, only hashing uses this. */
|
|
|
|
|
#define BE_LB_HASH_SRC 0x00000 /* hash source IP */
|
|
|
|
|
#define BE_LB_HASH_URI 0x00001 /* hash HTTP URI */
|
|
|
|
|
#define BE_LB_HASH_PRM 0x00002 /* hash HTTP URL parameter */
|
|
|
|
|
#define BE_LB_HASH_HDR 0x00003 /* hash HTTP header value */
|
|
|
|
|
#define BE_LB_HASH_RDP 0x00004 /* hash RDP cookie value */
|
2009-10-03 06:56:50 -04:00
|
|
|
|
|
|
|
|
#define BE_LB_RR_DYN 0x00000 /* dynamic round robin (default) */
|
|
|
|
|
#define BE_LB_RR_STATIC 0x00001 /* static round robin */
|
2009-10-03 06:21:20 -04:00
|
|
|
#define BE_LB_PARM 0x000FF /* mask to get/clear the LB param */
|
|
|
|
|
|
|
|
|
|
/* Required input(s) */
|
|
|
|
|
#define BE_LB_NEED_NONE 0x00000 /* no input needed */
|
|
|
|
|
#define BE_LB_NEED_ADDR 0x00100 /* only source address needed */
|
|
|
|
|
#define BE_LB_NEED_DATA 0x00200 /* some payload is needed */
|
|
|
|
|
#define BE_LB_NEED_HTTP 0x00400 /* an HTTP request is needed */
|
|
|
|
|
/* not used: 0x0800 */
|
|
|
|
|
#define BE_LB_NEED 0x00F00 /* mask to get/clear dependencies */
|
|
|
|
|
|
|
|
|
|
/* Algorithm */
|
|
|
|
|
#define BE_LB_KIND_NONE 0x00000 /* algorithm not set */
|
|
|
|
|
#define BE_LB_KIND_RR 0x01000 /* round-robin */
|
|
|
|
|
#define BE_LB_KIND_LC 0x02000 /* least connections */
|
|
|
|
|
#define BE_LB_KIND_HI 0x03000 /* hash of input (see hash inputs below) */
|
|
|
|
|
#define BE_LB_KIND 0x07000 /* mask to get/clear LB algorithm */
|
|
|
|
|
|
|
|
|
|
/* All known variants of load balancing algorithms. These can be cleared using
|
|
|
|
|
* the BE_LB_ALGO mask. For a check, using BE_LB_KIND is preferred.
|
|
|
|
|
*/
|
|
|
|
|
#define BE_LB_ALGO_NONE (BE_LB_KIND_NONE | BE_LB_NEED_NONE) /* not defined */
|
|
|
|
|
#define BE_LB_ALGO_RR (BE_LB_KIND_RR | BE_LB_NEED_NONE) /* round robin */
|
|
|
|
|
#define BE_LB_ALGO_LC (BE_LB_KIND_LC | BE_LB_NEED_NONE) /* least connections */
|
2009-10-03 06:56:50 -04:00
|
|
|
#define BE_LB_ALGO_SRR (BE_LB_KIND_RR | BE_LB_NEED_NONE | BE_LB_RR_STATIC) /* static round robin */
|
2009-10-03 06:21:20 -04:00
|
|
|
#define BE_LB_ALGO_SH (BE_LB_KIND_HI | BE_LB_NEED_ADDR | BE_LB_HASH_SRC) /* hash: source IP */
|
|
|
|
|
#define BE_LB_ALGO_UH (BE_LB_KIND_HI | BE_LB_NEED_HTTP | BE_LB_HASH_URI) /* hash: HTTP URI */
|
|
|
|
|
#define BE_LB_ALGO_PH (BE_LB_KIND_HI | BE_LB_NEED_HTTP | BE_LB_HASH_PRM) /* hash: HTTP URL parameter */
|
|
|
|
|
#define BE_LB_ALGO_HH (BE_LB_KIND_HI | BE_LB_NEED_HTTP | BE_LB_HASH_HDR) /* hash: HTTP header value */
|
|
|
|
|
#define BE_LB_ALGO_RCH (BE_LB_KIND_HI | BE_LB_NEED_DATA | BE_LB_HASH_RDP) /* hash: RDP cookie value */
|
|
|
|
|
#define BE_LB_ALGO (BE_LB_KIND | BE_LB_NEED | BE_LB_PARM ) /* mask to clear algo */
|
|
|
|
|
|
|
|
|
|
/* Higher bits define how a given criterion is mapped to a server. In fact it
|
|
|
|
|
* designates the LB function by itself. The dynamic algorithms will also have
|
|
|
|
|
* the DYN bit set. These flags are automatically set at the end of the parsing.
|
|
|
|
|
*/
|
|
|
|
|
#define BE_LB_LKUP_NONE 0x00000 /* not defined */
|
|
|
|
|
#define BE_LB_LKUP_MAP 0x10000 /* static map based lookup */
|
|
|
|
|
#define BE_LB_LKUP_RRTREE 0x20000 /* FWRR tree lookup */
|
|
|
|
|
#define BE_LB_LKUP_LCTREE 0x30000 /* FWLC tree lookup */
|
|
|
|
|
#define BE_LB_LKUP 0x70000 /* mask to get just the LKUP value */
|
|
|
|
|
|
|
|
|
|
/* additional properties */
|
|
|
|
|
#define BE_LB_PROP_DYN 0x80000 /* bit to indicate a dynamic algorithm */
|
|
|
|
|
|
2007-11-30 10:23:20 -05:00
|
|
|
|
2007-11-25 19:15:43 -05:00
|
|
|
|
|
|
|
|
/* various constants */
|
2007-12-02 05:01:23 -05:00
|
|
|
|
2008-04-14 14:47:37 -04:00
|
|
|
/* The scale factor between user weight and effective weight allows smooth
|
2007-12-02 05:01:23 -05:00
|
|
|
* weight modulation even with small weights (eg: 1). It should not be too high
|
|
|
|
|
* though because it limits the number of servers in FWRR mode in order to
|
|
|
|
|
* prevent any integer overflow. The max number of servers per backend is
|
|
|
|
|
* limited to about 2^32/255^2/scale ~= 66051/scale. A scale of 16 looks like
|
|
|
|
|
* a good value, as it allows more than 4000 servers per backend while leaving
|
|
|
|
|
* modulation steps of about 6% for servers with the lowest weight (1).
|
|
|
|
|
*/
|
|
|
|
|
#define BE_WEIGHT_SCALE 16
|
2007-11-25 19:15:43 -05:00
|
|
|
|
2009-10-03 05:21:53 -04:00
|
|
|
/* LB parameters for all algorithms */
|
|
|
|
|
struct lbprm {
|
2009-10-03 06:21:20 -04:00
|
|
|
int algo; /* load balancing algorithm and variants: BE_LB_* */
|
2009-10-03 05:21:53 -04:00
|
|
|
int tot_wact, tot_wbck; /* total effective weights of active and backup servers */
|
|
|
|
|
int tot_weight; /* total effective weight of servers participating to LB */
|
|
|
|
|
int tot_used; /* total number of servers used for LB */
|
|
|
|
|
int wmult; /* ratio between user weight and effective weight */
|
|
|
|
|
int wdiv; /* ratio between effective weight and user weight */
|
|
|
|
|
struct server *fbck; /* first backup server when !PR_O_USE_ALL_BK, or NULL */
|
|
|
|
|
struct lb_map map; /* LB parameters for map-based algorithms */
|
|
|
|
|
struct lb_fwrr fwrr;
|
|
|
|
|
struct lb_fwlc fwlc;
|
|
|
|
|
/* Call backs for some actions. Some may be NULL (thus should be ignored). */
|
|
|
|
|
void (*update_server_eweight)(struct server *); /* to be called after eweight change */
|
|
|
|
|
void (*set_server_status_up)(struct server *); /* to be called after status changes to UP */
|
|
|
|
|
void (*set_server_status_down)(struct server *); /* to be called after status changes to DOWN */
|
|
|
|
|
void (*server_take_conn)(struct server *); /* to be called when connection is assigned */
|
|
|
|
|
void (*server_drop_conn)(struct server *); /* to be called when connection is dropped */
|
|
|
|
|
};
|
|
|
|
|
|
2006-06-25 20:48:02 -04:00
|
|
|
#endif /* _TYPES_BACKEND_H */
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Local variables:
|
|
|
|
|
* c-indent-level: 8
|
|
|
|
|
* c-basic-offset: 8
|
|
|
|
|
* End:
|
|
|
|
|
*/
|