I left out the details because of the fear of putting
people to sleep. Here it goes
The requirement is to design High Availability for an
Application that is using a MySQL database. The
following is the configuration I have in mind.
CONFIGURATION:
- Two machines, Primary and Secondary. Each machine
has the __capability__ to run an instance of our
Application and an instance of MySQL Server.
- Bidirectional replication is setup between the
Primary and Secondary, i.e.; MySQL on both machines
are running with '--log-bin' and without
'--log-slave-updates'.
- A Heartbeat Manager runs on both boxes providing
the status of the Application (ACTIVE, STAND-BY or
DOWN).
- Also, the Application will be designed to ensure
that a database access or update is possible only if
the Application is ACTIVE.
INITIAL STATE:
- The Heartbeat Managers are running on both the
machines.
- To start off, Primary is acting as the Master.
The Application and the MySQL process on the Primary
are ACTIVE, performing database operations at any
given time.
- Secondary is the Slave. The Application and the
MySQL process on the Secondary are in STAND-BY mode,
i.e., no data access or update.
- All the data written to the Primary database is
being replicated onto the Secondary database via MySQL
Replication.
FAILOVER SCENARIO:
- Primary becomes unavailable. Primary is DOWN.
- The Heartbeat Mgr on the Secondary becomes aware
and makes the Secondary ACTIVE. This means
- The secondary will start taking requests and
making updates to the database.
- In short the secondary is the Master now.
Later....
- Primary is brought back up again. It will be in
the STAND-BY state.
- Since bidirectional replication is setup, the
updates on the Secondary get replicated onto the
Primary.
Now to the questions;
> "mirror each other" implies a dual-master scenario.
> Is that what
> you're planning? If so, are you aware of the
> problems in doing so,
> such as the lack of conflict resolution?
Yes. The Slave is expected to take over when the
Master goes down.
No, I am not aware of 'lack of conflict resolution'.
I am waiting for the 'High Performance MySQL' book to
explain this to me :-). Would be great if you explain
it or point me to some link.
>> Q2. Are there any gotchas that I need to watch out
for?
> Yes. ;-)
Hopefully the above details will help you provide me
more information.
Also, on a more general tone:
- How do people using MySQL as the database provide
High availability solutions?
- What is the alternative to Replication?
- Is the 'shared storage device' solution preferred in
which you have the Primary and Secondary pointing to
the same storage area; when machine fails, the other
machine is brought online against the same data.
All feedback is most welcome.
Gowtham.
--- Jeremy Zawodny <[EMAIL PROTECTED]> wrote:
> On Wed, Feb 18, 2004 at 02:18:59PM -0800, Gowtham
> Jayaram wrote:
> > Hello all:
> >
> > I am looking into the Replication issues that
> surface in a Failover
> > scenario (Master goes down and Slave is pressed
> into service).
> >
> > I understand that it is critical for the Master
> and Slave databases
> > to mirror each other for Replication to work.
>
> "mirror each other" implies a dual-master scenario.
> Is that what
> you're planning? If so, are you aware of the
> problems in doing so,
> such as the lack of conflict resolution?
>
> > I am trying to ensure that this integrity is
> maintained when the
> > Failover scenario occurs.
> >
> > Reading the MySQL FAQ, I see the following
> recommendation.
> >
> > 1. On the Master, execute these commands:
> >
> > mysql> FLUSH TABLES WITH READ LOCK;
> > mysql> SHOW MASTER STATUS;
> >
> > Record the log name and the offset from the
> output
> > of the SHOW MASTER STATUS statement.
> >
> > 2. On the Slave, issue this command, where the
> > replication coordinates that are the arguments to
> the
> > MASTER_POS_WAIT() function are the values recorded
> in
> > the previous step:
> >
> > mysql> SELECT MASTER_POS_WAIT('log_name',
> > log_offset', [timeout]);
> >
> > The SELECT statement will block until the Slave
> > reaches the specified log file and offset. At that
> > point, the Slave will be in sync with the Master
> and
> > the statement will return.
> >
> > 3. On the Master, issue the following statement to
> > allow the master to begin processing updates
> again:
> >
> > mysql> UNLOCK TABLES;
> >
> > 4. Also, I plan to add an extra (maybe redundant)
> > check to make sure that the SQL Thread is in 'Has
> read
> > all relay log' state.
> >
> > QUESTIONS:
> >
> > Q1. Will the above steps be __sufficient__ to
> synchronize the
> > databases?
>
> Well, you really haven't said much about how the
> failover and recovery
> are going to work. What you've described above is a
> partial method of
> syncing the two servers. But it's not clean when
> and how you inted to
> use it.
>
> > Q2. Are there any gotchas that I need to watch out
> for?
>
> Yes. ;-)
>
> > I would also like to hear any recommendations of
> how to handle the
> > scenario in which the Master database crashes.
> Since I cannot
> > connect to the Master database, I cannot perform
> above Steps 1, 2
> > and 3.
>
> Correct. If the master is dead, the slave has the
> data is has and
> there's not much else you can do about it until the
> master comes back
> up (assuming it does at all).
>
> > Q3. Will Step 4 work in this scenario (since it is
> file based)? If
> > it does work is it sufficient to ensure database
> mirroring?
>
> Maybe.
>
> > Q4. If Step 4 does not work what is the
> recommendation for this
> > scenario.
>
> Can you be more clear on the setup you have in mind?
> Does "pressed
> into service" mean you want to slave to take updates
> too?
>
> Jeremy
> --
> Jeremy D. Zawodny | Perl, Web, MySQL, Linux
> Magazine, Yahoo!
> <[EMAIL PROTECTED]> | http://jeremy.zawodny.com/
>
> MySQL 4.0.15-Yahoo-SMP: up 158 days, processed
> 1,941,264,213 queries (141/sec. avg)
__________________________________
Do you Yahoo!?
Yahoo! Mail SpamGuard - Read only the mail you want.
http://antispam.yahoo.com/tools
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]