Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2011-04-03 22:02:57

  micromachine - Użytkownik

micromachine
Użytkownik
Zarejestrowany: 2010-02-04

mysql proxy - problemy z rozłożeniem zapytań

Witajcie,
od kilku godzin mecze się z mysql-proxy.
Sytuacja wygląda tak:

Kod:

balancer (mysql proxy) -> master -> slave (replikacja)

Replikacja działa poprawnie.

Chciałbym osiągnąć coś takiego aby zapytania modyfikujące były załatwiane na masterze,
a wszelkie selekty pochodziły z slave-a.

Config mysql-proxy wyglada tak:

Kod:

ENABLED="true"
OPTIONS="--proxy-lua-script=/usr/share/mysql-proxy/rw-splitting.lua
         --proxy-address=192.168.1.50:3306
         --proxy-backend-addresses=192.168.1.51:3306
         --proxy-read-only-backend-addresses=192.168.1.52:3306
        --admin-username=root
        --admin-password=pass
        --log-level=debug
        --log-file=/var/log/mysql-proxy.log
"

Gdy loguje sie na konsole mysql-proxy to mam coś takiego:

Kod:

balancer:/var/log#  mysql --host=127.0.0.1 --port=4041 -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.99-agent-admin

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select * from proxy_config;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    1
Current database: *** NONE ***

ERROR 1105 (07000): need a resultset + proxy.PROXY_SEND_RESULT
mysql>

W logu mysql-proxy mam coś takiego:

Kod:

balancer:/var/log# tail -f  mysql-proxy.log 
2011-04-03 21:48:57: (message) mysql-proxy 0.8.0 started
2011-04-03 21:48:57: (debug) chassis-limits.c:75: current RLIMIT_NOFILE = 1024 (hard: 1024)
2011-04-03 21:48:57: (debug) chassis-limits.c:79: trying to set new RLIMIT_NOFILE = 8192 (hard: 1024)
2011-04-03 21:48:57: (critical) chassis-limits.c:81: could not raise RLIMIT_NOFILE to 8192, Invalid argument (22). Current limit still 1024.
2011-04-03 21:48:57: (message) proxy listening on port 192.168.1.50:3306
2011-04-03 21:48:57: (message) added read/write backend: 192.168.1.51:3306
2011-04-03 21:48:57: (message) added read-only backend: 192.168.1.52:3306
2011-04-03 21:50:40: (debug) [network-mysqld.c:817]: error on a connection (fd: -1 event: 0). closing client connection.
2011-04-03 21:51:24: (debug) last message repeated 1 times
2011-04-03 21:51:24: (debug) [network-mysqld.c:817]: error on a connection (fd: -1 event: 0). closing client connection.
2011-04-03 21:52:41: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:41: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:43: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:43: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:43: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:43: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:44: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:44: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:44: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:44: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:45: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:45: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:45: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:45: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:45: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:45: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:45: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:45: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:45: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:45: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:46: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:46: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:47: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:47: (debug) abs lua-exec::done                  usec=       0
2011-04-03 21:52:47: (debug) abs wait-for-event::done            usec=       0
2011-04-03 21:52:47: (debug) abs lua-exec::done                  usec=       0

Nie wiem czy to jest wina złej konfiguracji mysql-proxy, skopanego skryptu lua (skrypt nie był modyfikowany - pochodzi z paczki), czy czegoś jeszcze innego. Plz o pomoc w rozwiązaniu problemu.

Offline

 

#2  2011-04-03 22:12:47

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: mysql proxy - problemy z rozłożeniem zapytań

A nie powinieneś wybrać jakiejś bazy danych przed wykonaniem selecta? Chyba by wypadało.

Offline

 

#3  2011-04-03 22:20:20

  micromachine - Użytkownik

micromachine
Użytkownik
Zarejestrowany: 2010-02-04

Re: mysql proxy - problemy z rozłożeniem zapytań

Na obu maszynach jest jedna i ta sama baza. W wydaje mi się mysql-proxy powinno już zadbać o to aby odpowiednie zapytanie było kierowane na konkretnego demona. Zapytania modyfikujące powinny być obsłużone przez mastera, a np. selekty już przez slave-a. Chyba że coś pokręciłem.

Offline

 

#4  2011-04-03 22:33:40

  debianus_userus - Członek DUG

debianus_userus
Członek DUG
Skąd: Warszawa
Zarejestrowany: 2005-08-29
Serwis

Re: mysql proxy - problemy z rozłożeniem zapytań

micromachine napisał(-a):

Na obu maszynach jest jedna i ta sama baza. W wydaje mi się mysql-proxy powinno już zadbać o to aby odpowiednie zapytanie było kierowane na konkretnego demona. Zapytania modyfikujące powinny być obsłużone przez mastera, a np. selekty już przez slave-a. Chyba że coś pokręciłem.

show databases

i wskazujesz wybrana baze:

use <db_name>

i dopiero teraz mozesz klepac selecty

Offline

 

#5  2011-04-03 22:34:48

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: mysql proxy - problemy z rozłożeniem zapytań

A jak się ta baza nazywa? No właśnie tak jak debian_userus napisał, stąd moje pytanie. Bo może tego nie rozróżniasz. Serwer zarządza bazami, masz po jednym serwerze na obu maszynach, ale baz na nich może być założonych wiele. Więc trzeba podać nazwę bazy, której chcesz używać.

Ostatnio edytowany przez kamikaze (2011-04-03 22:37:31)

Offline

 

#6  2011-04-03 22:52:36

  micromachine - Użytkownik

micromachine
Użytkownik
Zarejestrowany: 2010-02-04

Re: mysql proxy - problemy z rozłożeniem zapytań

ughm
mam skrypt w php-ie który robi sobie counta z odpowiedniej bazy i tabeli,
a zaraz po tym robi inserta do tej samej bazy i tabeli.

Ale przypominam co chcę uzyskać przy pomocy mysql-proxy:
"Chciałbym osiągnąć coś takiego aby zapytania modyfikujące były załatwiane na masterze,
a wszelkie selekty pochodziły z slave-a."

Bo odnoszę wrażenie że się lekko rozmijamy.

Offline

 

#7  2011-04-03 22:58:08

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: mysql proxy - problemy z rozłożeniem zapytań

Ok, więc jeśli to nie jest problem:

Kod:

mysql> select * from proxy_config;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    1
Current database: *** NONE ***

To z czym masz problem?

Offline

 

#8  2011-04-03 23:18:42

  micromachine - Użytkownik

micromachine
Użytkownik
Zarejestrowany: 2010-02-04

Re: mysql proxy - problemy z rozłożeniem zapytań

kamikaze napisał(-a):

Ok, więc jeśli to nie jest problem:

Kod:

mysql> select * from proxy_config;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    1
Current database: *** NONE ***

To z czym masz problem?

Zwróć uwagę ze to jest z konsoli mysql-proxy a nie z backendów.
Generalnie problemem  jest to ze głupie mysql-proxy nie rozkłada zapytań wg tego skryptu /usr/share/mysql-proxy/rw-splitting.lua.
Gdy robię sobie insert-a do mysql-proxy (192.168.1.50) to insert wykonuje się na masterze (192.168.1.51) oraz na slave-a (192.168.1.52) i to jest ok - tak ma działać.
Ale chcę aby selekt który wykonuję do mysql-proxy leciał tylko i wyłącznie do slave-a (192.168.1.52) i to ma być dla aplikacji transparentne, wiec w kodzie zawsze będzie ten sam adres serwera, ta sama nazwa bazy i ta sama nazwa tabeli do której się odwołuje.
Dodam że mysql-proxy i oba backendy - master i slave cały czas działają poprawnie.

uff ciężko mi się pisze, ale mam  nadzieję że dokładnie wytłumaczyłem o co mi chodzi.

Offline

 

#9  2011-04-04 08:53:18

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: mysql proxy - problemy z rozłożeniem zapytań

Na replikacji mysql powiem szczerze, że się nie znam. Dlatego tylko przyczepiłem się tego selecta. Bo nie rozumiem jak można wykonać selecta nie podając bazy danych. No ale jak mówisz, że się da... Co do problemu, patrząc na to:

Kod:

2011-04-03 21:48:57: (message) added read/write backend: 192.168.1.51:3306
2011-04-03 21:48:57: (message) added read-only backend: 192.168.1.52:3306

Mozna by pomyśleć, że działa poprawnie. Może czytać (robić selecty) z obu, więc może masz coś jeszcze nie skonfigurowane. Jeśli w ogóle to możliwe do zrobienia. Może pozostaje ci łączyć się do innego serwera robiąc selecty, a do innego robiąc modyfikacje.

Offline

 

#10  2011-04-04 11:47:46

  micromachine - Użytkownik

micromachine
Użytkownik
Zarejestrowany: 2010-02-04

Re: mysql proxy - problemy z rozłożeniem zapytań

Jak uda mi się rozpoznać temat do końca i będzie działać to chyba jakieś howto z tego powstanie dla potomnych :)

Offline

 

#11  2011-04-11 16:56:56

  micromachine - Użytkownik

micromachine
Użytkownik
Zarejestrowany: 2010-02-04

Re: mysql proxy - problemy z rozłożeniem zapytań

!! Topic do zamknięcia !!

Problemem oczywiście była błędna konfiguracja mysql-proxy.
Poprawny, działający plik konfiguracyjny wygląda tak:

Kod:

greg@panoramix:~$ cat /etc/default/mysql-proxy 
ENABLED="true"
OPTIONS="--proxy-address=127.0.0.1:3306  
--proxy-backend-addresses=192.168.1.100:3306 
--proxy-read-only-backend-addresses=192.168.1.200:33061 
--proxy-lua-script=/usr/share/mysql-proxy/rw-splitting.lua 
--admin-username=admin 
--admin-password=admin 
--admin-lua-script=/usr/share/mysql-proxy/admin-1.lua 
--proxy-lua-script=/usr/share/mysql-proxy/histogram.lua 
--log-level=debug 
--log-file=/var/log/mysql-proxy.log"

Kod:

greg@panoramix:/etc/default$ mysql -u admin -p -h 127.0.0.1 -P 4041

Enter password: Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.0.99-agent-admin
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>

Teraz możemy zobaczyć jakie backendy mamy podpięte:

Kod:

mysql> SELECT * FROM backends;

+————-+———————+——-+——+

| backend_ndx | address | state | type |

+————-+———————+——-+——+

| 1 | 192.168.1.100:3306 | 0 | 1 |

| 2 | 192.168.1.200:33061 | 0 | 2 |

+————-+———————+——-+——+

2 rows in set (0.00 sec)

Lub zobaczyć licznik zapytań

Kod:

mysql> show querycounter;

+—————+| query_counter |+—————+|

NULL

|+—————+1

row in set (0.00 sec)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)