Hi

Just a quick email, while I'm having lunch..

I don't like the proposed data/scaling model at all. I cant see it scaling that well, and will be a nightmare to provide HA.

Another issue I dont like, mysql clusters are a total nightmare to keep running. (i have extensive experience with multimaster and galera based mysql clusters)

Maybe do a more isolated management node (gui) with multiple independent worker nodes (piler+searchd), which are centrally controlled from the management node.

The worker nodes would get a map xml from the management node, mapping what email domains they would be storing on each worker node.

It would be a good idea to provide some sort of message transport system between the nodes (rabbitmq) in order for them to transfer emails from one node to another.

Now my thought:

Single Instance
==============
[master gui + piler01]
XML : AAA.com, BBB.com,CCC.com,DDD.com

Failover + scaling
=========================
[master gui + piler01] --- [slave gui + piler02]
XML : AAA.com , BBB.com | CCC.com, DDD.com

Failover  +  Scaling
=====================
GUI/control: [master gui] <==> [slave gui] (optional slave)
\\\\ the master gui, could be located on piler01, to allow for a single instance
Worker nodes: [piler01] --- [piler02]---[piler03]---[piler04]
XML : AAA.com | BBB.com | CCC.com | DDD.com

Treat the worker nodes as independent nodes, ie. storage and searchd/database is on each node.

piler01 is archive all email for AAA.com, piler02 is archiving all email for BBB.com

Normal operation, email from AAA.com arrives, piler01 process and archives
Infinite scaling would be possible
BBB.com was running on piler01, and then moved to piler02 to scale..

if piler02 goes offline, piler01 would know what domains belong to piler02, and thus would accept the messages, but not process them. Instead when piler02 comes online, it would send the messages to piler02 via rabbitmq.

The gui/control could be entirely XML or Mysql based. easiest would be to use mysql replication, and the slave node would be readonly, unless it was changed to a master node.

With my way, its the easiest to scale for 1----100 nodes, you could add HA to the gui node from the get go, or just run piler as a single server install.

As for distributed/shared storage.. Ideal is to leave that to the admin, one could use DAS/NAS/ceph/glusterfs


Regards

admin-at-extremeshok-dot-com

Reply via email to