On 03/04/2012 00:47, Wes Modes wrote:
> Thanks again for sharing your knowledge.  I do believe the answers I've
> receiving, but since I have requirements that I cannot easily alter, I'm
> also gently pushing my expert advisers here to look beyond their own
> preferences and direct experience.
> 
> RE: Shared storage.  I can easily let go of the preference to take
> advantage of shared storage.  I understand duplicated databases are the
> essence of database redundancy.  You make good points.
> 
> In terms of the acceptability of a small fraction of users being
> temporarily unable to access services:  rather than sharding, which
> again requires more control over the application than we have, I was
> more envisioning that would be the fraction of users who hit the one
> peer MySQL server that is temporarily unavailable due to h/w or s/w
> failure or DB corruption while its fail over is powered up.
> 
> Does MySQL cluster seem like it will address my requirements to allow us
> to horizontally scale a number of MySQL nodes as peers without
> separating reads and writes, or slaves and masters. 
> 
> Wes

Hi Wes,

If you can't alter the application to split reads and writes, why not
let MySQL Proxy to do it for you?

http://forge.mysql.com/wiki/MySQL_Proxy

Combine this with haproxy and you could build a multi-master environment
with each master having any number of slaves.  Set MySQL Proxy to send
writes to the masters and reads to the slaves.

Regards

Ian
-- 




> On 4/2/2012 2:25 PM, shawn green wrote:
>> Hello Wes,
>>
>> On 4/2/2012 4:05 PM, Wes Modes wrote:
>>> Thanks Shawn and Karen, for the suggestions, even given my vague
>>> requirements.
>>>
>>> To clarify some of my requirements.
>>>
>>> *Application:  *We are using an open-source application called Omeka,
>>> which is a "free, flexible, and open source web-publishing platform for
>>> the display of library, museum, archives, and scholarly collections and
>>> exhibitions."  Without getting into how free (or scalable) free software
>>> really is, we can view it as one aspect we cannot change, having been
>>> written into the grant requirements we received for the project.
>>> Experienced Omeka developers and our own developer have suggested
>>> that/it is not feasible to separate database writes from reads in the
>>> application/ (given time and resources).
>>>
>>
>> That's a shame. Sounds like you are back to one big server or several
>> smaller servers with in-program sharding.
>>
>>> *SAN: *The SAN is a Dell EqualLogic 6100 which has redundant everything,
>>> including multiple NICs, controllers, and power.  So we are less
>>> concerned about the SAN being a SPoF.  On the other hand, if we have a
>>> single big MySQL server that fails, we could bring up another copy of it
>>> via VMWare, but until the server came up, the application would be dead
>>> in the water.  If the database is corrupted, service will be interrupted
>>> for a considerable time.
>>>
>>
>> Again, each MySQL instance needs it's own copy of the data. Having
>> only one big powerful disk system means that each instance you fire up
>> must both share spindles and networking to access its data. Just like
>> a freeway at rush hour, you may find the traffic into and out of this
>> one device crawling to a halt exactly when you don't want it to.
>>
>>> *High Availability:*  It sounds like there is some debate over how to
>>> provide HA best, but do people really disagree on the desired results?
>>> Without getting into the many meanings of this buzz word, here's what we
>>> mean: /We desire to maintain high availability of service, allowing a
>>> small fraction of users to experience outage for only seconds at a
>>> time.  We desire to provide this through horizontal scaling, redundancy,
>>> failover planning, and external monitoring.  /
>>>
>>
>> "Small fraction of users" - this implies data sharding. Multiple MySQL
>> instances each with enough data to operate independently for one slice
>> of your most important data and an application smart enough to know
>> which shard to go to for each slice of data.
>>
>> "For a few seconds at a time" - you do not want a shared disk. Should
>> the active MySQL die, it's data will be in an inconsistent state. Once
>> you fire up the passive daemon it will need to perform a recovery
>> restart. This down time is more than likely not going to take only a
>> few seconds. The more data you have, the longer the checks will take. 
>> An independent copy maintained by a slave instance, provides a
>> logically consistent copy of the master's data as it will only
>> replicate complete transactions.
>>
>> "horizontal scaling" - one master, multiple slaves. This requires the
>> separation of writes and reads.
>>
>>
>>> *Scalability:  *Again, seems like there are lots of applications and
>>> implementation, but people agree on the general concept.  Here's what we
>>> mean for this project:  /We desire to  scale our services so that a
>>> usage surge does not cause unavailability of the services for some
>>> users.  We prefer to horizontally increase scalability using
>>> load-balancing strategies to treat clusters of servers as single logical
>>> units./
>>>
>>
>> "Horizontal scalability" - see above
>>
>> "clusters of servers" - unless they share a common data set (which
>> cannot happen via file sharing) they will not be useful as a logical
>> unit.  Multiple slaves all replicating from the same master does match
>> this requirement.
>>
>>> The application may have not been designed with great scalability in
>>> mind, but if multiple application instances are accessing multiple
>>> database servers treated as one logical unit, that may not be too
>>> relevant.
>>>
>>
>> "logical unit" - see above
>> "multiple database servers" - remember! each instance of MySQL
>> requires its own set of data. No sharing is allowed.
>>
>>> I am responsible for creating an architecture upon which this project
>>> will run.  I am not responsible for redesigning the application.   So
>>> far, no one has suggested anything that approached meeting our
>>> requirements, even our vague ones.  Perhaps I am asking the wrong list?
>>>
>>
>> No, you are asking the correct list. You are just not believing our
>> answers. The application design is your stumbling block. It is written
>> to function only with one large database (SPOF). Until you can fix
>> that (as painful as it may be), you cannot achieve your availability
>> goals.
>>
>>
>>> Does anyone have any experience with MySQL Multi-Master Replication?
>>> Perhaps that should be a separate post.
>>>
>>
>> Replication rings are possible but you must design your application to
>> take special care to NOT update the same row in multiple nodes of the
>> ring at the same time. This is even harder to design and code for than
>> splitting writes/reads to master/slaves.
>>
>> Also the loss of one node of a replication ring is not as easy to
>> recover from as simply promoting one slave to become the new master of
>> a replication tree (demoting the recovered former-master to become yet
>> another slave) as there may be pending events in the relay logs of the
>> lost node that have not yet been relayed to the downstream node.
>>
>> I may not have every answer, but I have seen nearly every kind of
>> failure.  Everyone else is encouraged to add their views to the
>> discussion.
>>
> 


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

Reply via email to