NDB Cluster -- Not only can this use multiple machines in one cluster, but you can have multiple clusters each taking writes. This can lead to "conflicts" when writes go to multiple masters 'simultaneously'. NDB resolves them automatically, based on algorithms that _you_ pre-specify. (Eg, "take the one with the earlier timestamp".) Caveat: The "engine" is not quite the same as InnoDB, so you need to learn about its quirks.

MMM -- Beware of recovery problems if one machine dies and cannot be resuscitated.

The biggest fear of single-Master (or Dual Master - singler writer, etc) is when the real problem is a network issue. If you cannot get to the 'dead' Master to see that it really is dead, you don't dare promote some other machine to be Master.

There are many 3rd party products that claim to go beyond out-of-the-box MySQL Replication. But, look under there covers. Make sure you can live with their subtle, hidden, limitations.

Remember, "semi-sync" is called "semi" for a reason.

Percona Cluster carries semi-sync a little closer to fully sync, but it is not.

If you really must scale both reads and writes, and you are unwilling to separate reads and writes, then maybe NDB Cluster is your first choice. I would rather convince you to separate your reads and writes, while avoiding problems with "critical reads".

On 4/2/12 1:22 PM, Wes Modes wrote:
Howdy all.

I am looking for a MySQL solution that allows us to horizontally scale a
number of MySQL nodes as peers without separating reads and writes, or
slaves and masters.  This may not be ideal, but the application we are
using is an unchangeable aspect of the project.

I ran into this post by Giuseppe Maxia
(http://onlamp.com/pub/a/onlamp/2006/04/20/advanced-mysql-replication.html)
that details our concern exactly:

     MySQL Cluster... is a complex architecture to achieve high
     availability and performance. One of the advantages of MySQL Cluster
     is that each node is a peer to the others, whereas in a normal
     replicating system you have a master and many slaves, and
     applications must be careful to write only to the master...

     There are some cases where the MySQL Cluster is the perfect
     solution, but for the vast majority, replication is still the best
     choice.

     Replication, too, has its problems, though:

       * There is a fastidious distinction between master and slaves.
         Your applications must be replication-aware, so that they will
         write on the master and read from the slaves. It would be so
         nice to have a replication array where you could use all the
         nodes in the same way, and every node could be at the same time
         master and slave.
       * There is the fail-over problem. When the master fails, it's true
         that you have the slaves ready to replace it, but the process of
         detecting the failure and acting upon it requires the
         administrator's intervention.

     Fixing these two misfeatures is exactly the purpose of this article.
     Using features introduced in MySQL 5.0 and 5.1, it is possible to
     build a replication system where all nodes act as master and slave
     at the same time, with a built-in fail-over mechanism.

The article goes on to talk about setting up a Multimaster Replication
System.

At one point, I was lured into using the Multi-Master Replication
Manager for MySQL (MMM) since it was said to be a set of scripts that
made this process easier, but found that like standard replication made
a distinction between masters and slaves, so I'm back to the original
Giuseppe article.

Anyone have experience setting up MySQL Multi-Master Replication?  Or is
there a better list to ask this question on?

Wes


--
Rick James - MySQL Geek


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql

Reply via email to