Witajcie po dłuższej przerwie. Zaprezentuję bardzo przydatną aplikację do dzielania ruchu dla baz mysql.
Podczas dużego obciążenie stosujemy replikację w celu jego rozłożenia na wiekszą ilość maszyn.
Co jednak zrobić żeby właściwie zarządzać ruchem.
Dla bazy mysql jest kilka rozwiązań którę to zapenią między innymi – mysql-proxy.
Mysql-proxy oferuje nam:
- monitorowanie ruchu
- analizowanie zapytań
- load balancer
- failover
- filtrowanie
- możliwość modyfikowania wchodzących/wychodzących zapytań
- obsługa socketów
- lua-script do definiowania działania
Przykład:
Jedna z najczęściej stosowana konfiguracji (małe serwisy internetowe). Widać klienta łączącego się z bazą danych na jednym serwerze. W momencie gdy obciążenie maszyny przekracza 50% czas na zmiany które zabezpieczą dalszy rozwój potencjalnej strony. Warto tu wspomnieć o małym bezpieczeństwie takiej konfiguracji – awaria bazy wyłącza dostęp do strony.
Rozkładamy ruch na dwie maszyny w replikacji Master-Slave + proxy.
Pozwoli to także zwiększyć bezpieczęństwo w momencie awarii jednego z serwerów.
Konfigurujemy proxy tak żeby automatycznie przepinało ruch w momencie braku odpowiedzi od serwera.
Parametry startowe:
$ ./mysql-proxy
--proxy-backend-addresses=127.0.0.1:3306 -- master
--proxy-read-only-backend-addresses=127.0.0.2:3306 -- slave
--daemon
Bilans zysków:
+ dla bezpieczeństwa
+ dla stabilności
+ dla elastyczności
Więcej opcje:
$ ./mysql-proxy --help-all
Usage:
mysql-proxy [OPTION...] - MySQL Proxy
Help Options:
-?, --help Show help options
--help-all Show all help options
--help-admin Show options for the admin-module
--help-proxy Show options for the proxy-module
admin module
--admin-address= listening address:port of internal admin-server (default: :4041)
proxy-module
--proxy-address= listening address:port of the proxy-server (default: :4040)
--proxy-read-only-backend-addresses= address:port of the remote slave-server (default: not set)
--proxy-backend-addresses= address:port of the remote backend-servers (default: 127.0.0.1:3306)
--proxy-skip-profiling disables profiling of queries (default: enabled)
--proxy-fix-bug-25371 fix bug #25371 (mysqld > 5.1.12) for older libmysql versions
--proxy-lua-script= filename of the lua script (default: not set)
--no-proxy Don't start proxy-server
Application Options:
-V, --version Show version
--daemon Start in daemon-mode
--pid-file= PID file in case we are started as daemon
Strony warte odwiedzenia:
- strona projektu
http://forge.mysql.com/wiki/MySQL_Proxy
- kod do poprania:
https://launchpad.net/mysql-proxy
- blog jednoego z programistów:
http://jan.kneschke.de/projects/mysql/mysql-proxy/