[Raw Msg Headers][Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: cluster-ready gauges?



Ummm, looks toooo complicated to actually implement (too compicated for
me, at least).  I was rather thinking of a dedicated collector process. 
Which probably would be much easier to do on "application level", i.e.
as a (perl) script that would poll all servers by MAILQ and aggregate
the results.

As to incoming connection counter, we'll probably do it within SpIn,
that would only require a five-liner patch to smtpserver...

In short, forget it, it was a stupid idea of mine :)

On Tue, 2003-05-27 at 13:23, Matti Aarnio wrote:

> > speaking about gauges and counters, do you think it makes sense to make
> > the "counter-keeper" cluster(/farm) ready from the beginning?  Aside
> > from the fact that it's nice to have aggregated statistics information,
> > it could be used for such an important thing as keeping
> > "connections-from-same-ip" counter which is rather important to limit
> > incoming spam flow.
> 
>   Present counters are purely local memory thing, and don't contain
>   e.g. smtpserver's "connections from same IP" analyzers.
> 
>   I did add a "mailq -QQQQ" (e.g. MAIL-v2 protocol "SHOW COUNTERS")
>   over the weekend.  It sure makes asking for data from remote system
>   somewhat easier, but requires, of course, that the scheduler is
>   up and about to serve it.
> 
>   How to do "cluster wide" tracking, and have some change of the protocol
>   to keep coherency ?
> 
>     - Presumption here is that a "cluster" is a set of machines in
> 	same Layer-2 multicast area (otherwise you need Layer-3
> 	multicast over routers...)
>     - Nodes ( = smtpserver master processes ) join some configured
> 	(IPv4) multicast group
>     - Protocol encodes everything in network byte order
>     - Protocol contains some node-id (source IP address ?), 
> 	set transmit id (32 bit continuously growing counter ?),
> 	number of packets in that transmit, and packet number
> 	of that particular packet.  Plus a checksum of each
> 	packet (nobody trusts UDP, right ?)
> 	Oh!  And start each packet with some protocol-id magic,
> 	e.g. "ZM01"   (Is there need for authenticators ?
> 	A shared-secret MD5 checksum of each packet -- does
> 	well that packet checksumming...)
>     - Protocol primary payload is an array of tuples:  IP-address, count
>     - They send their parallel connect datasets in that group
> 	every time there is some change, and at least every 14
> 	seconds, or so.
>     - Each node collects the data (discarding their own, if they hear it)
> 	and new data replaces old from same node-id (but only
> 	when received complete)
>     - Data that is more than 60 seconds old from its reception into
> 	a node is considered stale, and discarded, time is node
> 	internal, not encoded in protocol.
> 
>   That kind of thing is fairly simple to code.   If a machine does not
>   support multicast (all sensible modern machines you are likely to
>   use in clusters do), perhaps a peer-to-peer UDP unicasts would
>   make sense.  Configuring them will be trouble, though.  Some sort
>   of "PARAM cluster-partners-xyz  IP IP IP IP IP ..."
>   (On the other hand, ETRN-cluster already has this kind of peer
>    parametrization mechanism)
> 
>   To what an extent it would make sense to broadcast also the ZMailer
>   instance wide SHM segment ?  Separate broadcaster/aggregator server ?
>   (not integrated into any other master process.)  Such a beast could
>   also be SNMP responder...  What a pickle..    (Counters should never
>   go backwards..)   SMUX, AgentX,  net-snmp dynamic module, embedded
>   perl in net-snmp ?   Furthermore, how to arrange the object hierarchy,
>   when there can be multiple instances of ZMailer in one machine, and
>   also multiple machines worth of instances being published by a single 
>   SNMP proxy ?  (E.g. that cluster thingie...)
> 
>   Instance-ID I use is essentially the path of  POSTOFFICE.
>   Presumption being, that each ZMailer instance has its own POSTOFFICE
>   directory tree.
> 
> ...
> > We might have to incorporate "sitewide connection counter" into SpIn but
> > it won't be neccessary if it'd be a native Zmailer feature...
> 
>   Care (time?) to try your hand at this multicast client thing coding ?
>   I would localize it into  smtpserver/smtpchild.c,  with perhaps one
>   or two hooks to be called from the server main loop (e.g. knowing
>   socket-fd, and tracking timeout.)  
> 
>   I might do it too, but can't give schedule.   Nor have I a cluster of
>   machines in which to test it.  (That is mostly arrangement question,
>   of course.  Even my laptop could be used as a cluster member...)


-
To unsubscribe from this list: send the line "unsubscribe zmailer" in
the body of a message to majordomo@nic.funet.fi