MySQLTalk.org Forum Index MySQLTalk.org
MYSQL discussions groups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[Beginner] Some awful scenarios

 
Post new topic   Reply to topic    MySQLTalk.org Forum Index -> MySQL Cluster Discussion
View previous topic :: View next topic  
Author Message
Sebastien LELIEVRE
Guest





PostPosted: Fri Apr 27, 2007 10:10 am    Post subject: [Beginner] Some awful scenarios Reply with quote



Hi everyone,

First of all, I would like to thank the owner of this Mailing-List and
MySQL for their support (and products, of course ;)

I am Sebastien, a french student who is now on a training period with
TBS-Internet. TBS-Internet is a certification authority.

I've found this project because my goal is to re-design the
TBS-datacenter architecture and give it fault-tolerance and disaster
recovery.

TBS-Internet is currently using MySQL, and I'm about to deploy a MySQL
Cluster architecture. But first, I'm running some tests, and I need your
help to fully understand the MySQL Cluster principles.

Here is my test configuration :

Server1
/ \
Manager --- |
\ /
Server2

All machines are PIV HT 3GHz 1 Gb RAM, with Ubuntu Server (edgy)
I'm running the latest MySQL source provided, 5.1.17.

I've read quite all I could about MySQL Cluster on Internet in order to
understand how it worked

I've followed this tutorial which was pretty clear :
http://dev.mysql.com/tech-resources/articles/mysql-cluster-for-two-servers.html

Now that I'm running some tests, I'm experiencing some behaviour I
wouldn't expect.

Here I go :

- I've killed (9) the Manager (ndb_mgmd)
- I've killed (9) ndbd on both servers

One I got here, both nodes wasn't responding (quite normal, regards to
the doc)

- I've restarted the Manager (ndb_mgmd)
- I've restarted ndbd on server 2 only

There, I've got an error on server 2, I couldn't access the tables.

- I've restared mysqld (through the mysl.server init script), but the
same error came up

- Strange thing (to me) was that Server 1 could access the Database,
even without ndbd running (I didn't restarted it on server 1)

- I've re-restarted MySQL Server 2, he came up good, and was elected
Master Node (still no ndbd on Server 1)


I don't understand why server 2 couldn't access the database on the
"first" restart, but I do understand why he was elected Master on the
second.

Could you help me with it ? Do you need any more infos (logs or so) to
get a clearly understanding of what happened ?


I let you there another scenario, that I haven't tested yet. I f you
have the answer, please tell me :

Again with the same config, is it possible for Server1 and Server2 to
access and work with the database IF server1 can't establish any
communication of any kind with server2 (and vice-versa)

We suppose here that ndbd are up and running, but that the Manager is
shut down (or unavailable, cable unplugged or so..)

If yes, what would happen when the whole scheme would come back to
normal , (What would happen if the same data was accessed by both
without the other knowing it ?)


More to come, I'm afraid

Sebastien LELIEVRE
slelievre@tbs-internet.com Services to ISP
TBS-internet http://www.TBS-internet.com/
Back to top
Geert Vanderkelen
Guest





PostPosted: Fri Apr 27, 2007 3:18 pm    Post subject: Re: [Beginner] Some awful scenarios Reply with quote



On Apr 27, 2007, at 11:50, Sebastien LELIEVRE wrote:
...
Quote:

TBS-Internet is currently using MySQL, and I'm about to deploy a MySQL
Cluster architecture. But first, I'm running some tests, and I need
your
help to fully understand the MySQL Cluster principles.

Sounds like good fun :)

Quote:

Here is my test configuration :

Server1
/ \
Manager --- |
\ /
Server2


Just some terminology or it's hard to follow:
- MGM Nodes (ndb_mgmd)
- Data Nodes (ndbd)
- SQL/API Nodes (mysqld and NDB API applications)

Always helpful to put the output of
ndb_mgm> SHOW
so we can see your setup.

...
Quote:

- I've killed (9) the Manager (ndb_mgmd)
- I've killed (9) ndbd on both servers

That's a hard kill hehe..

Quote:
One I got here, both nodes wasn't responding (quite normal, regards to
the doc)

- I've restarted the Manager (ndb_mgmd)
- I've restarted ndbd on server 2 only

There, I've got an error on server 2, I couldn't access the tables.

Which error?

Quote:
- I've restared mysqld (through the mysl.server init script), but the
same error came up

What error? :)

Quote:
- Strange thing (to me) was that Server 1 could access the Database,
even without ndbd running (I didn't restarted it on server 1)

That's probably because the Data node on Server 2 was up.

Quote:
- I've re-restarted MySQL Server 2, he came up good, and was elected
Master Node (still no ndbd on Server 1)

MySQL or SQL/API nodes can't become 'Master' in Cluster. Only data
nodes can. The 'Master' is an internal thing. There are ideas not
showing them to the end users in the ndb_mgm tool because it gives
wrong ideas.

Quote:
Could you help me with it ? Do you need any more infos (logs or so) to
get a clearly understanding of what happened ?

A cluster log would be good, but first the errors you got. I think
it's good just to play a bit further with it.

Quote:
I let you there another scenario, that I haven't tested yet. I f you
have the answer, please tell me :

Again with the same config, is it possible for Server1 and Server2 to
access and work with the database IF server1 can't establish any
communication of any kind with server2 (and vice-versa)

If you talking about Data Nodes, yes. If you have NoOfReplicas=2 and
two data nodes, if you stop data node 1 (or it goes down), data 2
will also be responsible for the fragement of data node 1. That's the
idea.

Quote:
We suppose here that ndbd are up and running, but that the Manager is
shut down (or unavailable, cable unplugged or so..)

The MGM Node or the ndb_mgmd process is only needed:
- at startup for _any_ other node
- when Arbitration is needed

Quote:
If yes, what would happen when the whole scheme would come back to
normal , (What would happen if the same data was accessed by both
without the other knowing it ?)

I think you are talking about network partitioning.
Read "What is an Arbitrator?" on:
http://dev.mysql.com/doc/refman/5.1/en/faqs-mysql-cluster.html

Geert

--
Geert Vanderkelen, Support Engineer
MySQL GmbH, Germany, www.mysql.com
Back to top
Sebastien LELIEVRE
Guest





PostPosted: Fri Apr 27, 2007 6:11 pm    Post subject: Re: [Beginner] Some awful scenarios Reply with quote



Hi, and thanks for answering so quickly !

I'm going to try to develop this scenario :

Quote:

Just some terminology or it's hard to follow:
- MGM Nodes (ndb_mgmd)
- Data Nodes (ndbd)
- SQL/API Nodes (mysqld and NDB API applications)

Always helpful to put the output of
ndb_mgm> SHOW
so we can see your setup.

..

OK, so here is the configuration with those terms :

SQL API Node 1 +
Data Node 1
/ \
MGM node --- |
\ /
Data Node 2
+ SQL API Node 2

ndb_mgm> show ;
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.28.5 (Version: 5.1.17, Nodegroup: 0, Master)
id=3 @192.168.28.6 (Version: 5.1.17, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.28.7 (Version: 5.1.17)

[mysqld(API)] 2 node(s)
id=4 @192.168.28.5 (Version: 5.1.17)
id=5 @192.168.28.6 (Version: 5.1.17)


So here it is, let's start the scenario :

Quote:
- I've killed (9) the Manager (ndb_mgmd)

MGM_node# ps aux (at least, some of it)
root 30405 0.0 0.2 16348 2332 ? Ssl 12:23 0:01
ndb_mgmd -f /var/lib/mysql/config.ini

MGM_node# kill -9 30405

Quote:
- I've killed (9) ndbd on both servers

API_node1# ps aux (again, some of it)
root 20766 0.0 0.2 16516 2208 ? Ss 12:23 0:00 ndbd
root 20767 0.0 9.8 306740 101132 ? Sl 12:23 0:03 ndbd

API_node1# kill -9 20766 20767

and...

API_node2# ps aux (still some of it)
root 12778 0.0 0.2 16512 2200 ? Ss 14:13 0:00 ndbd
root 12779 0.1 9.7 306740 100392 ? Sl 14:13 0:00 ndbd

API_node2# kill -9 12778 12779

Quote:

That's a hard kill hehe..


That's to "simulate" a hard crash (I do not have physical access to the
machine to use my Axe Wink of the managment server. Concerning ndbd, it's
just for fun ;)

Quote:
One I got here, both nodes wasn't responding (quite normal, regards to
the doc)

ERROR 1296 (HY000): Got error 4009 'Cluster Failure' from NDBCLUSTER

Quote:

- I've restarted the Manager (ndb_mgmd)

MGM_Node# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show ;
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 91.121.28.5)
id=3 (not connected, accepting connect from 91.121.28.6)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.28.7 (Version: 5.1.17)

[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from any host)
id=5 (not connected, accepting connect from any host)

Quote:
- I've restarted ndbd on server 2 only


API_node2# ndbd
API_node2#

Quote:
There, I've got an error on server 2, I couldn't access the tables.

Which error?


Same as above : ERROR 1296 (HY000): Got error 4009 'Cluster Failure'
from NDBCLUSTER

Quote:
- I've restared mysqld (through the mysl.server init script), but the
same error came up


API_node2# /etc/init.d/mysql.server restart
Shutting down MySQL... *
Starting MySQL.......... *
API_node2#

Quote:
What error? :)


The song remains the same : ERROR 1296 (HY000): Got error 4009 'Cluster
Failure' from NDBCLUSTER

MGM_Node# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show ;
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 192.168.28.5)
id=3 @192.168.28.6 (Version: 5.1.17, Nodegroup: 0, Master)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.28.7 (Version: 5.1.17)

[mysqld(API)] 2 node(s)
id=4 @192.168.28.5 (Version: 5.1.17)
id=5 (not connected, accepting connect from any host)


Quote:
- Strange thing (to me) was that Server 1 could access the Database,
even without ndbd running (I didn't restarted it on server 1)

That's probably because the Data node on Server 2 was up.


OK, so a Data Node isn't bind to its SQL/API application node. That's
what I've found strange, actually.

Quote:
- I've re-restarted MySQL Server 2, he came up good, and was elected
Master Node (still no ndbd on Server 1)

MySQL or SQL/API nodes can't become 'Master' in Cluster. Only data nodes
can. The 'Master' is an internal thing. There are ideas not showing them
to the end users in the ndb_mgm tool because it gives wrong ideas.


OK, I would said that the Data Node 2 became 'Master' while Data Node 1
was still down.

Quote:
Could you help me with it ? Do you need any more infos (logs or so) to
get a clearly understanding of what happened ?

A cluster log would be good, but first the errors you got. I think it's
good just to play a bit further with it.


So, there they are. By Cluster logs, which do you mean ?

Quote:
I let you there another scenario, that I haven't tested yet. I f you
have the answer, please tell me :

Again with the same config, is it possible for Server1 and Server2 to
access and work with the database IF server1 can't establish any
communication of any kind with server2 (and vice-versa)

If you talking about Data Nodes, yes. If you have NoOfReplicas=2 and two
data nodes, if you stop data node 1 (or it goes down), data 2 will also
be responsible for the fragement of data node 1. That's the idea.




Quote:
We suppose here that ndbd are up and running, but that the Manager is
shut down (or unavailable, cable unplugged or so..)

The MGM Node or the ndb_mgmd process is only needed:
- at startup for _any_ other node
- when Arbitration is needed


Isn't it usefeul for backup as well ?


Quote:
If yes, what would happen when the whole scheme would come back to
normal , (What would happen if the same data was accessed by both
without the other knowing it ?)

I think you are talking about network partitioning.
Read "What is an Arbitrator?" on:
http://dev.mysql.com/doc/refman/5.1/en/faqs-mysql-cluster.html


That was it : the "split brain" scenario. Cheers !

But my scenario is a little bit more sadistic. I'm going to try to
explain it more clearly :

Let's say that we have a large distributed network. One part of the
cluster (let's call it 1-1) is in Europe, the other part (1-2) is in
America.

So let's say 15 Data Nodes & SQL Nodes (same machine) in America and 15
Data Nodes & SQL Nodes (same machine) in Europe.

All those 30 machines are part of the same MySQL Cluster, sharing the
same database.

Now, I understood that the arbitor was on the MGM Node, but I don't see
how it could be used for that will follow. So, let's just say it's down
(and located in Europe)

Now, let's say that all communication between America and Europe are
suddently severed and it's then impossible for our 30 nodes to
communicate with each other.

We know that the database is still accessible on both continents. So
Americans can still access our database, Europeans too. Let's say that
they alter the same data on each continent, but differently (someone
puts a "0" in a line, the other a "1", It doesn't matter...)

My question is : When the link between America and Europe will be up
again, how MySQL Cluster will handle the modifications that was made ?

The link about "network partitionning" assumed that all nodes are always
in contact with the arbitor. But my scenario here above doesn't take
that in count.

So, am I missing something ?

I'm quite impress with the result of my other tests, and there is only
those case I can't acknoledge (as far as I went until now).

Another one, but this one is just for confirmation :

When an application access the database to alter a table, this table is
"locked" to other applications until the process is terminated, am I
correct ?

Tnaks again for your (so quick!) answer, and the link you gave me. It
was really instructive!

Regards,

Sebastien LELIEVRE
slelievre@tbs-internet.com Services to ISP
TBS-internet http://www.TBS-internet.com/
Back to top
Geert Vanderkelen
Guest





PostPosted: Fri Apr 27, 2007 6:51 pm    Post subject: Re: [Beginner] Some awful scenarios Reply with quote

Hi Sebastien,

On Apr 27, 2007, at 15:11, Sebastien LELIEVRE wrote:
...
Quote:

SQL API Node 1 +
Data Node 1
/ \
MGM node --- |
\ /
Data Node 2
+ SQL API Node 2

Ok, thanks for the SHOW output and the dia above Smile
(Note that running SQL/API nodes on the same machine as Data Nodes is
_not_ recommended for production.)

...
Quote:

That's a hard kill hehe..


That's to "simulate" a hard crash (I do not have physical access to
the
machine to use my Axe Wink of the managment server. Concerning ndbd,
it's
just for fun Wink

Yup, but know that in a clustered environment that is not 'supposed'
to happen. I mean, one have to make sure that at least 1 node (per
nodegroup) stays up.

...
Quote:
ERROR 1296 (HY000): Got error 4009 'Cluster Failure' from NDBCLUSTER

Aye, this is normal.

...
Quote:
- I've restarted ndbd on server 2 only


API_node2# ndbd
API_node2#

But now you have to look at your logs. When you start 1 data node, it
will wait for a while (in total 90 second by default) for it's
partner. If the other data node doesn't come up, it will decided to
start partitioned.
If the second node is started, then it will start to sync data back
from the first one, and when that is done take over it's responsibility.

...
Quote:
Same as above : ERROR 1296 (HY000): Got error 4009 'Cluster Failure'
from NDBCLUSTER

My guess is here that you didn't wait long enough (90second by default).

...
Quote:
OK, so a Data Node isn't bind to its SQL/API application node. That's
what I've found strange, actually.

Not sure what you mean there. Data nodes are data nodes. They don't
depend on SQL/API nodes.
The SQL/API nodes on the other hand depend on it to get data and
subscribe to events, etc etc.
...
Quote:
OK, I would said that the Data Node 2 became 'Master' while Data
Node 1
was still down.

Yup, one will be Master. If you bring down the data node which was
Master, you will see that the new Master gets elected.

...
Quote:
So, there they are. By Cluster logs, which do you mean ?

The logs found on the MGM node, in your case <NDB_DataDir>/
ndb_1_cluster.log. You should have this open at all time when looking
at cluster and experimenting with it.

...
Quote:
We suppose here that ndbd are up and running, but that the
Manager is
shut down (or unavailable, cable unplugged or so..)

The MGM Node or the ndb_mgmd process is only needed:
- at startup for _any_ other node
- when Arbitration is needed


Isn't it usefeul for backup as well ?

Nope. Online backups are made using the ndb_mgm tool and sending the
BACKUP command. The backkups are made on the Data nodes.
One other thing I should have mentioned, is that MGM Nodes are
important for the Cluster logs as well. To see what's going on.

...
Quote:
But my scenario is a little bit more sadistic. I'm going to try to
explain it more clearly :

Let's say that we have a large distributed network. One part of the
cluster (let's call it 1-1) is in Europe, the other part (1-2) is in
America.

So let's say 15 Data Nodes & SQL Nodes (same machine) in America
and 15
Data Nodes & SQL Nodes (same machine) in Europe.

All those 30 machines are part of the same MySQL Cluster, sharing the
same database.

That's asking for problems. Realize that each data node talks to each
other data node. If you have a cluster in US and France, it will be
slow unless you have a VERY good LeasedLine :)

You should make this in a local setup, in a data center, 2 rooms, 2
separate racks with fiber between them.

Quote:
Now, I understood that the arbitor was on the MGM Node, but I don't
see
how it could be used for that will follow. So, let's just say it's
down
(and located in Europe)

Now, let's say that all communication between America and Europe are
suddently severed and it's then impossible for our 30 nodes to
communicate with each other.

We know that the database is still accessible on both continents. So
Americans can still access our database, Europeans too. Let's say that
they alter the same data on each continent, but differently (someone
puts a "0" in a line, the other a "1", It doesn't matter...)

My question is : When the link between America and Europe will be up
again, how MySQL Cluster will handle the modifications that was made ?

What you talking about is to be able to setup an Arbitration less
Cluster. This is indeed possible as of 5.1.16, but it was made for
special needs.. which probably less than 1% of users will use :)

The arbitrator will be on either America or Europe side. Which ever
side has it, will stay up. The other one goes down. This is needed
and normal.

Quote:
The link about "network partitionning" assumed that all nodes are
always
in contact with the arbitor. But my scenario here above doesn't take
that in count.

yeah, If you go arbitration less, it's up to you to make sure Data is
synced and corrected afterwards.. That's a choice you make, but if
both parts are coming up.. it will be trouble.

Quote:
So, am I missing something ?

MySQL Cluster is meant to be on a local network where latency is
reach under 0s.

What people are doing is making a Cluster more Highly available by
using MySQL replication to another Cluster. But you will still have
only 1 active cluster, and 1 fail over.

Quote:

When an application access the database to alter a table, this
table is
"locked" to other applications until the process is terminated, am I
correct ?

No. Cluster has no concept of table locking, right now it actually
impossible to do that.
On the other hand, MySQL server (the SQL nodes) have table locking,
but the other MySQL servers don't know another is setting the locks.

So, if you need to alter a table, you need to go Single User Mode
(using the ndb_mgm CLI). This will basically halt your application as
it can't access data anymore.
This is something we are working on to make more online.. Some is
implemented, but there is still lots to do.

Quote:
Tnaks again for your (so quick!) answer, and the link you gave me. It
was really instructive!

It's good to answer some basic stuff after a week of hard stuff ;)

Geert

--
Geert Vanderkelen, Support Engineer
MySQL GmbH, Germany, www.mysql.com
Back to top
Sebastien LELIEVRE
Guest





PostPosted: Fri Apr 27, 2007 9:08 pm    Post subject: Re: [Beginner] Some awful scenarios Reply with quote

Geert Vanderkelen a écrit :
Quote:
Hi Sebastien,


Good Evening Geert

Quote:

Ok, thanks for the SHOW output and the dia above Smile
(Note that running SQL/API nodes on the same machine as Data Nodes is
_not_ recommended for production.)

..

OK, I wasn't aware of that. That's change the way I see the architecture
now.

Quote:

Yup, but know that in a clustered environment that is not 'supposed' to
happen. I mean, one have to make sure that at least 1 node (per
nodegroup) stays up.

..

I'm thinking about Disaster Recovery, which is one of my aim in this
mission.

Quote:

But now you have to look at your logs. When you start 1 data node, it
will wait for a while (in total 90 second by default) for it's partner.
If the other data node doesn't come up, it will decided to start
partitioned.
If the second node is started, then it will start to sync data back from
the first one, and when that is done take over it's responsibility.

..
My guess is here that you didn't wait long enough (90second by default).

..

OK, so I was'nt aware of that either. That explains a lot ! Cheers !

Quote:

Nope. Online backups are made using the ndb_mgm tool and sending the
BACKUP command. The backkups are made on the Data nodes.
One other thing I should have mentioned, is that MGM Nodes are important
for the Cluster logs as well. To see what's going on.

..

So ndb_mgm is not linked what so ever with ndb_mgmd ? I thought it was,
sorry.

Quote:

That's asking for problems. Realize that each data node talks to each
other data node. If you have a cluster in US and France, it will be slow
unless you have a VERY good LeasedLine :)

You should make this in a local setup, in a data center, 2 rooms, 2
separate racks with fiber between them.


I was thinking about it, but I wanted something more "extreme" ;)


Quote:

What you talking about is to be able to setup an Arbitration less
Cluster. This is indeed possible as of 5.1.16, but it was made for
special needs.. which probably less than 1% of users will use :)


Why is that ? I'm looking for it right on monday since it's seemed
exactly what I'm intending to do, is it not ? Is there anything about it
in MySQL Documentation (I'm afraid not, I didn't find anything)


Quote:
What people are doing is making a Cluster more Highly available by using
MySQL replication to another Cluster. But you will still have only 1
active cluster, and 1 fail over.


That scenario seems close enough to what I'm aiming to do

Quote:

No. Cluster has no concept of table locking, right now it actually
impossible to do that.
On the other hand, MySQL server (the SQL nodes) have table locking, but
the other MySQL servers don't know another is setting the locks.

So, if you need to alter a table, you need to go Single User Mode (using
the ndb_mgm CLI). This will basically halt your application as it can't
access data anymore.
This is something we are working on to make more online.. Some is
implemented, but there is still lots to do.


That's a feature I could be interested with

Quote:

It's good to answer some basic stuff after a week of hard stuff ;)


OK, let's hope my problems with MySQL Cluster never become complex then ;)

Thanks a lot for your concern and your explanations

Regards

Sebastien.

Sebastien LELIEVRE
slelievre@tbs-internet.com Services to ISP
TBS-internet http://www.TBS-internet.com/
Back to top
Jon Stephens
Guest





PostPosted: Sat Apr 28, 2007 3:18 am    Post subject: Re: [Beginner] Some awful scenarios Reply with quote

Geert Vanderkelen wrote:
Quote:

On Apr 27, 2007, at 11:50, Sebastien LELIEVRE wrote:
..

TBS-Internet is currently using MySQL, and I'm about to deploy a MySQL
Cluster architecture. But first, I'm running some tests, and I need your
help to fully understand the MySQL Cluster principles.

Sounds like good fun :)


Here is my test configuration :

Server1
/ \
Manager --- |
\ /
Server2


Just some terminology or it's hard to follow:
- MGM Nodes (ndb_mgmd)

Hi!

"Management nodes[s]" is the preferred term in the documentation.

The reason for this is that "MGM" is neither an acronym nor an
abbreviation. The recognised English abbreviations for "management" and
"manager" are, respectively "mgt" and "mgr".

Unfortunately, the names of the management server and client executables
have contained this nonsense string for years...

Quote:
- Data Nodes (ndbd)
- SQL/API Nodes (mysqld and NDB API applications)

API node = application that acesses cluster data

SQL node = API node that provides an SQL interface (e.g. mysqld when
connected to a cluster)

Quote:

Always helpful to put the output of
ndb_mgm> SHOW
so we can see your setup.

..

- I've killed (9) the Manager (ndb_mgmd)
- I've killed (9) ndbd on both servers

That's a hard kill hehe..

Don't ever do a kill -9 on any cluster processes if you can help it.

Use the following commands in the management client, instead:

<node-id> STOP (stops management or data node #<node-id>)

ALL STOP (stops all data nodes)

SHUTDOWN (stops all data and management nodes)

You can also pass these commands to ndb_mgm from the system shell, like
this:

ndb_mgm -e "2 STOP"

ndb_mgm -e "ALL STOP"

ndb_mgm -e "SHUTDOWN"

Quote:

One I got here, both nodes wasn't responding (quite normal, regards to
the doc)

- I've restarted the Manager (ndb_mgmd)
- I've restarted ndbd on server 2 only

There, I've got an error on server 2, I couldn't access the tables.

Which error?

- I've restared mysqld (through the mysl.server init script), but the
same error came up

What error? :)

- Strange thing (to me) was that Server 1 could access the Database,
even without ndbd running (I didn't restarted it on server 1)

That's probably because the Data node on Server 2 was up.

- I've re-restarted MySQL Server 2, he came up good, and was elected
Master Node (still no ndbd on Server 1)

MySQL or SQL/API nodes can't become 'Master' in Cluster. Only data nodes
can. The 'Master' is an internal thing. There are ideas not showing them
to the end users in the ndb_mgm tool because it gives wrong ideas.

Could you help me with it ? Do you need any more infos (logs or so) to
get a clearly understanding of what happened ?

A cluster log would be good, but first the errors you got. I think it's
good just to play a bit further with it.

I let you there another scenario, that I haven't tested yet. I f you
have the answer, please tell me :

Again with the same config, is it possible for Server1 and Server2 to
access and work with the database IF server1 can't establish any
communication of any kind with server2 (and vice-versa)

If you talking about Data Nodes, yes. If you have NoOfReplicas=2 and two
data nodes, if you stop data node 1 (or it goes down), data 2 will also
be responsible for the fragement of data node 1. That's the idea.

NoOfReplicas = 1 -> all data nodes in the cluster share a single copy of
all data -> no redundancy -> if one data node goes down, so does your
cluster -> suffering -> The Dark Side ;)

Quote:
We suppose here that ndbd are up and running, but that the Manager is
shut down (or unavailable, cable unplugged or so..)

The MGM Node or the ndb_mgmd process is only needed:
- at startup for _any_ other node
- when Arbitration is needed

Also to stop data nodes or to shut down the cluster.

(Other than using kill -9 which is not a gopod thing to do.)

Quote:

If yes, what would happen when the whole scheme would come back to
normal , (What would happen if the same data was accessed by both
without the other knowing it ?)

I think you are talking about network partitioning.

Also referred to as "Split-Brain Syndrome" ;)

Quote:
Read "What is an Arbitrator?" on:
http://dev.mysql.com/doc/refman/5.1/en/faqs-mysql-cluster.html

If you've not done so already, you might want to spend some time on our
Cluster Forum: http://forums.mysql.com/list.php?25

Quote:

Geert

--Geert Vanderkelen, Support Engineer
MySQL GmbH, Germany, www.mysql.com





--MySQL Cluster Mailing List
For list archives: http://lists.mysql.com/cluster
To unsubscribe: http://lists.mysql.com/cluster?unsub=jon (AT) mysql (DOT) com




--

Jon Stephens - jon (AT) mysql (DOT) com
Technical Writer - MySQL Documentation Team
Brisbane, Australia (GMT +10.00)
Office: +61 (7) 3209 1394
Mobile: +61 402 635 784
MySQL AB: www.mysql.com
Back to top
Sebastien LELIEVRE
Guest





PostPosted: Wed May 02, 2007 5:27 pm    Post subject: Re: [Beginner] Some awful scenarios Reply with quote

Hi,

As a fact that I've still found nothing about arbitrator less
configurations for MySQL Cluster, nor that the HA-solution proposed by
both website tutorial & the forum links is able to suite me, I'm
re-posting here my disastrous scenario and questions I've risen and
which didn't find answers yet.

I'am so sorry for the inconvenience it may cause.

So, as I understand it, every "new" data node would become available
only after being synced with the others? Is there any problem with this
scenario and the case where an application constantly access/modify
data? How is this handled?

Does the MGM Node have something to do with database backup? I got the
answer that online backups are made using the ndb_mgm tool and sending
the BACKUP command. The backups are then made on the Data nodes. So that
would mean that ndb_mgm is not linked what so ever with the ndb_mgmd
process and so that the MGM Node(s) could be down while doing BACKUP ?

I've tried that kind of backup, and only Data Node 1 (above 2) was
backed up. Is this normal?

Here comes now the real aim of my post :

Let's take the configuration described before :

SQL API Node 1 +
Data Node 1
/ \
MGM node --- |
\ /
Data Node 2
+ SQL API Node 2

ndb_mgm> show ;
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.28.5 (Version: 5.1.17, Nodegroup: 0, Master)
id=3 @192.168.28.6 (Version: 5.1.17, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.28.7 (Version: 5.1.17)

[mysqld(API)] 2 node(s)
id=4 @192.168.28.5 (Version: 5.1.17)
id=5 @192.168.28.6 (Version: 5.1.17)


MGM Node is in room A, with the Data Node 1 and SQL/API Node 1. there is
a fiber link to room B where the Data Node 2 and SQL/API Node 2.

Let's now say that the fiber link is severed (let's say, cut by accident)

(I understood it was more realistic that way Wink)

The description below might be like an echo for some of you. You can
jump 3 paragraphs ;)

As I understood the Cluster principle for MySQL Cluster, Database is
still accessible in each room while communication between nodes is
unavailable.

Let's now say that the same data is altered in each room, but
differently (someone puts a "0" in a line, the other a "1", It doesn't
really matter...)

My question is : When the fiber link will be restored, how MySQL Cluster
will handle the modifications that was made ?

The link about "network partitioning" assumed that all nodes are always
in contact with the arbitrator. This scenario doesn't take that in count.

Another question would be how much time will it take to get the Cluster
(re)synchronized? (not only with this scenario)
Is there any way to know if data on a node is synchronized or not?

Finally, what configuration would you suggest for a High-Availability
solution? Mr. Geert Vanderkelen was talking about MySQL Cluster with
MySQL Replication between the Datacenters.

He has also pointed me a new "arbitrator less" feature that would solve
my silly scenario above, but told me it would only be useful to 1% of
MySQL Cluster users.

I didn't find any documentation about it. Would you please enlighten me
on this special feature? How does it work?

I was also wondering about any loncking mechanism. Indeed, what would
happen if 2 applications would try to alter the same data at the same
time, but on different nodes? He told me about the Single User Mode
(using the ndb_mgm CLI) which will basically halt the application as it
can't access data anymore. He said this was something they were working
on. Do you know what features are implemented yet? Is there any
documentation about it?

Heartbeat solutions are not possible in our case since we do not really
have the hand on our IPs nor machines.

Regards,

Sebastien LELIEVRE
slelievre@tbs-internet.com Services to ISP
TBS-internet http://www.TBS-internet.com/
Back to top
Geert Vanderkelen
Guest





PostPosted: Fri May 04, 2007 3:44 pm    Post subject: Re: [Beginner] Some awful scenarios Reply with quote

Hi Sebastien,

On May 2, 2007, at 14:27, Sebastien LELIEVRE wrote:
...
Quote:
So, as I understand it, every "new" data node would become available
only after being synced with the others? Is there any problem with
this
scenario and the case where an application constantly access/modify
data? How is this handled?

Yes, if you put in an 'empty' data node into a running cluster (for
example, you
had a hardware crash on one node), then it will copy all data over
from the
other data node. During this copy/sync process you can continue using
cluster
as normal. When the data node is ready and same state as it's
partner, it
will join the cluster and be responsible for it's partition.

Quote:
Does the MGM Node have something to do with database backup? I got the
answer that online backups are made using the ndb_mgm tool and sending
the BACKUP command. The backups are then made on the Data nodes. So
that
would mean that ndb_mgm is not linked what so ever with the ndb_mgmd
process and so that the MGM Node(s) could be down while doing BACKUP ?

The Management Node is needed to get the configuration of cluster. So
yes you need it when starting the backup. While the backup is being
made, killing the ndb_mgmd process shouldn't be a problem.

Quote:
I've tried that kind of backup, and only Data Node 1 (above 2) was
backed up. Is this normal?

No, unless Data Node 2 was not connected. In that case, Data Node did
the backup for both fragments.

...
Quote:
[ndbd(NDB)] 2 node(s)
id=2 @192.168.28.5 (Version: 5.1.17, Nodegroup: 0, Master)
id=3 @192.168.28.6 (Version: 5.1.17, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.28.7 (Version: 5.1.17)

[mysqld(API)] 2 node(s)
id=4 @192.168.28.5 (Version: 5.1.17)
id=5 @192.168.28.6 (Version: 5.1.17)

Note: You should have free API node slots for making backups, unless
you can free SQL Node 4 or 5.

Quote:
MGM Node is in room A, with the Data Node 1 and SQL/API Node 1.
there is
a fiber link to room B where the Data Node 2 and SQL/API Node 2.
...
As I understood the Cluster principle for MySQL Cluster, Database is
still accessible in each room while communication between nodes is
unavailable.

No, if you cut the connection between Room A and Room B you get a
split brain situation. If you still have Arbitration on (which you
really _should_ have on), then Room A will survive and Room B will go
down.

Quote:
Let's now say that the same data is altered in each room, but
differently (someone puts a "0" in a line, the other a "1", It doesn't
really matter...)

That would mean you are running Arbitration less then..

Quote:
My question is : When the fiber link will be restored, how MySQL
Cluster
will handle the modifications that was made ?

I haven't personally done this yet but you'll have to do some
conflict resolution yourself.
Probably with partitioning it would make life easier.. not sure.

Quote:
The link about "network partitioning" assumed that all nodes are
always
in contact with the arbitrator. This scenario doesn't take that in
count.

One of the basics in clustering is having this Arbitration.

Quote:
Another question would be how much time will it take to get the
Cluster
(re)synchronized? (not only with this scenario)
Is there any way to know if data on a node is synchronized or not?

In normal Cluster operations all nodes in every group have the exact
same data. So they are all the time 'synchronized'. One node can't
have data committed when another failed to do so. That would just
abort the transaction all together (two-phase commit)
When a data node has to copy all data back (because it's new, or was
to long offline) then it will need the time it needs to copy it
over.. That depends on the amount of data (and network/disks speed..)

Quote:
Finally, what configuration would you suggest for a High-Availability
solution? Mr. Geert Vanderkelen was talking about MySQL Cluster with
MySQL Replication between the Datacenters.

Cluster in itself is Highly Available, that's the whole point of it.
But it has to be configured and installed correctly. Btw, also people
administrating it should be highly available (this important factor
is sometimes forgotten).

Room A -> 2 data nodes (1 & 3)
|
|-Best Connection you can have here
|
Room B -> 2 data nodes (2 & 4)

Node groups will be (1,2) and (3,4) with NoOfReplicas=2.
Put Management node or Arbitrator in either room.

Setting up Cluster Geographical Replication is just adding an extra
parachute. But the cluster should be completely highly available
locally first.

Quote:
He has also pointed me a new "arbitrator less" feature that would
solve
my silly scenario above, but told me it would only be useful to 1% of
MySQL Cluster users.

I didn't find any documentation about it. Would you please
enlighten me
on this special feature? How does it work?

I would suggest to forget all about it and go with Arbitration.
http://dev.mysql.com/doc/refman/5.1/en/news-5-1-16.html (look for
ArbitrationRank)
http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-mgm-definition.html

(Note, the MCCGE note on last link is I think a bit outdated, I'll
get it corrected).

Quote:
I was also wondering about any loncking mechanism. Indeed, what would
happen if 2 applications would try to alter the same data at the same
time, but on different nodes? He told me about the Single User Mode
(using the ndb_mgm CLI) which will basically halt the application
as it
can't access data anymore. He said this was something they were
working
on. Do you know what features are implemented yet? Is there any
documentation about it?

MySQL Cluster is transactional (read-committed mode only, ACId), so I
guess that explains already part of it.
The Single User Mode is used when you are altering the schema. This
is something not possible to do online so you need to make sure
nobody is accessing or changing data while this operation is on going.
Adding indexes is possible to do online in MySQL 5.1. There is more
to come in future versions, but this is not as simple as it looks like.

http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-single-user-
mode.html
http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-limitations.html
"Problems relating to multiple MySQL servers"


Quote:
Heartbeat solutions are not possible in our case since we do not
really
have the hand on our IPs nor machines.

Not sure what this is about.

Cheers,

Geert

--
Geert Vanderkelen, Support Engineer
MySQL GmbH, Germany, www.mysql.com
Back to top
Sebastien LELIEVRE
Guest





PostPosted: Fri May 04, 2007 6:44 pm    Post subject: Re: [Beginner] Some awful scenarios Reply with quote

Hi Geert,

Once again, thanks for elightening me. I'm almost prepare to preach the
MySQL Cluster way across my IT and bring them synchronous data
consistency! ;)

(I've already begun : I left for lunch yelling "never put the --initial
parameteeeeeeeeeer!!!" Wink They all thought I was mad Razz)

I said "almost" because I still have ONE little dark spot with all this.
Only one, and I will have a clear view of MySQL Cluster.

This dark spot concerns the arbitrator (him again!)

Geert Vanderkelen a écrit :
Quote:
MGM Node is in room A, with the Data Node 1 and SQL/API Node 1. there is
a fiber link to room B where the Data Node 2 and SQL/API Node 2.
..
As I understood the Cluster principle for MySQL Cluster, Database is
still accessible in each room while communication between nodes is
unavailable.

No, if you cut the connection between Room A and Room B you get a split
brain situation. If you still have Arbitration on (which you really
_should_ have on), then Room A will survive and Room B will go down.

(...)


Quote:
Cluster in itself is Highly Available, that's the whole point of it. But
it has to be configured and installed correctly. Btw, also people
administrating it should be highly available (this important factor is
sometimes forgotten).

Room A -> 2 data nodes (1 & 3)
|
|-Best Connection you can have here
|
Room B -> 2 data nodes (2 & 4)

Node groups will be (1,2) and (3,4) with NoOfReplicas=2.
Put Management node or Arbitrator in either room.

Setting up Cluster Geographical Replication is just adding an extra
parachute. But the cluster should be completely highly available locally
first.


You told me last time it was looking for trouble to assume that having a
API Node accessing data in a room cut off from the arbitrator.

First part : How the room without the arbitrator would know that the
link went down? Does this mean there is a constant link between the
arbitrator and the Data Nodes?

Second part : Even the best connection I can ever have can be severed.
Presuming the link between A and B goes down, Do the arbitrators become
aware that something went wrong? How do they decide which part act like
the whole cluster? Is this a token-based mechanism or something like
that? (the arbitrator A and B cycle a token between them. The one with
it is the one whom group is declared up)

After acknoledge this, my view of MySQL Cluster principles would seem
clear enought to myself. And this will be thanks to you. I'm really
grateful for taking time to answer my questions :)

Quote:

Heartbeat solutions are not possible in our case since we do not really
have the hand on our IPs nor machines.

Not sure what this is about.


Let me enlighten you on my point here, then :)

Many doc refer to the combined use of Heartbeat and MySQL Cluster
providing a strong automatic and transparent fail-over mechanism.

We can't use this solution in our office since our datacenter doesn't
fully belong to us. I understood Heartbeat used to slide ARP Tables for
the Virtual IP it provides, allowing another server to take place where
the one eventually crashed.

That's why I was asking for fast fail-over and HA-solutions that would
have allowed us to switch between nodes, without having to tell our app
about them.

But this isn't so an issue, we can re-view our app code ;)

Cheers !

Sebastien.

Sebastien LELIEVRE
slelievre@tbs-internet.com Services to ISP
TBS-internet http://www.TBS-internet.com/
Back to top
Geert Vanderkelen
Guest





PostPosted: Mon May 07, 2007 10:10 am    Post subject: Re: [Beginner] Some awful scenarios Reply with quote

Hi Sebastien,

On May 4, 2007, at 15:44, Sebastien LELIEVRE wrote:
...
Quote:
You told me last time it was looking for trouble to assume that
having a
API Node accessing data in a room cut off from the arbitrator.

First part : How the room without the arbitrator would know that the
link went down? Does this mean there is a constant link between the
arbitrator and the Data Nodes?

No, there is no 'constant link' between Arbitrator and the data
nodes. Data nodes know who the arbitrator is and only use it when
needed.

The room without the arbitrator will know that is has to stop because
it can't reach it. This means that the other room got the majority.

Read this here: http://tinyurl.com/3486of

Quote:
Second part : Even the best connection I can ever have can be severed.
Presuming the link between A and B goes down, Do the arbitrators
become
aware that something went wrong? How do they decide which part act
like
the whole cluster? Is this a token-based mechanism or something like
that? (the arbitrator A and B cycle a token between them. The one with
it is the one whom group is declared up)

Note that there is only 1 arbitrator 'elected' within the Cluster.

The arbitrator is not aware at all, the data nodes are and need the
arbitrator to figure out whether to continue or not in case of a
split brain.

Comparable with football, where the referee is not really part of the
game, but only when players have trouble figuring out how to continue
(e.g. a faul) they rely on the arbitrator.

...
Quote:
Let me enlighten you on my point here, then :)

Many doc refer to the combined use of Heartbeat and MySQL Cluster
providing a strong automatic and transparent fail-over mechanism.

Can you point to these 'many docs'?
If you mean MySQL using DRBD with Heartbeat, then that is not MySQL
Cluster.
MySQL Cluster uses internally heartbeating, between the nodes. But no
need to go into details about that.

Quote:
We can't use this solution in our office since our datacenter doesn't
fully belong to us. I understood Heartbeat used to slide ARP Tables
for
the Virtual IP it provides, allowing another server to take place
where
the one eventually crashed.

That's why I was asking for fast fail-over and HA-solutions that would
have allowed us to switch between nodes, without having to tell our
app
about them.

If you want to make the MySQL or SQL Nodes in a MySQL Cluster highly
available for your application, then you best use a load-balancer.
The idea is that putting more SQL nodes will scale Cluster making the
application generally go faster. Using the load-balancer you can then
just take one out whenever you like. It shouldn't matter where it is
in a 3rd party datacenter or not.

Geert

--
Geert Vanderkelen, Support Engineer
MySQL GmbH, Germany, www.mysql.com
Back to top
Sebastien LELIEVRE
Guest





PostPosted: Thu May 10, 2007 8:09 pm    Post subject: Re: [Beginner] Some awful scenarios Reply with quote

Good Afternoon everyone

It's nearly the end of the tunnel for my understanding of MySQL Cluster
basics, and it's all thanks to you and your patience. Cheers!

Geert Vanderkelen a écrit :
Quote:
Hi Sebastien,

No, there is no 'constant link' between Arbitrator and the data nodes.
Data nodes know who the arbitrator is and only use it when needed.

The room without the arbitrator will know that is has to stop because it
can't reach it. This means that the other room got the majority.

Read this here: http://tinyurl.com/3486of


You pointed me this link before. I had understood the majority
principle, but not the fact that Data Nodes which aren't able to reach
the arbitrator would stop. Yet another misreading for me.

Quote:
Many doc refer to the combined use of Heartbeat and MySQL Cluster
providing a strong automatic and transparent fail-over mechanism.

Can you point to these 'many docs'?
If you mean MySQL using DRBD with Heartbeat, then that is not MySQL
Cluster.
MySQL Cluster uses internally heartbeating, between the nodes. But no
need to go into details about that.


Yes, I can point you those many docs.

First of All, there is the MySQL_WhitePaper_MySQL_HA_Solutions.pdf from
MySQL AB website. In it, several failure cases are defined and Recovery
solutions are provided. One of them is based on the linux-HA project
(Heartbeat) and MySQL (no-cluster, as you said)

You have then many web-sites that deal with the HA MySQL Cluster
configuration. The first I've found is the article on O'Reilly website.
This is the same article pointed by the sticky thread on the MySQL
Cluster forum.

http://www.oreillynet.com/lpt/a/6474
or
http://www.oreillynet.com/pub/a/databases/2006/02/16/ha_mysql_cluster.html

Another one is a tutorial on HowToForge, dealing with the same concept,
and explaining its installation/configuration on a Debian(-like)
Distribution

http://www.howtoforge.com/loadbalanced_mysql_cluster_debian

Quote:

If you want to make the MySQL or SQL Nodes in a MySQL Cluster highly
available for your application, then you best use a load-balancer. The
idea is that putting more SQL nodes will scale Cluster making the
application generally go faster. Using the load-balancer you can then
just take one out whenever you like. It shouldn't matter where it is in
a 3rd party datacenter or not.


We're planning on using LVS. We're already using it for other purposes.

Here is the configuration that will soon be used for production :

MGM Node |
| |
| Best | link ever
SQL+API Node ----------|---------- MySQL Server
/ \ |
/ \ |
/ \ |
Data Node 1 --- Data Node 2 |
|

As you can see, we're planning to use MySQL Cluster to MySQL Server
Replication (as described in the MySQL HA Solutions white paper pointed
above)

It's just a start. Thing is that the MySQL Server (Replicat) will become
a MySQL Cluster Replicat one day. (a typical Master/Slave configuration)

MGM and API Node will be duplicated, that's when we will need a
Load-Balancing system.

Once it will be done, I will sum up all of this as a tutorial (don't
know where yet, but I will!) All this will be thanks to your answers.


About the SQL/API Node and the Data Node, I understood from the MySQL
Cluster documentation that the API Node translate the query (even
optimize it) and send it to the Data Nodes. So the Data Nodes computes
the query (or fragments of it, since it can be ditributed) and results
are sent to the API Node which returns the (complete) result to the
application.

Good thing is that MySQL principles still apply with MySQL Cluster. So
the API Node can cache the query result in order to provide it if the
query is made (and data haven't been altered since).

Are those last statements correct?

Best regards,

Sebastien.

Sebastien LELIEVRE
slelievre@tbs-internet.com Services to ISP
TBS-internet http://www.TBS-internet.com/
Back to top
Geert Vanderkelen
Guest





PostPosted: Tue May 15, 2007 10:10 am    Post subject: Re: [Beginner] Some awful scenarios Reply with quote

On May 10, 2007, at 17:09, Sebastien LELIEVRE wrote:
...
Quote:

Many doc refer to the combined use of Heartbeat and MySQL Cluster
providing a strong automatic and transparent fail-over mechanism.

...
Yes, I can point you those many docs.

I misunderstood your previous post a bit, sorry about that. Yes,
heartbeat between the 'important' mysqld processes might be good in
some setups.

...
Quote:
We're planning on using LVS. We're already using it for other
purposes.

Ah, LVS, my old favorite. Using Direct Routing and then having the
whole webserver farm going down because I forget to disable ARPing on
one of them.. aaaah, good old days ;)

If you use LVS in front of the API/SQL nodes it's easy to pull one
out if needed.
However, this load balancer is then your single point of failure and
you'll need to setup some heart beating with a failover.
...
Quote:

As you can see, we're planning to use MySQL Cluster to MySQL Server
Replication (as described in the MySQL HA Solutions white paper
pointed
above)

It's just a start. Thing is that the MySQL Server (Replicat) will
become
a MySQL Cluster Replicat one day. (a typical Master/Slave
configuration)

MGM and API Node will be duplicated, that's when we will need a
Load-Balancing system.

Sounds good. You can have multiple slaves, so just at another slave
as cluster, don't replace the exiting non-cluster one (if you can).
Handy for whatever.. who knows?

Quote:
Once it will be done, I will sum up all of this as a tutorial (don't
know where yet, but I will!) All this will be thanks to your answers.

Well, maybe somewhere on mysql.com or forge.mysql.com? :)

I would be interested in hearing how it goes with LVS. I don't expect
problems, but I'm always eager to hear successes.

Quote:
About the SQL/API Node and the Data Node, I understood from the MySQL
Cluster documentation that the API Node translate the query (even
optimize it) and send it to the Data Nodes. So the Data Nodes computes
the query (or fragments of it, since it can be ditributed) and results
are sent to the API Node which returns the (complete) result to the
application.
Good thing is that MySQL principles still apply with MySQL Cluster. So
the API Node can cache the query result in order to provide it if the
query is made (and data haven't been altered since).

Are those last statements correct?

Yes and no, just some details. SQL nodes can cash data using
query_cache, but it is left off mostly (because there have been
problems with it in the past and maybe present still, aka bugs).
API Nodes don't 'translate the query', mysqld is and asking the
storage engine (which is an NDB API application in the end) for data.

Geert

--
Geert Vanderkelen, Support Engineer
MySQL GmbH, Germany, www.mysql.com
Back to top
Display posts from previous:   
Post new topic   Reply to topic    MySQLTalk.org Forum Index -> MySQL Cluster Discussion All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.