RAIB: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: Redundant Array of Independent tant Databases) |
Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
redundant array of independent databases | |||
== Concepts == | |||
The goal of RAIB is to increase the availability of a firebird database. This is done by fail-over servers that are in (delayed) sync with the master server. If the master fails, a spare can be used to do further transactions. | |||
== Heart-Beat-Ticker == | |||
A Database has a counter (the Heart-Beat-Ticker = HBT) that is incremented after each statement commit doing something to data or metadata. A read-Only Statement should not incrememt the HBT. | |||
== Cluster Table == | |||
inside the database is the information about the spares and the master. | |||
IP Role last-HBT | |||
192.168.115.192 master | |||
192.168.115.196 spare | |||
192.168.115.80 spare | |||
30.23.12.3 spare | |||
== planned switiching the role from master to spare == | |||
# the master do not accept W Statements any more. (Try again in 2 Minutes!) | |||
# the master ensures that one spare is ready to take over (master.HTB=spare.HTB) | |||
# the master switch to "spare" Mode | |||
# the spare switch to "master" Mode | |||
== Database in master mode == | |||
== Database in spare mode == | |||
* the LOG-Receive Thread | |||
the master initiates communication to a spare and post LOG Packets to the spare. Alle Packets are flushed into memory - if CRC is ok, the spare sends a ACK to the master. The master do NOT wait until the spare executes the statement because the master already prooved that the statement is executable. | |||
* the Worker-Thread | |||
read the LOG-Packets, and execute it against the own Database. | |||
* LOG-missed | |||
if the spare was offline a time, she sees that local.HBT <> LOG.HBT+1. Before it can execute actual LOG-Packets she MUST ask the master (or other spares) for the missing LOG Packets. After doing the old stuff it can start to do execute the actual receiced LOG-Packtes. While this time, the log-Receive thread isnt stopping filling the LOG-Buffer. | |||
== New Database "Shutdown" Modes == | |||
work normal but refuse "W" Statement with a special error message. They may redirekted to a master. | |||
== Statement LOG == | |||
the master database server must log all the information wich was needed to do a change to the database. This information is transmitted to one or more spares. This information is also stored in the Database itself for a time. At least until its prooven that a n.fabk is available. | |||
After the Log-DataBlock must succsessfully | |||
1 - Do the Statement, detect while doing it, if it is harmfull to the Database (W oder R) | |||
2 - if W: compile a log-block with the name GEN_ID(HBT,1); | |||
if R: break | |||
3 - Send the LOG over the line. | |||
Client: DROP TABLE CLUB$2873 | |||
Server: W,928372 | |||
Client: SELECT CURRENT_TIMESTAMP from RDB$DATABASE | |||
Server: R | |||
== Content of a LOG-Packet == | |||
* the Statement | |||
* the Server context: used 'NOW'- and 'RND'- Values. | |||
* the HBT-Tick after the statement is executed. | |||
== detecting the failure == | |||
== | |||
== Positive Side Effekts == | |||
if a client assumes that a special statement is read only AND HBT of a spare is the HBT of the master she can post this statement to a spare to take load away from the master. | |||
and the Statement is Read-Only it can be used as a | |||
== Communication master<->spare == | |||
if a spare comes up (on connection request of a master), a spare can ask the master how | |||
== Good to have several spares == | |||
it enough fore the master to have one responding spare. If a connection to a spare fails it it retried every 20 Seconds. |
Version vom 23. Mai 2007, 10:57 Uhr
redundant array of independent databases
Concepts
The goal of RAIB is to increase the availability of a firebird database. This is done by fail-over servers that are in (delayed) sync with the master server. If the master fails, a spare can be used to do further transactions.
Heart-Beat-Ticker
A Database has a counter (the Heart-Beat-Ticker = HBT) that is incremented after each statement commit doing something to data or metadata. A read-Only Statement should not incrememt the HBT.
Cluster Table
inside the database is the information about the spares and the master.
IP Role last-HBT 192.168.115.192 master 192.168.115.196 spare 192.168.115.80 spare 30.23.12.3 spare
planned switiching the role from master to spare
- the master do not accept W Statements any more. (Try again in 2 Minutes!)
- the master ensures that one spare is ready to take over (master.HTB=spare.HTB)
- the master switch to "spare" Mode
- the spare switch to "master" Mode
Database in master mode
Database in spare mode
- the LOG-Receive Thread
the master initiates communication to a spare and post LOG Packets to the spare. Alle Packets are flushed into memory - if CRC is ok, the spare sends a ACK to the master. The master do NOT wait until the spare executes the statement because the master already prooved that the statement is executable.
- the Worker-Thread
read the LOG-Packets, and execute it against the own Database.
- LOG-missed
if the spare was offline a time, she sees that local.HBT <> LOG.HBT+1. Before it can execute actual LOG-Packets she MUST ask the master (or other spares) for the missing LOG Packets. After doing the old stuff it can start to do execute the actual receiced LOG-Packtes. While this time, the log-Receive thread isnt stopping filling the LOG-Buffer.
New Database "Shutdown" Modes
work normal but refuse "W" Statement with a special error message. They may redirekted to a master.
Statement LOG
the master database server must log all the information wich was needed to do a change to the database. This information is transmitted to one or more spares. This information is also stored in the Database itself for a time. At least until its prooven that a n.fabk is available. After the Log-DataBlock must succsessfully
1 - Do the Statement, detect while doing it, if it is harmfull to the Database (W oder R) 2 - if W: compile a log-block with the name GEN_ID(HBT,1);
if R: break
3 - Send the LOG over the line.
Client: DROP TABLE CLUB$2873
Server: W,928372
Client: SELECT CURRENT_TIMESTAMP from RDB$DATABASE Server: R
Content of a LOG-Packet
- the Statement
- the Server context: used 'NOW'- and 'RND'- Values.
- the HBT-Tick after the statement is executed.
detecting the failure
==
Positive Side Effekts
if a client assumes that a special statement is read only AND HBT of a spare is the HBT of the master she can post this statement to a spare to take load away from the master.
and the Statement is Read-Only it can be used as a
Communication master<->spare
if a spare comes up (on connection request of a master), a spare can ask the master how
Good to have several spares
it enough fore the master to have one responding spare. If a connection to a spare fails it it retried every 20 Seconds.