[Raw Msg Headers][Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: cluster-ready gauges?
On Tue, May 27, 2003 at 11:10:01AM +0400, Eugene Crosser 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
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
> 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...)
> Eugene Crosser, head of Internet Applications section, +7 501 787 1000
> ROL, EDN Sovintel, Golden Telecom, http://user.rol.ru/~crosser/
/Matti Aarnio <email@example.com>
To unsubscribe from this list: send the line "unsubscribe zmailer" in
the body of a message to firstname.lastname@example.org