Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak monitorować wiele instancji MySQL działających na tym samym komputerze — porady i wskazówki dotyczące ClusterControl

Wymaga ClusterControl 1.6 lub nowszej. Dotyczy instancji/klastrów opartych na MySQL.

W niektórych przypadkach możesz chcieć uruchomić wiele instancji MySQL na jednym komputerze. Możesz chcieć dać różnym użytkownikom dostęp do ich własnych serwerów MySQL, którymi samodzielnie zarządzają, lub możesz chcieć przetestować nową wersję MySQL, nie zakłócając istniejącej konfiguracji produkcyjnej.

Możliwe jest użycie różnych plików binarnych serwera MySQL na instancję lub użycie tego samego pliku binarnego dla wielu instancji (lub kombinacji dwóch podejść). Na przykład możesz uruchomić serwer z MySQL 5.6 i jeden z MySQL 5.7, aby zobaczyć, jak różne wersje obsługują określone obciążenie. Możesz też uruchomić wiele instancji najnowszej wersji MySQL, z których każda zarządza innym zestawem baz danych.

Niezależnie od tego, czy używasz odrębnych plików binarnych serwera, każda uruchamiana instancja musi być skonfigurowana z unikalnymi wartościami kilku parametrów operacyjnych. Eliminuje to potencjalny konflikt między instancjami. Możesz użyć MySQL Sandbox do tworzenia wielu instancji MySQL. Możesz też użyć mysqld_multi dostępnego w MySQL, aby uruchomić lub zatrzymać dowolną liczbę oddzielnych procesów mysqld działających na różnych portach TCP/IP i gniazdach UNIX.

W tym poście na blogu pokażemy, jak skonfigurować ClusterControl do monitorowania wielu instancji MySQL działających na jednym hoście.

Ograniczenie ClusterControl

W chwili pisania tego tekstu ClusterControl nie obsługuje monitorowania wielu instancji na jednym hoście na klaster/grupę serwerów. Zakłada następujące najlepsze praktyki:

  • Tylko jedna instancja MySQL na host (serwer fizyczny lub maszyna wirtualna).
  • Nadmiarowość danych MySQL powinna być skonfigurowana na serwerze N+1.
  • Wszystkie instancje MySQL działają z jednolitą konfiguracją w całej grupie klastrów/serwerów, np. port nasłuchiwania, dziennik błędów, katalog danych, katalog bazowy, gniazdo są identyczne.

W odniesieniu do punktów wymienionych powyżej, ClusterControl zakłada, że ​​w grupie klaster/serwer:

  • Instancje MySQL są konfigurowane jednolicie w klastrze; ten sam port, ta sama lokalizacja dzienników, katalog bazy/danych i inne krytyczne konfiguracje.
  • Monitoruje, zarządza i wdraża tylko jedną instancję MySQL na host.
  • Klient MySQL musi być zainstalowany na hoście i dostępny w ścieżce wykonywalnej dla odpowiedniego użytkownika systemu operacyjnego.
  • MySQL jest powiązany z adresem IP osiągalnym przez węzeł ClusterControl.
  • Na bieżąco monitoruje statystyki hosta, np. CPU/RAM/dysk/sieć dla każdej instancji MySQL z osobna. W środowisku z wieloma instancjami na host, powinieneś spodziewać się nadmiarowych statystyk hosta, ponieważ monitoruje on ten sam host wiele razy.

Przy powyższych założeniach następujące funkcje ClusterControl nie działają na hoście z wieloma instancjami:

Kopia zapasowa — Percona Xtrabackup nie obsługuje wielu instancji na host, a mysqldump wykonywany przez ClusterControl łączy się tylko z domyślnym gniazdem.

Zarządzanie procesami — ClusterControl używa standardowego „pgrep -f mysqld_safe”, aby sprawdzić, czy MySQL działa na tym hoście. W przypadku wielu instancji MySQL jest to fałszywe pozytywne podejście. W związku z tym automatyczne odzyskiwanie węzła/klastra nie będzie działać.

Zarządzanie konfiguracją — ClusterControl udostępnia standardowy katalog konfiguracyjny MySQL. Zwykle znajduje się w /etc/ i /etc/mysql.

Obejście

Monitorowanie wielu instancji MySQL na komputerze jest nadal możliwe dzięki ClusterControl z prostym obejściem. Każda instancja MySQL musi być traktowana jako pojedyncza jednostka na grupę serwerów.

W tym przykładzie mamy 3 instancje MySQL na jednym hoście utworzonym za pomocą MySQL Sandbox:

ClusterControl monitoruje wiele instancji na tym samym hoście

Stworzyliśmy nasze instancje MySQL za pomocą następujących poleceń:

$ su - sandbox
$ make_multiple_sandbox mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz

Domyślnie MySQL Sandbox tworzy instancje mysql, które nasłuchują 127.0.0.1. Konieczne jest odpowiednie skonfigurowanie każdego węzła, aby nasłuchiwał wszystkich dostępnych adresów IP. Oto podsumowanie naszych instancji MySQL na hoście:

[[email protected] multi_msb_mysql-5_7_23]$ cat default_connection.json 
{
"node1":  
    {
        "host":     "master",
        "port":     "15024",
        "socket":   "/tmp/mysql_sandbox15024.sock",
        "username": "[email protected]%",
        "password": "msandbox"
    }
,
"node2":  
    {
        "host":     "master",
        "port":     "15025",
        "socket":   "/tmp/mysql_sandbox15025.sock",
        "username": "[email protected]%",
        "password": "msandbox"
    }
,
"node3":  
    {
        "host":     "master",
        "port":     "15026",
        "socket":   "/tmp/mysql_sandbox15026.sock",
        "username": "[email protected]%",
        "password": "msandbox"
    }
}

Kolejnym krokiem jest modyfikacja konfiguracji nowo tworzonych instancji. Przejdź do my.cnf dla każdego z nich i zaszyfruj zmienną bind_address:

[[email protected] multi_msb_mysql-5_7_23]$ ps -ef | grep mysqld_safe
sandbox  13086     1  0 08:58 pts/0    00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node1/my.sandbox.cnf
sandbox  13805     1  0 08:58 pts/0    00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node2/my.sandbox.cnf
sandbox  14065     1  0 08:58 pts/0    00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node3/my.sandbox.cnf
[[email protected] multi_msb_mysql-5_7_23]$ vi my.cnf
#bind_address = 127.0.0.1

Następnie zainstaluj mysql na węźle głównym i zrestartuj wszystkie instancje za pomocą skryptu restart_all.

[[email protected] multi_msb_mysql-5_7_23]$ yum install mysql
[[email protected] multi_msb_mysql-5_7_23]$ ./restart_all  
# executing "stop" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "stop" on node 1
executing "stop" on node 2
executing "stop" on node 3
# executing "start" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "start" on node 1
. sandbox server started
executing "start" on node 2
. sandbox server started
executing "start" on node 3
. sandbox server started

Z ClusterControl musimy wykonać „Import” dla każdej instancji, ponieważ musimy wyizolować je w innej grupie, aby działało.

ClusterControl zaimportuj istniejący serwer

Dla węzła 1 wprowadź następujące informacje w ClusterControl> Importuj:

ClusterControl zaimportuj istniejący serwer

Upewnij się, że umieściłeś odpowiednie porty (różne dla różnych instancji) i hosta (takie same dla wszystkich instancji).

Możesz monitorować postęp, klikając ikonę Aktywność/Praca w górnym menu.

ClusterControl importuje szczegóły istniejącego serwera

Zobaczysz węzeł 1 w interfejsie użytkownika, gdy ClusterControl zakończy zadanie. Powtórz te same kroki, aby dodać kolejne dwa węzły z portami 15025 i 15026. Po ich dodaniu powinieneś zobaczyć coś takiego jak poniżej:

Panel ClusterControl

Proszę bardzo. Właśnie dodaliśmy nasze istniejące instancje MySQL do ClusterControl w celu monitorowania. Miłego monitorowania!

PS.:Aby rozpocząć korzystanie z ClusterControl, kliknij tutaj!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przykłady transakcji PHP + MySQL

  2. Pobierz TOP 10 rzędów bez użycia TOP lub LIMIT? – Wywiad Pytanie tygodnia #247

  3. jak sprawdzić i ustawić zmienną max_allowed_packet mysql

  4. Jak uzyskać dane sprzedaży z ostatnich 3 miesięcy w MySQL?

  5. Pobieranie połączonej listy w bazie danych MySQL