Lese- und Schreib-Abfragen auf verschiedenen Server umleiten?

Lese- und Schreib-Abfragen auf verschiedenen Server umleiten?

am 28.11.2006 13:06:52 von Jens Gutzeit

Hallo zusammen,

ich suche schon eine ganze Weile.
Ich benötige einen MySQL-Proxy oder eine geänderte libmysql.so oder
ähnliches die ich nutzen kann um von verschiedenen, in PHP
geschriebenen, Scripten auf 2 MySQL-Datenbanken zuzugreifen wobei
Lese-Queries auf die eine und Schreib-Queries auf die andere Datenbank
zugreifen sollen.

Ist jemandem eine solche Software (für Linux Systeme) bekannt?
OpenSource wird natürlich bevorzugt, aber zur not wäre auch
"ClosedSource-kommerzware" akzeptabel.

Beste Grüsse und Dank im vorraus,
Jens

Re: Lese- und Schreib-Abfragen auf verschiedenen Server umleiten?

am 28.11.2006 13:11:33 von Andreas Pankratz

Hallo Jens,

ob es eine modifizierte libmysql gibt, die das ermöglicht ist mir
nicht bekannt. Von MySQL selber gibt es keine Lösung (Stand: Juli
2006).
So wie ich das verstanden habe möchtest du die Applikation durch
Lastverteilung beschleunigen.

Ein Workaround dafür:
Verwende im PHP Script zwei Connections. Eine für DML-Angelegenheiten,
die andere für SELECT Statements. Dann benötigst du eine
funktionierende MySQL Replikation. DML-Queries lässt du auf den Master
schreiben, SELECT Queries kannst du per Load Balancer (z.B.
Heartbeat+ldirectord ) auf die Slaves verteilen.

Gruß
Andreas

Re: Lese- und Schreib-Abfragen auf verschiedenen Server umleiten?

am 28.11.2006 13:27:50 von Jens Gutzeit

Andreas Pankratz schrieb:
> Hallo Jens,

Hallo Andreas,

> ob es eine modifizierte libmysql gibt, die das ermöglicht ist mir
> nicht bekannt. Von MySQL selber gibt es keine Lösung (Stand: Juli
> 2006).
> So wie ich das verstanden habe möchtest du die Applikation durch
> Lastverteilung beschleunigen.

Ja, genau das ist damit beabsichtigt.

>
> Ein Workaround dafür:
> Verwende im PHP Script zwei Connections. Eine für DML-Angelegenheiten,
> die andere für SELECT Statements. Dann benötigst du eine
> funktionierende MySQL Replikation. DML-Queries lässt du auf den Master
> schreiben, SELECT Queries kannst du per Load Balancer (z.B.
> Heartbeat+ldirectord ) auf die Slaves verteilen.

Das können wir zwar mit einigen eigenen Projekten machen, aber der
grösste Anteil der Scripte sind leider Kundenseiten die von Agenturen
geschrieben wurden, Anpassung ist da absolut unmöglich.

>
> Gruß
> Andreas

Jens

Re: Lese- und Schreib-Abfragen auf verschiedenen Server umleiten?

am 28.11.2006 13:49:52 von Axel Schwenke

Jens Gutzeit wrote:

> Ich benötige einen MySQL-Proxy oder eine geänderte libmysql.so oder
> ähnliches die ich nutzen kann um von verschiedenen, in PHP
> geschriebenen, Scripten auf 2 MySQL-Datenbanken zuzugreifen wobei
> Lese-Queries auf die eine und Schreib-Queries auf die andere Datenbank
> zugreifen sollen.
>
> Ist jemandem eine solche Software (für Linux Systeme) bekannt?

evtl. ist http://sqlrelay.sourceforge.net/ etwas für dich.

Ansonsten habe ich das in der Vergangenheit über mehrere MySQL-
Verbindungen gelöst, weil die platte Aufteilung in "Schreiben" und
"Lesen" nicht immer angemessen ist. Manche Lesezugriffe *muß* man
auf dem Master machen, z.B. wenn man die unkalkulierbare Verzögerung
durch die Replikation nicht tolerieren kann. Ganz zu schweigen von
SELECT ... FOR UPDATE und Transaktionen generell.


XL

Re: Lese- und Schreib-Abfragen auf verschiedenen Server umleiten?

am 28.11.2006 14:18:16 von Martin Kaffanke

Am Tue, 28 Nov 2006 13:27:50 +0100 schrieb Jens Gutzeit:

> Andreas Pankratz schrieb:
>> Hallo Jens,
>
> Hallo Andreas,
>
>> ob es eine modifizierte libmysql gibt, die das ermöglicht ist mir
>> nicht bekannt. Von MySQL selber gibt es keine Lösung (Stand: Juli
>> 2006).
>> So wie ich das verstanden habe möchtest du die Applikation durch
>> Lastverteilung beschleunigen.
>
> Ja, genau das ist damit beabsichtigt.
>
>>
>> Ein Workaround dafür:
>> Verwende im PHP Script zwei Connections. Eine für DML-Angelegenheiten,
>> die andere für SELECT Statements. Dann benötigst du eine
>> funktionierende MySQL Replikation. DML-Queries lässt du auf den Master
>> schreiben, SELECT Queries kannst du per Load Balancer (z.B.
>> Heartbeat+ldirectord ) auf die Slaves verteilen.
>
> Das können wir zwar mit einigen eigenen Projekten machen, aber der
> grösste Anteil der Scripte sind leider Kundenseiten die von Agenturen
> geschrieben wurden, Anpassung ist da absolut unmöglich.

Und die Kunden greifen alle auf dieselbe Datenbank zu (damit meine ich
nicht: Auf den selben Datenbankserver)?

Wenn das nicht so ist, sondern jeder Kunde seine eigene Datenbank hat,
dann kannst du doch die Datenbanken auf verschiedene Server aufteilen.
(Die Kunden müssen dann halt die Verbindungskennung ändern.)

Klingt für mich jetzt in erster Linie nach 'Zu viele Kunden auf einen
Server gepackt'.

lg,
Martin

Re: Lese- und Schreib-Abfragen auf verschiedenen Server umleiten?

am 28.11.2006 14:40:06 von Kris

Jens Gutzeit wrote:
> Das können wir zwar mit einigen eigenen Projekten machen, aber der
> grösste Anteil der Scripte sind leider Kundenseiten die von Agenturen
> geschrieben wurden, Anpassung ist da absolut unmöglich.

Es ist technisch nicht möglich, Software, die nicht replication-aware
geschrieben ist, durch ein Relay oder andere automatisierte Lösungen auf
ein Master-Slave-Setup zuverlässig zu verteilen.

Kris

Re: Lese- und Schreib-Abfragen auf verschiedenen Server umleiten?

am 28.11.2006 19:55:24 von Jens Gutzeit

Martin Kaffanke schrieb:
> Und die Kunden greifen alle auf dieselbe Datenbank zu (damit meine ich
> nicht: Auf den selben Datenbankserver)?

Sorry, nein. Ich meinte Datenbank-Server. Kommt davon wenn man 2 Stunden
mit einem Kunden telefoniert der die Begriffe immer durcheinanderwirft ...

>
> Wenn das nicht so ist, sondern jeder Kunde seine eigene Datenbank hat,
> dann kannst du doch die Datenbanken auf verschiedene Server aufteilen.
> (Die Kunden müssen dann halt die Verbindungskennung ändern.)
>
> Klingt für mich jetzt in erster Linie nach 'Zu viele Kunden auf einen
> Server gepackt'.

Ja, so siehts wohl aus. Wir werden dann wohl wirklich das ganze komplett
aufteilen müssen auf mehrere Server. Insbesondere nach den Kommentaren
von Kris und Axel erscheint mir das auch langsam sinnvoller.

Danke euch auf jeden Fall!

>
> lg,
> Martin

Beste Grüsse,
Jens