Heim  >  Artikel  >  Datenbank  >  ProxySQL-Lese-/Schreibtrennung von der zu verwendenden Konfiguration

ProxySQL-Lese-/Schreibtrennung von der zu verwendenden Konfiguration

巴扎黑
巴扎黑Original
2017-07-21 09:55:052624Durchsuche

Der Verwendungszweck wurde in Meituan-Dianpings Artikel mit Anleitungen zur Lese-/Schreibtrennung von DBProxy erläutert. In diesem Artikel wird die Verwendung von ProxySQL und der Leistungsunterschied mit DBProxy erläutert. Eine detaillierte Einführung finden Sie in den entsprechenden Anweisungen auf der offiziellen Website. Diese Middleware ist auch eine von Percona empfohlene Middleware. Seine Funktionen unterscheiden sich nicht wesentlich von denen anderer Middleware, die Lesen und Schreiben trennt. Die Details werden im Artikel vorgestellt. In diesem Artikel werden einige Anweisungen zur Verwendung kurz vorgestellt. Sie können auch im offiziellen Wiki nach Hilfe suchen.

Umgebung:

Distributor-ID: Ubuntu
Beschreibung: Ubuntu 14.04.5 LTS
Release: 14.04Codename: Trusty

Download

Percona-Website:

https://www.percona.com/downloads/proxysql/

github/offizielle Website:

https:// github .com/sysown/proxysql/releases



Werfen wir zunächst einen Blick auf unsere Umgebung:

MHA wurde eingerichtet:
master:172.16.16.35:3306slave:172.16.16.35:3307slave:172.16.16.34:3307

MHA-Manager ist unter 172.16.16.34, die Konfigurationsdatei lautet wie folgt:

[root@localhost bin]# cat /etc/masterha/app1.cnf
[server default]
manager_log=/var/log/mha/app1/manager.log
manager_workdir=/var/log/mha/app1.log
master_binlog_dir=/home/mysql/db3306/log/master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
password=123456ping_interval=1remote_workdir=/tmp
repl_password=123456repl_user=root
report_script=/usr/local/bin/send_report
shutdown_script=""ssh_user=root
user=root
[server1]
hostname=172.16.16.35port=3306[server2]
candidate_master=1check_repl_delay=0hostname=172.16.16.34port=3306[server3]
hostname=172.16.16.35port=3307

Nachfolgend erstellen wir eine Lese-/Schreibtrennung basierend auf einer solchen MHA-Umgebung.
1: Installieren Sie die ProxySQL-Software, die wir auf 172.16.16.34 bereitstellen
[root@localhost bin]# sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm[root@localhost bin]# yum install proxysql

Am Ende gibt es folgende Aufforderung:
Installed:
proxysql.x86_64 0:1.3.7-1.1.el6
Complete!

Das heißt, die Installation ist abgeschlossen. Überprüfen Sie dann die spezifischen Dateien:
[root@localhost bin]# find / -name proxysql/var/lib/proxysql/var/run/proxysql/etc/rc.d/init.d/proxysql/usr/bin/proxysql

Ich habe festgestellt, dass ProxySQL tatsächlich erfolgreich installiert wurde
2: Beginnen Sie mit der Konfiguration von ProxySQL
Sehen Sie sich die Konfigurationsdatei an:
[root@localhost bin]# cat /etc/proxysql-admin.cnf
# proxysql admin interface credentials.
export PROXYSQL_USERNAME="admin"export PROXYSQL_PASSWORD="admin"export PROXYSQL_HOSTNAME="localhost"export PROXYSQL_PORT="6032"
 # PXC admin credentials for connecting to pxc-cluster-node.
export CLUSTER_USERNAME="admin"export CLUSTER_PASSWORD="admin"export CLUSTER_HOSTNAME="localhost"export CLUSTER_PORT="3306"
 # proxysql monitoring user. proxysql admin script will create this user in pxc to monitor pxc-nodes.
export MONITOR_USERNAME="monitor"export MONITOR_PASSWORD="monit0r"
 # Application user to connect to pxc-node through proxysql
export CLUSTER_APP_USERNAME="proxysql_user"export CLUSTER_APP_PASSWORD="passw0rd"
 # ProxySQL read/write hostgroup
export WRITE_HOSTGROUP_ID="10"export READ_HOSTGROUP_ID="11"
 # ProxySQL read/write configuration mode.
export MODE="singlewrite"

Start:
[root@localhost bin]# proxysql-admin --config-file=/etc/proxysql-admin.cnf --enable
This script will assist with configuring ProxySQL (currently only Percona XtraDB cluster in combination with ProxySQL is supported)
ProxySQL read/write configuration mode is singlewrite
ProxySQL is not running; please start the proxysql service

Nachdem das ProxySQL-Routing gestartet wurde, werden wir aufgefordert, den ProxySQL-Dienst zu starten
[root@localhost bin]# service proxy
proxy proxysql proxysql-admin proxysql_galera_checker proxysql_node_monitor
[root@localhost bin]# service proxysql start
Starting ProxySQL: DONE![root@localhost bin]# mysql -uadmin -padmin -h127.0.0.1 -P6032
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 1Server version: 5.7.14 (ProxySQL Admin Module)
Copyright (c) 2000, 2016, 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>

Sie können sehen, dass wir uns erfolgreich angemeldet haben. Was ich hier erklären möchte, ist, dass die Standardkonfigurationsdatei von ProxySQL lautet:
[root@localhost bin]# find / -name proxysql.cnf/etc/proxysql.cnf

Als nächstes beginnen wir mit der Konfiguration von ProxySQL:
[root@localhost bin]# mysql -uadmin -padmin -h127.0.0.1 -P6032
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 2Server version: 5.7.14 (ProxySQL Admin Module)
 
Copyright (c) 2000, 2016, 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> show databases;+-----+---------+-------------------------------+
| seq | name | file |
+-----+---------+-------------------------------+
| 0 | main | |
| 2 | disk | /var/lib/proxysql/proxysql.db |
| 3 | stats | |
| 4 | monitor | |
+-----+---------+-------------------------------+4 rows in set (0.00 sec)
 
mysql> use admin
Database changed
mysql> show tables;+--------------------------------------+
| tables |
+--------------------------------------+
| global_variables |
| mysql_collations |
| mysql_query_rules |
| mysql_replication_hostgroups |
| mysql_servers |
| mysql_users |
| runtime_global_variables |
| runtime_mysql_query_rules |
| runtime_mysql_replication_hostgroups |
| runtime_mysql_servers |
| runtime_mysql_users |
| runtime_scheduler |
| scheduler |
+--------------------------------------+13 rows in set (0.00 sec)

Fügen Sie unten Master-Slave-Informationen hinzu:
mysql> insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment) values(100,'172.16.16.35',3306,1,1000,10,'test');
Query OK, 1 row affected (0.00 sec)
mysql> insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment) values(101,'172.16.16.34',3306,1,1000,10,'test');
Query OK, 1 row affected (0.00 sec)
mysql> insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment) values(101,'172.16.16.35',3307,1,1000,10,'test');
Query OK, 1 row affected (0.00 sec)
mysql> select * from mysql_servers;+--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
+--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| 100 | 172.16.16.35 | 3306 | ONLINE | 1 | 0 | 1000 | 10 | 0 | 0 | test |
| 101 | 172.16.16.34 | 3306 | ONLINE | 1 | 0 | 1000 | 10 | 0 | 0 | test |
| 101 | 172.16.16.35 | 3307 | ONLINE | 1 | 0 | 1000 | 10 | 0 | 0 | test |
+--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+3 rows in set (0.00 sec)

Fügen Sie dann die Lese-/Schreibzuordnung hinzu (hauptsächlich, um ProxySQL sicherzustellen). beim Wechseln des MHA-Backends. Es kann auch automatisch umgeschaltet werden):
mysql> insert into mysql_replication_hostgroups values(100,101,'masterha') ;
Query OK, 1 row affected (0.00 sec)
mysql> select * from mysql_replication_hostgroups;+------------------+------------------+----------+
| writer_hostgroup | reader_hostgroup | comment |
+------------------+------------------+----------+
| 100 | 101 | masterha |
+------------------+------------------+----------+1 row in set (0.00 sec)

Fügen Sie ein Überwachungskonto für ProxySQL hinzu:
mysql> GRANT SUPER, REPLICATION CLIENT ON *.* TO 'proxysql'@'172.16.16.%' IDENTIFIED BY 'proxysql';
Query OK, 0 rows affected, 1 warning (0.09 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.10 sec)

Überwachungskonto konfigurieren (konfiguriert in ProxySQL):
mysql> set mysql-monitor_username='proxysql';
Query OK, 1 row affected (0.00 sec)
mysql> set mysql-monitor_password='proxysql';
Query OK, 1 row affected (0.00 sec)
mysql> load mysql variables to runtime;
Query OK, 0 rows affected (0.00 sec)
mysql> save mysql variables to disk;
Query OK, 74 rows affected (0.02 sec)

PS: Manchmal, wenn der Status von runtime_mysql_servers nicht ONLINE ist, können Sie die Tabelle „monitor.mysql_server_ping_log“ überprüfen, um die spezifischen Fehlerinformationen anzuzeigen.
mysql> select * from monitor.mysql_server_ping_log;
Konfigurieren Sie dann das Programmkonto, verwenden Sie einfach root: 123456 mit der höchsten Berechtigung zum Konfigurieren:
mysql> insert into mysql_users(username,password,active,default_hostgroup,transaction_persistent) values('root','123456',1,100,1);
Query OK, 1 row affected (0.00 sec)
mysql> select * from mysql_users;+----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+
| username | password | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections |
+----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+
| root | 123456 | 1 | 0 | 100 | NULL | 0 | 1 | 0 | 1 | 1 | 10000 |
+----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+1 row in set (0.00 sec)

Nachdem die Konfiguration abgeschlossen ist, beginnen Sie mit dem Neuladen und Speichern unserer Konfiguration:
mysql> load mysql servers to runtime;
Query OK, 0 rows affected (0.01 sec)
mysql> save mysql servers to disk;
Query OK, 0 rows affected (0.08 sec)
mysql> load mysql users to runtime;
Query OK, 0 rows affected (0.00 sec)
mysql> save mysql users to disk;
Query OK, 0 rows affected (0.03 sec)

Als Nächstes beginnen Sie mit der Konfiguration der Routing-Regeln:
mysql> INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply) VALUES(1,'^SELECT.*FOR UPDATE$',100,1);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply) VALUES(1,'^SELECT',101,1);
Query OK, 1 row affected (0.00 sec)
mysql> LOAD MYSQL QUERY RULES TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
mysql> SAVE MYSQL QUERY RULES TO DISK;
Query OK, 0 rows affected (0.04 sec)

Also Bisher ist die Konfiguration abgeschlossen. Abgeschlossen
3: Lese- und Schreibtrennung testen
ProxySQL-Port 6033 auf 172.16.16.35 verbinden und einen einfachen Auswahlvorgang ausführen:
[root@localhost ~]# mysql -uroot -p123456 -h172.16.16.34 -P6033
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 22Server version: 5.7.14 (ProxySQL)
Copyright (c) 2000, 2016, 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> select * from maxiangqian.test;+-----+------+
| id | name |
+-----+------+
| 1 | qq |
| 2 | qq |
| 4 | aa |
| 11 | a |
| 111 | a |
+-----+------+5 rows in set (0.04 sec)

Dann schaut mal vorbei:
mysql> select * from stats_mysql_query_digest;

Sie können sehen, dass die Trennung von Lesen und Schreiben abgeschlossen ist.
mysql> select @@server_id;+-------------+
| @@server_id |
+-------------+
| 353307 |
+-------------+1 row in set (0.01 sec)

Überprüfen Sie, ob die Server-ID an die Slave-Datenbank 172.16.16.35:3307 weitergeleitet wurde.
Auf Aktualisierung prüfen:
mysql> select * from maxiangqian.test for update;+-----+------+
| id | name |
+-----+------+
| 1 | qq |
| 2 | qq |
| 4 | aa |
| 11 | a |
| 111 | a |
+-----+------+5 rows in set (0.00 sec)

Erneut prüfen
mysql> select * from stats_mysql_query_digest;

wurde automatisch an die Hauptbibliothek weitergeleitet.
Jetzt ist der Lese- und Schreibtrennungstest für ProxySQL+MySQL MHA abgeschlossen. . . Fortsetzung folgt
5: Gedanken zu ProxySQL und einfachen Befehlen
ProxySQL kann mit der oben genannten Methode eine Lese-/Schreibtrennung erreichen, aber gibt es bei dieser Methode wirklich kein Problem? Wenn es sich um SQL handelt, das eine sehr hohe Echtzeitleistung erfordert, z. B. das Abfragen des Bestellstatus, scheint es weitergeleitet zu werden von BUG werden in der Bibliothek angezeigt. Wir können diese Parameter auf dem Terminal steuern. ProxySQL wird nur als Load Balancer verwendet. Erstellen Sie mehrere Konten für ProxySQL, eines ist schreibgeschützt und das andere ist schreibgeschützt. Dann implementiert das Programm die Trennung von Lesen und Schreiben.
ProxySQL wird in drei Schichten entworfen und ausgeführt, nämlich RUNTIME, MEMORY und DISK:
RUNTIME stellt die aktuell wirksame Konfiguration von ProxySQL dar, einschließlich global_variables, mysql_servers, mysql_users, mysql_query_rules. Die Konfiguration kann hier nicht direkt geändert werden, sie muss aus der nächsten Ebene geladen werden.
SPEICHER ist die Hauptkonfiguration, die normalerweise in der MySQL-Befehlszeile geändert wird. Sie kann als Abbild der SQLite-Datenbank im Speicher betrachtet werden.
DISK/KONFIG-DATEI Die Konfiguration für die dauerhafte Speicherung befindet sich normalerweise in $(DATADIR )/proxysql.db, das beim Neustart von der Festplatte geladen wird. Die Datei /etc/proxysql.cnf wird nur bei der ersten Initialisierung verwendet. Wenn Sie danach den Überwachungsport ändern möchten, müssen Sie ihn noch in der Verwaltungsbefehlszeile ändern und ihn dann auf der Festplatte speichern
Allgemeine Befehle:
LOAD MYSQL SERVERS TO RUNTIME – Damit die geänderte Konfiguration wirksam wird, d. h. die Parameter aus dem SPEICHER laden, was der Syntax dieser Anweisung entspricht ist relativ einfach. FROM bedeutet LOAD von der oberen Ebene bis zu einer bestimmten Ebene. Beispielsweise haben wir das MySQL-Überwachungskonto früher eingerichtet, müssen aber noch LOAD und SAVE ausführen, um die Variablen zu speichern und wirksam zu machen.

Das obige ist der detaillierte Inhalt vonProxySQL-Lese-/Schreibtrennung von der zu verwendenden Konfiguration. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn