netfilter-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch v2 00/12] IPVS: SIP Persistence Engine
@ 2010-10-01 14:35 Simon Horman
  2010-10-01 14:35 ` [patch v2 01/12] [PATCH 01/12] netfilter: nf_conntrack_sip: Allow ct_sip_get_header() to be called with a null ct argument Simon Horman
                   ` (12 more replies)
  0 siblings, 13 replies; 26+ messages in thread
From: Simon Horman @ 2010-10-01 14:35 UTC (permalink / raw)
  To: lvs-devel, netdev, netfilter, netfilter-devel
  Cc: Jan Engelhardt, Stephen Hemminger, Wensong Zhang,
	Julian Anastasov, Patrick McHardy

This patch series adds load-balancing of UDP SIP based on Call-ID to
IPVS as well as a frame-work for extending IPVS to handle alternate
persistence requirements.

REVISIONS

This v2 of this patch series which fixes several problems
including non-atomic allocations while running atomic, and a memory leak.

v1 of this series addressed a few minor problems.

Internally there were 4 rfc versions, 0.1, 0.2, 0.3 and 0.4.

All changes are noted on a per-patch basis.

OVERVIEW

The approach that I have taken is what I call persistence engines.
The basic idea being that you can provide a module to LVS that alters
the way that it handles connection templates, which are at the core
of persistence. In particular, an additional key can be added, and
any of the normal IP address, port and protocol information can either
be used or ignored.

In the case of the SIP persistence engine, the only persistence engine, all
the keys used by the default persistence behaviour are used and the callid
is added as an extra key. I originally intended to ignore the cip, but this
can optionally be done by setting the persistence mask (-M) to 0.0.0.0
while allowing the flexibility of other mask values.

It is envisaged that the SIP persistence engine will be used in conjunction
with one-packet scheduling. I'm interested to hear if that doesn't fit your
needs.


CONFIGURATION

A persistence engine is associated with a virtual service
(as are schedulers). I have added the --pe option to the
ivpsadm -A and -E commands to allow the persistence engine
of a virtual service to be added, changed, or deleted.

e.g. ipvsadm -A -u 10.4.3.192:5060 -p 60 -M 0.0.0.0 -o --pe sip

There are no other configuration parameters at this time.


RUNNING

When a connection template is created, if its virtual service
has a persistence engine, then the persistence engine can add
an extra key to the connection template. For the SIP module this
is the callid. More generically, it is known as "pe data". And
both the name of the persistence engine, "pe name", and "pe data"
can be viewed in /proc/net/ip_vs_conn and by passing the
--persistent-conn option to ipvsadm -Lc.

e.g.
# ipvsadm -Lcn --persistent-conn
UDP 00:38  UDP         10.4.3.0:0         10.4.3.192:5060    127.0.0.1:5060 sip 193373839

Here we see a single persistence template (cport is 0), which has been
handled by the sip persistence engine. The pe data (callid) is 193373839.

In the case where the persistence engine can't match a packet for some
reason, the connection will fall back to the normal persistence handling.
This seems reasonable, as that if the packet ought to be dropped, iptables
could be used.

A limited amount of debugging information has been added which
can be enabled using a value of 9 or greater in
/proc/sys/net/ipv4/vs/debug_level

CODE AVAILABILITY

The kernel patches (12) are available in git as the pe-2 branch of
git://git.kernel.org/pub/scm/linux/kernel/git/horms/lvs-test-2.6.git

The ipvsadm patches (2) are available in git as the pe-2 branch of
git://github.com/horms/ipvsadm-test.git

I will post the ipvsadm patches separately


^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2010-10-04 22:37 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-10-01 14:35 [patch v2 00/12] IPVS: SIP Persistence Engine Simon Horman
2010-10-01 14:35 ` [patch v2 01/12] [PATCH 01/12] netfilter: nf_conntrack_sip: Allow ct_sip_get_header() to be called with a null ct argument Simon Horman
2010-10-01 14:35 ` [patch v2 02/12] [PATCH 02/12] netfilter: nf_conntrack_sip: Add callid parser Simon Horman
2010-10-01 14:35 ` [patch v2 03/12] [PATCH 03/12] IPVS: compact ip_vs_sched_persist() Simon Horman
2010-10-01 22:35   ` Julian Anastasov
2010-10-02  2:20     ` Simon Horman
2010-10-02  7:56       ` Julian Anastasov
2010-10-02  8:08         ` Simon Horman
2010-10-04 22:36           ` Julian Anastasov
2010-10-01 14:35 ` [patch v2 04/12] [PATCH 04/12] IPVS: Add struct ip_vs_conn_param Simon Horman
2010-10-01 20:58   ` Julian Anastasov
2010-10-02  1:13     ` Simon Horman
2010-10-02  1:15       ` Simon Horman
2010-10-01 14:35 ` [patch v2 05/12] [PATCH 05/12] IPVS: Allow null argument to ip_vs_scheduler_put() Simon Horman
2010-10-01 14:35 ` [patch v2 06/12] [PATCH 06/12] IPVS: ip_vs_{un,}bind_scheduler NULL arguments Simon Horman
2010-10-01 14:35 ` [patch v2 07/12] [PATCH 07/12] IPVS: Add struct ip_vs_pe Simon Horman
2010-10-01 21:45   ` Julian Anastasov
2010-10-02  1:55     ` Simon Horman
2010-10-01 14:35 ` [patch v2 08/12] [PATCH 08/12] IPVS: Add persistence engine data to /proc/net/ip_vs_conn Simon Horman
2010-10-01 21:50   ` Julian Anastasov
2010-10-02  1:58     ` Simon Horman
2010-10-01 14:35 ` [patch v2 09/12] [PATCH 09/12] IPVS: management of persistence engine modules Simon Horman
2010-10-01 14:35 ` [patch v2 10/12] [PATCH 10/12] IPVS: Allow configuration of persistence engines Simon Horman
2010-10-01 14:35 ` [patch v2 11/12] [PATCH 11/12] IPVS: Fallback if persistence engine fails Simon Horman
2010-10-01 14:35 ` [patch v2 12/12] [PATCH 12/12] IPVS: sip persistence engine Simon Horman
2010-10-01 15:09 ` [patch v2 00/12] IPVS: SIP Persistence Engine Simon Horman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).