Heim  >  Artikel  >  Themen  >  Verbessern Sie die Leistung von PHP/MySQL durch die ProxySQL-Methode

Verbessern Sie die Leistung von PHP/MySQL durch die ProxySQL-Methode

coldplay.xixi
coldplay.xixinach vorne
2020-09-10 17:03:402009Durchsuche

Verbessern Sie die Leistung von PHP/MySQL durch die ProxySQL-Methode

Verwandte Lernempfehlungen: MySQL-Tutorial

Vor ein paar Tagen habe ich vorgestellt, wie man den Redis-Verbindungspool über Twemproxy implementiert, um die Leistung von PHP/Redis zu verbessern. Heute möchte ich ProxySQL vorstellen, mit dem MySQL-Verbindungspools implementiert werden können, wodurch die Leistung von PHP/MySQL verbessert wird. Es besteht keine Notwendigkeit, einen weiteren Artikel dazu zu schreiben Bei der Konfiguration und Verwendung von ProxySQL bin ich auf einige kleinere Probleme gestoßen, die ich aufzeichnen sollte.

Zum Installationsprozess gibt es eine detaillierte Beschreibung im offiziellen Wiki. Schauen Sie sich vor allem die Konfigurationsdatei /etc/proxysql.cnf an:

datadir="/var/lib/proxysql"
admin_variables=
{
admin_credentials="admin:admin"
mysql_ifaces="0.0.0.0:6032"
}
mysql_variables=
{
threads=4
max_connections=2048
default_query_delay=0
default_query_timeout=36000000
have_compress=true
poll_timeout=2000
interfaces="/var/run/proxysql.sock"
default_schema="information_schema"
stacksize=1048576
server_version="5.5.30"
connect_timeout_server=3000
monitor_username="monitor"
monitor_password="monitor"
monitor_history=600000
monitor_connect_interval=60000
monitor_ping_interval=10000
monitor_read_only_interval=1500
monitor_read_only_timeout=500
ping_interval_server_msec=120000
ping_timeout_server=500
commands_stats=true
sessions_sort=true
connect_retries_on_failure=10
}
mysql_servers =
(
{
address="..."
port=3306
}
)
mysql_users:
(
{
username = "..."
password = "..."
}
)

Das Wichtigste ist, dass ProxySQL SQLite zum Speichern von Konfigurationsinformationen verwendet. Die Konfigurationsdatei ist nur gültig, wenn sie zum ersten Mal gestartet wird erhalten von SQLite. Wenn Sie die Verwendung einer Konfigurationsdatei erzwingen möchten, müssen Sie den anfänglichen Befehl verwenden.

Achten Sie zunächst auf admin_credentials in admin_variables. Der Standardwert ist „admin:admin“, was bedeutet, dass der Standardbenutzername und das Passwort admin sind. Es gibt auch mysql_ifaces, dessen Standardwert „0.0.0.0:6032“ ist. , was bedeutet, dass Sie den gesamten Port 6032 der Netzwerkschnittstelle überwachen, auf den das externe Netzwerk zugreifen kann. Dann können böswillige Benutzer den Standardbenutzernamen und das Standardkennwort verwenden, um auf Ihr Admin-System zuzugreifen Verwenden Sie den Standardbenutzernamen und das Standardkennwort und verlassen Sie die externe Netzwerkschnittstelle nicht. Denken Sie daran! Erinnern! Erinnern!

Achten Sie zweitens auf die Schnittstellen in mysql_variables, da PHP den ProxySQL-Verbindungspool über den lokalen Unix-Domänen-Socket anfordern muss. Daher sollten die Schnittstellen nicht die Form von ip:port verwenden, sondern auf die lokale Form festlegen In diesem Beispiel wird auf /var/run/proxysql.sock gesetzt. Es sollte daran erinnert werden, dass viele Leute gerne Socket-Dateien unter dem /tmp-Pfad ablegen Vom Namen her sieht es aus wie eine gute Frau. Ich möchte es zweimal machen, aber wenn jemand es einmal macht, wird es schlecht.

Achten Sie abschließend auf „monitor_username“ und „monitor_password“ in mysql_variables. Dadurch werden die relevanten Informationen des Überwachungsbenutzers festgelegt, damit ProxySQL jederzeit den Status des Back-End-MySQL-Servers verfolgen kann Ich habe im Voraus kein Überwachungskonto erstellt. Das liegt daran, dass ProxySQL nach einer Weile nicht mehr reagiert Wenn der Server das Überwachungskonto und das Kennwort in der Konfiguration verwendet, wird eine Menge Fehlermeldung „Zugriff verweigert für Benutzer 'monitor'@'...'“ generiert. Wenn ein bestimmter Schwellenwert erreicht wird, wird die Fehlermeldung „Host '...“ angezeigt. ' ist wegen vieler Verbindungsfehler blockiert.“ Zu diesem Zeitpunkt kann ProxySQL nicht auf die Anfrage antworten. Sie müssen „mysqladmin Flush-Hosts“ auf MySQL verwenden. „Das ist es.“ Relevante Protokollinformationen können in „SELECT * FROM monitor.mysql_server_ping_log“ eingesehen werden.

Lassen Sie uns einen Stresstest durchführen, um zu sehen, wie die Leistung ist:

<?php
$host = &#39;...&#39;;
$user = &#39;...&#39;;
$password = &#39;...&#39;;
$database = &#39;...&#39;;
$charset = &#39;utf8mb4&#39;;
$socket = &#39;/var/run/proxysql.sock&#39;;
$dsn = "mysql:dbname={$database};charset={$charset}";
if (empty($_GET[&#39;proxysql&#39;])) {
    $dsn .= ";host={$host}";
} else {
    $dsn .= &#39;;unix_socket={$socket}&#39;;
}
$dbh = new PDO($dsn, $user, $password);
$sql = &#39;SELECT * FROM foo LIMIT 10&#39;;
$value = $dbh->query($sql);
foreach ($value as $v) {
    var_dump($v);
}
?>

Simulieren Sie ein Szenario mit hoher Parallelität über ab und testen Sie, ob sich die Leistung verbessert hat:

shell> ab -k -n 10000 -c 100 "http://path/test.php?proxysql=0"
shell> ab -k -n 10000 -c 100 "http://path/test.php?proxysql=1"

Schließlich befinde ich mich auf einem allgemein konfigurierten Server. Ohne ProxySQL werden ungefähr 1.500 RPS und mit ProxySQL ungefähr 2.000 RPS erzielt. Mit anderen Worten: ProxySQL bringt eine Leistungsverbesserung von 25 %.

Wenn Sie weitere verwandte Artikel erfahren möchten, achten Sie bitte auf die Spalte

php mysql

!

Das obige ist der detaillierte Inhalt vonVerbessern Sie die Leistung von PHP/MySQL durch die ProxySQL-Methode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.im. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen