ホームページ データベース mysql チュートリアル ProxySQL の読み取り/書き込みを構成から分離して使用する

ProxySQL の読み取り/書き込みを構成から分離して使用する

Jul 21, 2017 am 09:55 AM
分離 読み書き

使用目的は、Meituan-Dianping の DBProxy 読み取り/書き込み分離の使用方法の記事で説明されています。この記事では、ProxySQL の使用方法と DBProxy とのパフォーマンスの違いを紹介します。詳細な紹介については、公式 Web サイトの関連説明を参照してください。このミドルウェアは、percona が推奨するミドルウェアでもあります。機能は読み書きを分離する他のミドルウェアとあまり変わりません。詳細は記事内で紹介します。この記事では使用時の手順を簡単に紹介します。ヘルプについては公式 Wiki を参照してください。

環境:

ディストリビューターID: Ubuntu
説明: Ubuntu 14.04.5 LTS
リリース: 14.04コード名: trusty

ダウンロード

percona サイト:

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

github/公式 Web サイト:

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



まず環境を見てみましょう:

MHA が構築されました:
master:172.16.16.35:3306slave:172.16.16.35:3307slave:172.16.16.34:3307
ログイン後にコピー

MHA マネージャーは 172.16.16.34 にあり、設定ファイルは次のとおりです:

[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
ログイン後にコピー

このような MHA 環境に基づいて読み取りと書き込みの分離を構築します。
1: ProxySQL ソフトウェアをインストールします。これを 172.16.16.34 にデプロイします。 以上でインストールは完了です。次に、特定のファイルを確認します:
[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
ログイン後にコピー

ProxySQL が実際に正常にインストールされていることがわかりました
2: ProxySQL の構成を開始します

構成ファイルを確認します:
Installed:
proxysql.x86_64 0:1.3.7-1.1.el6
Complete!
ログイン後にコピー

スタートup :
[root@localhost bin]# find / -name proxysql/var/lib/proxysql/var/run/proxysql/etc/rc.d/init.d/proxysql/usr/bin/proxysql
ログイン後にコピー
ProxySQL のルーティングが開始されたので、proxysql サービスを開始するように求められます
[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"
ログイン後にコピー

正常にログインしたことがわかります。ここで説明したいのは proxysql です。デフォルトの設定ファイルは次のとおりです:
[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
ログイン後にコピー

次に、ProxySQL の設定を開始します:
[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>
ログイン後にコピー

以下のマスター/スレーブ情報を追加します。リーリー

次に、読み取りおよび書き込みマッピングを追加します (主に、MHA バックエンドが切り替えられたときに ProxySQL が自動的に切り替えられるようにするため):

[root@localhost bin]# find / -name proxysql.cnf/etc/proxysql.cnf
ログイン後にコピー

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)
ログイン後にコピー

監視アカウントを構成します (proxySQL で構成) 構成):

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)
ログイン後にコピー

PS: runtime_mysql_servers のステータスが ONLINE でない場合は、monitor.mysql_server_ping_log テーブルをチェックして特定のエラーを確認できる場合があります。情報。
mysql> select * frommonitor.mysql_server_ping_log;

次に、root: 123456 の最高権限を使用して設定します:

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)
ログイン後にコピー

設定が完了したら、リロードを開始しますそして保存しています 設定:

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)
ログイン後にコピー
次に、ルーティングルールの設定を開始します:
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)
ログイン後にコピー

これまでの設定は完了です

3: 読み取りと書き込みの分離をテストします
で172 .16.16.35 proxySQL ポート 6033 に接続し、単純な選択操作を実行します:

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)
ログイン後にコピー
次に、それを確認してください:

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)
ログイン後にコピー
読み取りと書き込みが分離されていることがわかります。完成しました。
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)
ログイン後にコピー

サーバー ID がスレーブ データベース 172.16.16.35:3307 にルーティングされていることを確認します。

更新のテスト:
[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)
ログイン後にコピー

もう一度確認してください
mysql> select * from stats_mysql_query_digest;
ログイン後にコピー

はメインデータベースに自動的にルーティングされました。
これで、ProxySQL+MySQL MHA の読み取りと書き込みの分離テストが完了しました。 。 。続く
5: ProxySQLと簡単なコマンドについての考察

ProxySQL は上記の方法で読み書き分離を実現できますが、注文ステータスのクエリなど、非常に高いリアルタイム性が要求される SQL の場合は、実際にこの方法で問題なく送信されるようです。スレーブデータベースのバグが表示されます。 ProxySQL はロード バランサーとしてのみ使用され、1 つは読み取り/書き込み、もう 1 つは読み取り専用になります。次に、プログラムは読み取りと書き込みの分離を実装します。
ProxySQL は、RUNTIME、MEMORY、DISK の 3 つのレイヤーで設計および実行されます。
RUNTIME は、global_variables、mysql_servers、mysql_users、mysql_query_rules を含む、ProxySQL の現在有効な構成を表します。ここの設定は直接変更できません。次の層からロードする必要があります。
MEMORY は、通常、mysql コマンドラインで変更される main の設定です。メモリ内の SQLite データベースのイメージと考えることができます。
DISK / CONFIG FILE 永続ストレージの設定は、通常、$(DATADIR) にあります。 /proxysql.db は、再起動後にハードドライブからロードされます。 /etc/proxysql.cnf ファイルは最初の初期化時にのみ使用されます。その後、リスニング ポートを変更する場合は、管理コマンド ラインで変更してからハード ディスクに保存する必要があります。一般的なコマンド:
LOAD MYSQL SERVERS TO RUNTIME -- 変更した設定を有効にします。つまり、MEMORY からパラメータをロードします。これは、LOAD MYSQL USERS FROM MEMORY と同等です。このステートメントの構文は、LOAD を意味します。は上の層から、TOはこの層からある層へという意味です。たとえば、先ほど MySQL 監視アカウントを設定しましたが、変数を保存して有効にするために LOAD と SAVE を実行する必要があります。

以上がProxySQL の読み取り/書き込みを構成から分離して使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP を使用してデータのキャッシュ、読み取り、書き込み機能を実装する方法 PHP を使用してデータのキャッシュ、読み取り、書き込み機能を実装する方法 Sep 05, 2023 pm 05:45 PM

PHP を使用してデータ キャッシュと読み書き機能を実装する方法。キャッシュはシステム パフォーマンスを向上させる重要な方法です。キャッシュを通じて、頻繁に使用されるデータをメモリに保存し、データの読み取り速度を向上させることができます。 PHP では、さまざまな方法を使用して、データのキャッシュ機能や読み書き機能を実装できます。この記事では、ファイル キャッシュの使用とメモリ キャッシュの使用という 2 つの一般的な方法を紹介します。 1. ファイル キャッシュを使用する ファイル キャッシュでは、後で読み取るためにデータをファイルに保存します。以下は、ファイル キャッシュを使用してデータの読み取りと書き込みを行うサンプル コードです。

Java 9 のモジュール システムを使用してコードを分離および分離する方法 Java 9 のモジュール システムを使用してコードを分離および分離する方法 Jul 30, 2023 pm 07:46 PM

Java 9 のモジュール システムを使用してコードを分離および分離する方法 ソフトウェアの規模が拡大し続けるにつれて、コードの複雑さは増加し続けています。コードをより適切に編成および管理するために、Java9 ではモジュール システムが導入されました。モジュール システムの出現により、従来のパッケージの依存関係の問題が解決され、コードの分離と分離がより簡単かつ柔軟になりました。この記事では、Java 9 のモジュール システムを使用してコードの分離と分離を実現する方法を紹介します。 1. モジュールの定義 Java9 では module キーワードを使用してモジュールを定義できます。

Golang のフロントエンドとバックエンドの分離開発におけるフロントエンド技術の選択に関する提案。 Golang のフロントエンドとバックエンドの分離開発におけるフロントエンド技術の選択に関する提案。 Mar 05, 2024 pm 12:12 PM

タイトル: Golang のフロントエンドとバックエンドの分離開発におけるフロントエンド テクノロジの選択に関する提案 Web アプリケーションの複雑さと要求が増加し続けるにつれて、フロントエンドとバックエンドの分離開発モデルがますます普及しています。この開発モデルでは、バックエンドがビジネス ロジックの処理を担当し、フロントエンドがページの表示とユーザーとの対話を担当し、両者は API を介して通信します。 Golang をバックエンド言語として使用する開発チームにとって、適切なフロントエンド テクノロジを選択することは非常に重要です。この記事では、Golang でフロントエンドとバックエンドを個別に開発する場合に選択する推奨フロントエンド テクノロジについて説明します。

実戦:Linux上でのハードディスクIOの読み書きテスト 実戦:Linux上でのハードディスクIOの読み書きテスト Feb 19, 2024 pm 03:40 PM

Concept fio は FlexibleIOTester としても知られ、JensAxboe によって作成されたアプリケーションです。 Jens は LinuxKernel の blockIOsubsystem のメンテナです。 FIO は、ネットワーク ファイル システムとディスクのパフォーマンスをテストするために使用されるツールで、マシン モデルの検証やファイル システムのパフォーマンスの比較によく使用されます。 fio コマンドをクラスター マシンのリストに自動的に送信し、小さなファイルの IOPS と大きなファイルのスループット データを収集します。 rw=[mode]rwmixwrite=30 読み取りと書き込みの混合モードでは、書き込みが 30% を占めます。 moderead シーケンシャル読み取り write シーケンシャル書き込み readwrite シーケンシャル読み取りと書き込みの混合 randwrite ランダム書き込み r

Java ファイル操作の内部動作を明らかにする Java ファイル操作の内部動作を明らかにする Feb 28, 2024 am 08:22 AM

ファイル システム API Java ファイル操作の内部原理は、オペレーティング システムのファイル システム API と密接に関連しています。 Java では、ファイル操作は java.NIO パッケージの java.nio.file モジュールによって提供されます。このモジュールはファイル システム API のカプセル化を提供し、Java 開発者が統合 API を使用してさまざまなオペレーティング システム上でファイル操作を実行できるようにします。ファイル オブジェクト Java プログラムがファイルにアクセスする必要がある場合、まず java.nio.file.Path オブジェクトを作成する必要があります。 Path オブジェクトはファイル システム内のパスを表し、絶対パスまたは相対パスを使用できます。 Path オブジェクトが作成されたら、それを使用してファイルの名前などのさまざまなプロパティを取得できます。

Java で DBF ファイルを処理する読み取りおよび書き込みメソッドを復号化する Java で DBF ファイルを処理する読み取りおよび書き込みメソッドを復号化する Mar 29, 2024 pm 12:39 PM

Java で DBF ファイルを処理する読み取りおよび書き込みメソッドの復号化 DBF (dBaseFile) は、通常、表形式のデータを格納するために使用される一般的なデータベース ファイル形式です。 Java プログラムでは、DBF ファイルの読み取りと書き込みの処理は比較的一般的な要件です。この記事では、Java を使用してこのプロセスを復号化する方法を紹介し、具体的なコード例を示します。 1. DBF ファイルの読み取り Java で DBF ファイルを読み取るには、通常、dbfread ライブラリなどのサードパーティ ライブラリを使用する必要があります。まず、プロジェクトを構成する必要があります

PHP開発者必携:MySQLの読み書き分離の実装方法を詳しく解説 PHP開発者必携:MySQLの読み書き分離の実装方法を詳しく解説 Mar 04, 2024 pm 04:36 PM

PHP 開発者は、Web サイト開発プロセス中にデータベース操作に直面することがよくありますが、非常に人気のあるデータベース管理システムである MySQL の読み取りと書き込みの分離は、Web サイトのパフォーマンスを向上させる重要な手段の 1 つです。 PHP 開発では、MySQL の読み取りと書き込みの分離を実装すると、Web サイトの同時アクセス機能とユーザー エクスペリエンスが大幅に向上します。この記事では、MySQL の読み書き分離の実装方法を詳細に紹介し、PHP 開発者が読み書き分離機能をよりよく理解して適用できるように、具体的な PHP コード例を示します。 MySQLの読み取りとは何ですか

静的リソースの分離により Java Web サイトのアクセス速度を向上させるにはどうすればよいですか? 静的リソースの分離により Java Web サイトのアクセス速度を向上させるにはどうすればよいですか? Aug 04, 2023 pm 03:21 PM

静的リソースの分離により Java Web サイトのアクセス速度を向上させるにはどうすればよいですか?インターネットの急速な発展に伴い、ウェブサイトを利用して情報を取得したりコミュニケーションをとったりする人が増えています。 Java Web サイトの場合、アクセス速度は非常に重要であり、ユーザー エクスペリエンスと Web サイトの成功に直接影響します。その中でも、静的リソースの読み込み速度は、Web サイトのアクセス速度に影響を与える重要な要素の 1 つです。この記事では、静的リソースの分離により Java Web サイトのアクセス速度を向上させる方法を紹介します。静的リソースとは何ですか? まず、静的リソースとは何かを明確にする必要があります。

See all articles