Konfiguracja DBSlayer MySQL
Wstęp
Dowiesz się jak skonfigurować DBSlayer. Jest to handler służący do równoważenia obciążenia między kilka serwerów MySQL, oferując wysoką skalowalność oraz wygodę używania. Przejdź do MySQL Bridge handler aby dowiedzieć się o podstawach tego systemu.
W skrócie działa on jako proxy dla serwera MySQL. Proxy to może być obsługiwane przez: JSON przez HTTP, odpowiedź może zostać zwrócona w sposób dostępny dla jednego z języków: JSON, Ruby, Python oraz PHP.
Moża wykonywać więcej niż jedno zapytanie na raz ( transakcje ), wtedy zwrócona zostanie lista wyników.
W skrócie działa on jako proxy dla serwera MySQL. Proxy to może być obsługiwane przez: JSON przez HTTP, odpowiedź może zostać zwrócona w sposób dostępny dla jednego z języków: JSON, Ruby, Python oraz PHP.
Moża wykonywać więcej niż jedno zapytanie na raz ( transakcje ), wtedy zwrócona zostanie lista wyników.
Niezależność
Generalnie dobrze jest oddzielić balancer bazy danych od głównego serwera WWWW, zarówno z powodu wydajności jak i bezpieczeństwa. Możesz skonfigurować Cherokee w taki sposób aby handler DBSlayer był ustawiony na tym samym serwerze co serwer WWW, jednak takie skupienie wywołań nie jest zalecane. Uruchomienie dodatkowego niezależnego serwera Cherokee na innym porcie, który będzie obsługiwał tylko DBSlayer. Warto też ustawić temu dodatkowemu serwerowi DBSlayer jako regułę główną ( Default rule ). Pozwoli Ci to na całkowite odzielenie balancera bazy danych oraz łatwiejsze zarządzanie.
Pamiętaj, że każdy DBSlayer może zarządzać jedną bazą danych ( lub ich zestawem ). Jeśli potrzebujesz dostępu do kilku baz danych, po prostu musisz ustawić różne reguły, lub nawet osobne procesy ( i konfiguracje ) Cherokee dla każdej bazy z osobna.
DBSlayer może być używany zarówno dla zapisu i odczytu danch, ale częśc odpowiedzialna za równoważenie obciążenia ma zostosowanie tylko dla SELECT. Kiedy wykonujesz INSERT pamiętaj o synchronizacji bazy danych ( mowa o środowisku wieloserwerowym, klastrowym ), balancer bazy danych będzie zwracał tuplę ( krotkę ) z informacjami o wyniku działania, ilości rekordów, flagę rollback itd. Nie będzie on powtarzał tej operacji dla każdego z twoich serwerów MySQL.
Równoważenie obciążenia dla bazy danych zwiększa znacząco wydajność aplikacji, ale wymaga pewnych założeń. Musisz założyć, że system jest niezależny. Czyli że jedna operacja nie ma wpływu na kolejną. Nie jest to duże ograniczenie, ale pozwala na użycie connection pooling oraz na database access dispatching. MySQL jest niezależny dla zapytań, ale niektóre operacje na bazie danych już nie są niezależne. Na przykład ustawianie zmiennych globalnych, przydzielanie praw dostępu do bazy danych oraz zmienianie struktury bazy danych.
Dodatkowo, powinieneś być bardzo ostrożny podczas blokowania tabel lub wykonywania transakcji. W tych wypadkach musisz wykonać wszyskie powiązane ze sobą operacje w jednym zapytaniu, nawet przedzielonym średnikiem. Nigdy ich nie rozdzielaj, w przeciwnym razie wydajność całego systemu gwałtownie spadnie i stanie się on niestabilny.
Pamiętaj, że każdy DBSlayer może zarządzać jedną bazą danych ( lub ich zestawem ). Jeśli potrzebujesz dostępu do kilku baz danych, po prostu musisz ustawić różne reguły, lub nawet osobne procesy ( i konfiguracje ) Cherokee dla każdej bazy z osobna.
DBSlayer może być używany zarówno dla zapisu i odczytu danch, ale częśc odpowiedzialna za równoważenie obciążenia ma zostosowanie tylko dla SELECT. Kiedy wykonujesz INSERT pamiętaj o synchronizacji bazy danych ( mowa o środowisku wieloserwerowym, klastrowym ), balancer bazy danych będzie zwracał tuplę ( krotkę ) z informacjami o wyniku działania, ilości rekordów, flagę rollback itd. Nie będzie on powtarzał tej operacji dla każdego z twoich serwerów MySQL.
Równoważenie obciążenia dla bazy danych zwiększa znacząco wydajność aplikacji, ale wymaga pewnych założeń. Musisz założyć, że system jest niezależny. Czyli że jedna operacja nie ma wpływu na kolejną. Nie jest to duże ograniczenie, ale pozwala na użycie connection pooling oraz na database access dispatching. MySQL jest niezależny dla zapytań, ale niektóre operacje na bazie danych już nie są niezależne. Na przykład ustawianie zmiennych globalnych, przydzielanie praw dostępu do bazy danych oraz zmienianie struktury bazy danych.
Dodatkowo, powinieneś być bardzo ostrożny podczas blokowania tabel lub wykonywania transakcji. W tych wypadkach musisz wykonać wszyskie powiązane ze sobą operacje w jednym zapytaniu, nawet przedzielonym średnikiem. Nigdy ich nie rozdzielaj, w przeciwnym razie wydajność całego systemu gwałtownie spadnie i stanie się on niestabilny.
Bezpieczeństwo
Handler ten został zaprojektowany do używania wewnątrz lokalnej bezpiecznej sieci. Jeśli masz obawy związane z publicznym udostępnieniem dostępu do bazy danych, musisz poprawnie zabezpieczyć swoją sieć lokalną etc.
Zalecamy nigdy nie udostępniać MySQL bridge publicznie, zalecamy też wyłączenie prawa usunięcia tabel, wierszy dla konta z którego korzystać będzie ten handler. Konfiguracja dostępu do bazy danych jest całkowicie niepowiązany z Cherokee.
Zalecamy nigdy nie udostępniać MySQL bridge publicznie, zalecamy też wyłączenie prawa usunięcia tabel, wierszy dla konta z którego korzystać będzie ten handler. Konfiguracja dostępu do bazy danych jest całkowicie niepowiązany z Cherokee.
Modułowość
Mostek MySQL nie działa sam. Jest to integralna część Cherokee, i jak każdy moduł może używać innych funkcji udostępnianych przez serwer. Na przykład możesz używać [loggerów](/pages/dokumentacja/dzial/loggery) aby logować dostęp do bazy danych.
Keep-Alive powinno być zawsze włączone dla serwera Cherokee na którym skonfigurowany jest mostek MySQL ( MySQL bridge ), dzięki temu wydajność całości będzie optymalna.
Keep-Alive powinno być zawsze włączone dla serwera Cherokee na którym skonfigurowany jest mostek MySQL ( MySQL bridge ), dzięki temu wydajność całości będzie optymalna.
Replikacja
Pamiętaj, że ten handler nie ma mechanizmów do replikacji bazy danych. Musisz niezależnie od
Konfiguracja
Przykład oparty będzie o osobną instację Cherokee tylko dla mostka MySQL ( MySQL bridge ), będziemy równoważyć obciążenie na kilka niezależnych serwerów MySQL, które są replikowane w schmemacie M-M ( master to master ). Nic nie stoi na przeszkodzie abyś użył do tego jednej maszyny lub bazy danych, Cherokee nadal może być używany do połączeń z bazą danych, pamiętaj jednak o bezpieczeństwie. Odizolowanie Cherokee odpowiedzialnego za DBSlayer jest dobrym pomysłem.
Po pierwsze zmienimy konfigurację serwera wirtualnego Default. Ponieważ będziemy go używać tylko do zarządzania bazą danych, możemy ustawić mu pusty Document Root, w tym przykładzie będzie to /var/www/fake
Następnym krokiem będzie ustawienie źródeł danych dla MySQL. Podać możemy dowolną ilość serwerów MySQL, a handler zajmie się równoważeniem obciążenia między nimi. W tym przykładzie użyjemy kilku hostów, każdy z nich jest wewnątrz bezpiecznej sieci lokalnej.
Następnie należy usunąć każdą regułę i ustawić handler dla domyślnej na MySQL bridge. Nie jest konieczne usuwanie innych reguł ale, każda jedna dodatkowa reguła ma wpływ na wydajność ( koszt dopasowania zapytania do reguły ).
Aby to wykonać po prostu kliknij na zakładkę Behavior i przejdź do sekcji Handler, gdzie ustaw:
Po dodaniu odpowiedznich źródeł danych, ustawieniu danych potrzebnych do połączenia, pozostało wybrać język z jakiego będą obsługiwane połączenia.
W tym przykładzie użyty zostanie Python. Jeśli twój język programowania nie znajduje się na liście po prostu wybierz JSON, jest on wspierany przez większość języków programowania. Użycie Pythona w tym przypadku pozwana nam operować wprost na danych otrzymanych z bazy.
To wszystkie kroki wymagane do ustawienia DBSlayer.
Po pierwsze zmienimy konfigurację serwera wirtualnego Default. Ponieważ będziemy go używać tylko do zarządzania bazą danych, możemy ustawić mu pusty Document Root, w tym przykładzie będzie to /var/www/fake
Następnym krokiem będzie ustawienie źródeł danych dla MySQL. Podać możemy dowolną ilość serwerów MySQL, a handler zajmie się równoważeniem obciążenia między nimi. W tym przykładzie użyjemy kilku hostów, każdy z nich jest wewnątrz bezpiecznej sieci lokalnej.
Następnie należy usunąć każdą regułę i ustawić handler dla domyślnej na MySQL bridge. Nie jest konieczne usuwanie innych reguł ale, każda jedna dodatkowa reguła ma wpływ na wydajność ( koszt dopasowania zapytania do reguły ).
Aby to wykonać po prostu kliknij na zakładkę Behavior i przejdź do sekcji Handler, gdzie ustaw:
Po dodaniu odpowiedznich źródeł danych, ustawieniu danych potrzebnych do połączenia, pozostało wybrać język z jakiego będą obsługiwane połączenia.
W tym przykładzie użyty zostanie Python. Jeśli twój język programowania nie znajduje się na liście po prostu wybierz JSON, jest on wspierany przez większość języków programowania. Użycie Pythona w tym przypadku pozwana nam operować wprost na danych otrzymanych z bazy.
To wszystkie kroki wymagane do ustawienia DBSlayer.
Przykłady
Python
PHP
#!/usr/bin/env python
import urllib
sql="SELECT * FROM my_table;"
query = urllib.quote(sql)
print 'Original:', sql
print 'Encoded:', query
url = 'http://localhost/%s'%(query)
response = urllib.urlopen(url)
print 'RESPONSE:', response
print 'URL :', response.geturl()
headers = response.info()
print 'DATE :', headers['date']
print 'HEADERS :'
print '---------'
print headers
data = response.read()
print 'LENGTH :', len(data)
print 'DATA :'
print '---------'
obj = eval(data)
print obj
import urllib
sql="SELECT * FROM my_table;"
query = urllib.quote(sql)
print 'Original:', sql
print 'Encoded:', query
url = 'http://localhost/%s'%(query)
response = urllib.urlopen(url)
print 'RESPONSE:', response
print 'URL :', response.geturl()
headers = response.info()
print 'DATE :', headers['date']
print 'HEADERS :'
print '---------'
print headers
data = response.read()
print 'LENGTH :', len(data)
print 'DATA :'
print '---------'
obj = eval(data)
print obj
PHP
$query = "SELECT * FROM my_table;";
$host = "http://localhost";
$url = $host ."/". rawurlencode($query);
$curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($curl);
curl_close ($curl);
eval("\$obj = $result;");
var_dump($obj);
?>
$host = "http://localhost";
$url = $host ."/". rawurlencode($query);
$curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($curl);
curl_close ($curl);
eval("\$obj = $result;");
var_dump($obj);
?>
Szczegóły tej rewizji
Rewizje tego pliku
Rewizje w tej gałęzi
Data modyfikacji: 11-03-2009, 14:09:38
Autor: Jędrzej Nowak <me@pigmej.eu>
Typ formatowania: (x)html
Rewizje tego pliku
Rewizje w tej gałęzi
Data modyfikacji: 11-03-2009, 14:09:38
Autor: Jędrzej Nowak <me@pigmej.eu>
Typ formatowania: (x)html
http://www.cherokee-project.com/doc/cookbook_dbslayer.html