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

Równoważenie obciążenia z ProxySQL dla klastra Percona XtraDB

Powinniśmy rozważyć zainstalowanie ProxySQL na węzłach klienckich w celu wydajnego zarządzania obciążeniem w całym klastrze bez żadnych zmian w aplikacjach generujących zapytania. Jest to zalecane rozwiązanie wysokiej dostępności dla klastra Percona XtraDB.
Niektóre z popularnych funkcji ProxySQL to:

  • Wysoka wydajność
  • Efektywne zarządzanie obciążeniem
  • Buforowanie zapytań
  • Routing zapytań
  • Obsługuje przełączanie awaryjne
  • Zaawansowana konfiguracja z 0 przestojów
  • Proxy warstwy aplikacji
  • Między platformami
  • Zaawansowana obsługa topologii
  • Zapora sieciowa
Specyfikacja środowiska:

192.168.56.115
centów

Wymagania wstępne:

Musimy otworzyć poniższe porty na wszystkich serwerach

firewall-cmd --zone=public --add-service=mysql --permanent

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd --zone=public --add-port=4567/udp --permanent

Zezwól na port usługi ProxySQL 6033/tcp (jest to odwrotność domyślnego portu MySQL 3306) w zaporze systemu Linux.

firewall-cmd --permanent --add-port=6033/tcp

firewall-cmd --reload
Instalowanie modułu równoważenia obciążenia ProxySQL dla klastra Percona XtraDB w CentOS 7

ProxySQL v2 natywnie obsługuje klaster Percona XtraDB. Aby zainstalować ProxySql, zainstaluj go z repozytorium percona

sudo yum install proxysql2

Aby połączyć się z interfejsem administratora ProxySQL, potrzebujesz klienta MySQL.

yum install Percona-XtraDB-Cluster-client-57

Teraz uruchom usługę proxysql

[[email protected] ~]# systemctl start proxysql.service

Aby sprawdzić port w węźle klastra, użyj poniższego zapytania.

mysql -uroot -p -e "SHOW GLOBAL VARIABLES LIKE 'PORT'";

Teraz połącz się z panelem administracyjnym ProxySQL i skonfiguruj system równoważenia obciążenia.

mysql -u admin -p123 -h 127.0.0.1 -P6032 --prompt='ProxySQL> '

INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.56.110',3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.56.113',3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.56.114',3306);

ProxySQL> SELECT * FROM mysql_servers;
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| hostgroup_id | hostname | port | gtid_port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| 0 | 192.168.56.110 | 3306 | 0 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | |
| 0 | 192.168.56.113 | 3306 | 0 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | |
| 0 | 192.168.56.114 | 3306 | 0 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | |
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
3 rows in set (0.00 sec)
Konfiguruj monitorowanie węzłów ProxySQL:

Zaloguj się do instancji bazy danych MySQL i wykonaj następujące polecenia, aby utworzyć użytkownika monitorującego z uprawnieniem USAGE

na dowolnym węźle percona:

CREATE USER 'proxysql'@'%' IDENTIFIED BY 'ProxySQL';
GRANT USAGE ON *.* TO 'proxysql'@'%';

mysql> CREATE USER 'proxysql'@'%' IDENTIFIED BY 'ProxySQL';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT USAGE ON *.* TO 'proxysql'@'%';
Query OK, 0 rows affected (0.02 sec)

UPDATE global_variables SET variable_value='proxysql' WHERE variable_name='mysql-monitor_username';

UPDATE global_variables SET variable_value='ProxySQL' WHERE variable_name='mysql-monitor_password';

LOAD MYSQL VARIABLES TO RUNTIME;

SAVE MYSQL VARIABLES TO DISK;

ProxySQL> UPDATE global_variables SET variable_value='proxysql' WHERE variable_name='mysql-monitor_username';
Query OK, 1 row affected (0.01 sec)

ProxySQL> UPDATE global_variables SET variable_value='ProxySQL' WHERE variable_name='mysql-monitor_password';
Query OK, 1 row affected (0.00 sec)

ProxySQL> LOAD MYSQL VARIABLES TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)

ProxySQL> SAVE MYSQL VARIABLES TO DISK;
Query OK, 136 rows affected (0.01 sec)

ProxySQL> LOAD MYSQL SERVERS TO RUNTIME;
Query OK, 0 rows affected (0.01 sec)
Tworzenie użytkownika klienta ProxySQL
Provide read/write access to the cluster for ProxySQL, add this user on one of the Percona XtraDB Cluster nodes:

CREATE USER 'lbuser'@'192.168.56.115' IDENTIFIED BY 'lbpass';

GRANT ALL ON *.* TO 'lbuser'@'192.168.56.115';
Tworzenie użytkownika klienta ProxySQL:
ProxySQL> INSERT INTO mysql_users (username,password) VALUES ('lbuser','lbpass');
Query OK, 1 row affected (0.00 sec)
ProxySQL> LOAD MYSQL USERS TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
ProxySQL> SAVE MYSQL USERS TO DISK;
Query OK, 0 rows affected (0.02 sec)

potwierdź, że użytkownik został poprawnie skonfigurowany, możesz spróbować się zalogować:

[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.30 (ProxySQL)

Copyright (c) 2009-2019 Percona LLC and/or its affiliates
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

Zobaczmy, z którym węzłem nasz klient będzie się łączył w klastrze.

[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033 -e "select @@hostname;";
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------+
| @@hostname |
+----------------------+
| percona3.localdomain |
+----------------------+

widać, że serwer proxy jest podłączony do percona3

Próbowałem z innej sesji putty, po czym łączy się z percona2:

[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033 -e "select @@hostname;";
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------+
| @@hostname |
+----------------------+
| percona2.localdomain |
+----------------------+

Po kilku sesjach łączy się z percona1:

[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033 -e "select @@hostname;";
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------+
| @@hostname |
+----------------------+
| percona1.localdomain |
+----------------------+
Łączenie z MySQL Workbench:

Poniżej znajduje się konfiguracja mojej sesji w środowisku MySQL:

Próbowałem zobaczyć, który węzeł połączy się z MySQL Workbench

Przełączanie awaryjne:

Teraz sprawdzimy, jak to wykona przełączanie awaryjne

[[email protected] mysql]# service mysql stop
Redirecting to /bin/systemctl stop mysql.service

ProxySQL> select hostgroup_id,hostname,port,status from runtime_mysql_servers;
+--------------+----------------+------+---------+
| hostgroup_id | hostname | port | status |
+--------------+----------------+------+---------+
| 0 | 192.168.56.110 | 3306 | ONLINE |
| 0 | 192.168.56.114 | 3306 | SHUNNED |
| 0 | 192.168.56.113 | 3306 | ONLINE |
+--------------+----------------+------+---------+
3 rows in set (0.01 sec)

Teraz uruchom ponownie mysql na węźle 3 i ponownie sprawdź stan klastra z serwera proxy

[[email protected] mysql]#systemctl start mysql.service

ProxySQL> SELECT hostgroup_id hg,count(status) cnt from main.runtime_mysql_servers WHERE status = "ONLINE" GROUP BY hg having cnt ;
+----+-----+
| hg | cnt |
+----+-----+
| 0 | 3 |
+----+-----+
1 row in set (0.00 sec)

ProxySQL> select hostgroup_id,hostname,port,status from runtime_mysql_servers;
+--------------+----------------+------+--------+
| hostgroup_id | hostname | port | status |
+--------------+----------------+------+--------+
| 0 | 192.168.56.110 | 3306 | ONLINE |
| 0 | 192.168.56.114 | 3306 | ONLINE |
| 0 | 192.168.56.113 | 3306 | ONLINE |
+--------------+----------------+------+--------+
3 rows in set (0.00 sec)

UWAGA:  Jeśli widzisz stan węzła jako USUNIĘTY następnie spróbuj połączyć się wiele razy, aby klient otrzymał najnowszy stan klastra, ponieważ serwery runtime_mysql_servers przechowują najnowszy stan węzła podczas ostatniej próby połączenia.

Testowanie klastra z sysbench:
yum install sysbench

sysbench wymaga poświadczeń użytkownika klienta ProxySQL, które utworzyłeś (lbuser/lbpass) podczas tworzenia użytkownika klienta ProxySQL.

sysbench /usr/share/sysbench/oltp_read_only.lua --threads=4 --mysql-host=127.0.0.1 
--mysql-user=lbuser --mysql-password=lbpass --mysql-port=6033 --tables=10 --table-size=10000 prepare

sysbench /usr/share/sysbench/oltp_read_only.lua --threads=4 --events=0 --time=300 --mysql-host=27.0.0.1 
--mysql-user=lbuser --mysql-password=lbpass --mysql-port=6033 --tables=10 
--table-size=10000 --range_selects=off --db-ps-mode=disable --report-interval=1 run

Aby zobaczyć liczbę poleceń uruchamianych w klastrze:

proxysql> SELECT * FROM stats_mysql_commands_counters;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ścieżka edukacyjna MySQL

  2. Jak zamawiać według nazwy miesiąca w MySQL

  3. nazwa pola mysql ze zmiennej

  4. Zwiększenie wartości w zapytaniu o aktualizację MySQL

  5. 3 sposoby na znalezienie pozycji podciągu w ciągu w MySQL