Ubuntu 16.04でMySQLのロードバランサーとしてProxySQLを使用する方法

前書き

ProxySQLはオープンソースのMySQLプロキシサーバーです。つまり、MySQLサーバーとそのデータベースにアクセスするアプリケーションとの間の仲介役として機能します。 ProxySQLは、複数のデータベースサーバーのプール間でトラフィックを分散することでパフォーマンスを向上させ、1つ以上のデータベースサーバーに障害が発生した場合にスタンバイに自動的にフェールオーバーすることで可用性も向上させます。

このガイドでは、自動フェールオーバーを備えた複数のMySQLサーバーのhttps://www.digitalocean.com/community/tutorials/what-is-load-balancing [ロードバランサー]としてProxySQLを設定します。 例として、このチュートリアルでは3つのMySQLサーバーのマルチプライマリ複製クラスターを使用しますが、他のクラスター構成でも同様のアプローチを使用できます。

前提条件

このチュートリアルを実行するには、次のものが必要です。

手順1-ProxySQLのインストール

ProxySQLの開発者は、すべてのProxySQLリリースの公式Ubuntuパッケージをhttps://github.com/sysown/proxysql/releases[GitHubリリースページ]で提供しているため、そこから最新のパッケージバージョンをダウンロードしてインストールします。

最新のパッケージはhttps://github.com/sysown/proxysql/releases [リリースリスト]にあります。 命名規則は「+ proxysql _-。deb 」です。ここで、「 version 」はバージョン1.4.4の場合は「+1.4.4」のような文字列であり、「+ distribution」は64の場合は「+ ubuntu16 amd_64」のような文字列です。 -ビットUbuntu 16.04。

執筆時点で1.4.4である最新の公式パッケージを `+ / tmp +`ディレクトリにダウンロードします。

cd /tmp
curl -OL https://github.com/sysown/proxysql/releases/download/v/proxysql_-ubuntu16_amd64.deb

https://www.digitalocean.com/community/tutorials/package-management-basics-apt-yum-dnf-pkg [`+ .deb `ソフトウェアパッケージの管理]に使用される ` dpkg `でパッケージをインストールします。 ` -i +`フラグは、指定されたファイルからインストールすることを示します。

sudo dpkg -i proxysql_*

この時点で、 `+ .deb +`ファイルは不要になったため、削除できます。

rm proxysql_*

次に、ProxySQLインスタンスに接続するためにMySQLクライアントアプリケーションが必要になります。 これは、ProxySQLが内部的に管理タスクにMySQL互換インターフェースを使用しているためです。 使用するのは、Ubuntuリポジトリで利用可能な + mysql-client`パッケージの一部である + mysql`コマンドラインツールです。

パッケージリポジトリを更新して、最新の事前バンドルバージョンを取得していることを確認してから、 `+ mysql-client +`パッケージをインストールします。

sudo apt-get update
sudo apt-get install mysql-client

これでProxySQLを実行するためのすべての要件がありますが、インストール後にサービスが自動的に開始されないため、今すぐ手動で開始してください。

sudo systemctl start proxysql

これで、ProxySQLはデフォルトの構成で実行されます。 `+ systemctl +`を使用して確認できます。

systemctl status proxysql

出力は次のようになります。

Output● proxysql.service - LSB: High Performance Advanced Proxy for MySQL
  Loaded: loaded (/etc/init.d/proxysql; bad; vendor preset: enabled)
  Active:  since Thu 2017-12-21 19:19:20 UTC; 5s ago
    Docs: man:systemd-sysv-generator(8)
 Process: 12350 ExecStart=/etc/init.d/proxysql start (code=exited, status=0/SUCCESS)
   Tasks: 23
  Memory: 30.9M
     CPU: 86ms
  CGroup: /system.slice/proxysql.service
          ├─12355 proxysql -c /etc/proxysql.cnf -D /var/lib/proxysql
          └─12356 proxysql -c /etc/proxysql.cnf -D /var/lib/proxysql

`++`行は、ProxySQLがインストールされ実行されていることを意味します。

次に、ProxySQLの管理インターフェイスへのアクセスに使用するパスワードを設定して、セキュリティを強化します。

手順2-ProxySQL管理者パスワードの設定

新しいProxySQLのインストールを初めて開始するときは、パッケージが提供する構成ファイルを使用して、すべての構成変数のデフォルト値を初期化します。 この初期化後、ProxySQLはその構成をデータベースに保存します。データベースはコマンドラインで管理および変更できます。

ProxySQLで管理者パスワードを設定するには、その構成データベースに接続し、適切な変数を更新します。

まず、管理インターフェイスにアクセスします。 デフォルトのインストールでは「+ admin +」であるパスワードの入力を求められます。

mysql -u  -p -h  -P  --prompt=''
  • `+ -u +`は接続したいユーザーを指定します。ここでは* admin *で、構成設定の変更などの管理タスクのデフォルトユーザーです。

  • `+ -h 127.0.0.1 `は、ローカルProxySQLインスタンスに接続するように ` mysql `に指示します。 ProxySQLはデフォルトで ` mysql +`が想定するソケットファイルをリッスンしないため、これを明示的に定義する必要があります。

  • `+ -P `は接続するポートを指定します。 ProxySQLの管理インターフェイスは「+6032」でリッスンします。

  • `-prompt +`はデフォルトのプロンプトを変更するオプションのフラグで、通常は ` mysql> `です。 ここでは、ProxySQL管理インターフェイスに接続していることを明確にするために、これを「+」に変更しています。 これは、後で複製されたデータベースサーバー上のMySQLインターフェイスにも接続するときに混乱を避けるために役立ちます。

接続すると、 `+ ProxySQL Admin> +`プロンプトが表示されます。

ProxySQL administration console promptWelcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.30 (ProxySQL Admin Module)

Copyright (c) 2000, 2017, 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.

ProxySQLAdmin>

+ global_variables +`データベースの `+ admin-admin_credentials +`設定変数を更新( `+ UPDATE +)して管理アカウントのパスワードを変更します。 以下のコマンドの「++」を、選択した強力なパスワードに変更することを忘れないでください。

UPDATE global_variables SET variable_value=':' WHERE variable_name='admin-admin_credentials';
OutputQuery OK, 1 row affected (0.00 sec)

ProxySQLの構成システムの仕組みにより、この変更はすぐには反映されません。 これは、3つの別個のレイヤーで構成されています。

  • * memory *。コマンドラインインターフェイスから変更を加えると変更されます。

  • * runtime *。ProxySQLが有効な構成として使用します。

  • * disk *。再起動後も構成を維持するために使用されます。

現在、行った変更は* memory にあります。 変更を有効にするには、 memory 設定を runtime レルムにコピーし、 disk *に保存して永続化する必要があります。

LOAD ADMIN VARIABLES TO RUNTIME;
SAVE ADMIN VARIABLES TO DISK;

これらの `+ ADMIN `コマンドは、管理コマンドラインインターフェースに関連する変数のみを処理します。 ProxySQLは、設定のその他の部分を処理するために、 ` MYSQL +`などの同様のコマンドを公開します。 これらはこのチュートリアルの後半で使用します。

ProxySQLがインストールされ、新しい管理者パスワードで実行されたので、ProxySQLが監視できるように3つのMySQLノードを設定しましょう。 ただし、ProxySQLインターフェースは後で使用するため、開いたままにしてください。

手順3-MySQLでの監視の構成

ProxySQLは、MySQLノードと通信して、その状態を評価できるようにする必要があります。 そのためには、専用ユーザーで各サーバーに接続できる必要があります。

ここでは、MySQLノードで必要なユーザーを構成し、ProxySQLがグループ複製状態を照会できるようにする追加のSQL関数をインストールします。

MySQLグループの複製はすでに実行されているため、次の手順は*グループの単一のメンバー*でのみ実行する必要があります。

2番目の端末で、MySQLノードの1つを使用してサーバーにログインします。

ssh @

ProxySQLグループレプリケーションサポートが機能するために必要な関数を含むSQLファイルをダウンロードします。

curl -OL https://gist.github.com/lefred/77ddbde301c72535381ae7af9f968322/raw/5e40b03333a3c148b78aa348fd2cd5b5dbb36e4d/addition_to_sys.sql

`+ less additional_to_sys.sql`を使用してファイルの内容を表示できます。

準備ができたら、ファイル内のコマンドを実行します。 MySQL管理パスワードの入力を求められます。

mysql -u root -p < addition_to_sys.sql

コマンドが正常に実行されると、出力は生成されません。 その場合、すべてのMySQLノードはProxySQLがグループレプリケーションステータスを認識するために必要な機能を公開します。

次に、ProxySQLがインスタンスの状態を監視するために使用する専用ユーザーを作成する必要があります。

MySQLインタラクティブプロンプトを開きます。これにより、* root *パスワードの再入力が求められます。

mysql -u root -p

次に、専用のユーザーを作成します。このユーザーは、ここでは* monitor *と呼びます。 必ず強力なパスワードに変更してください。

CREATE USER ''@'%' IDENTIFIED BY '';

MySQLサーバーの状態を照会するユーザー権限を* monitor *ユーザーに付与します。

GRANT SELECT on sys.* to ''@'%';

最後に、変更を適用します。

FLUSH PRIVILEGES;

グループレプリケーションのため、ヘルスモニタリング用のユーザーを1つのMySQLノードに追加すると、3つのノードすべてで完全に構成されます。

次に、MySQLノードにアクセスできるように、そのユーザーの情報でProxySQLを更新する必要があります。

手順4-ProxySQLでの監視の構成

ノードを監視するときに新しいユーザーアカウントを使用するようにProxySQLを構成するには、適切な構成変数を「+ UPDATE」します。 これは、ステップ2で管理者パスワードを設定する方法と非常に似ています。

ProxySQL管理インターフェイスに戻り、 `+ mysql-monitor_username +`変数を新しいアカウントのユーザー名に更新します。

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

前と同じように、構成は自動的に適用されないため、* runtime に移行して disk *に保存します。 今回は、MySQL構成変数を変更しているため、これらの変数を更新するために「+ ADMIN 」ではなく「 MYSQL +」を使用していることに注意してください。

LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

監視アカウントはすべての端で構成され、次のステップはProxySQLにノード自体について伝えることです。

手順5-MySQLノードをProxySQL Serverプールに追加する

ProxySQLに3つのMySQLノードを認識させるには、指定されたノードのセットである_host groups_にそれらを分散する方法をProxySQLに伝える必要があります。 各ホストグループは、「+ 1+」や「2」などの正の数で識別されます。 ホストグループは、ProxySQLクエリルーティングを使用する場合、異なるホストのセットに異なるSQLクエリをルーティングできます。

静的レプリケーション構成では、ホストグループを任意に設定できます。 ただし、ProxySQLのグループレプリケーションサポートは、レプリケーショングループ内のすべてのノードを4つの論理状態に自動的に分割します。

  • writer sは、データを変更するクエリを受け入れることができるMySQLノードです。 ProxySQLは、すべてのプライマリノードをこのグループで定義された最大量まで維持するようにします。

  • バックアップライター、これもデータを変更するクエリを受け入れることができるMySQLノードです。 ただし、これらのノードはライターとして指定されていません。維持されているライターの定義された量を超えるプライマリノードはこのグループに保持され、ライターの1つが失敗するとライターに昇格します。

  • リーダーは、データを変更するクエリを受け入れることができないMySQLノードであり、読み取り専用ノードとして使用する必要があります。 ProxySQLはここにスレーブノードのみを配置します。

  • オフライン。接続性の低下やトラフィックの低下などの問題のために誤動作しているノード用です。

これら4つの状態にはそれぞれ対応するホストグループがありますが、数値グループ識別子は自動的に割り当てられません。

すべてをまとめると、各状態に使用する識別子をProxySQLに伝える必要があります。 ここでは、*オフライン*ホストグループに `+ 1 `を、*ライター*ホストグループに ` 2 `を、*リーダー*ホストグループに ` 3 `を、そして ` 4 +`を使用します。 *バックアップライター*ホストグループ。

これらの識別子を設定するには、 `+ mysql_group_replication_hostgroups +`設定テーブルにこれらの変数と値を含む新しい行を作成します。

INSERT INTO mysql_group_replication_hostgroups (writer_hostgroup, backup_writer_hostgroup, reader_hostgroup, offline_hostgroup, active, max_writers, writer_is_also_reader, max_transactions_behind) VALUES (2, 4, 3, 1, 1, 3, 1, 100);

これらは、この行に設定された追加の変数であり、それぞれの機能は次のとおりです。

  • 「+ active 」を「+1」に設定すると、ProxySQLによるこれらのホストグループの監視が有効になります。

  • `+ max_writers `は、ライターとして機能できるノードの数を定義します。 マルチプライマリ構成では、すべてのノードを同等に扱うことができるため、ここで「+3」を使用しました。したがって、ここでは「+3 +」(ノードの総数)を使用しました。

  • `+ writer_is_also_reader `を ` 1 +`に設定すると、ProxySQLはライターをリーダーとしても扱うようになります。

  • `+ max_transactions_behind +`は、ノードが*オフライン*として分類されるまでの遅延トランザクションの最大数を設定します。

ProxySQLがホストグループにノードを分散する方法を知ったので、MySQLサーバーをプールに追加できます。 それには、各サーバーのIPアドレスと初期ホストグループを「+ INSERT 」して、ProxySQLがやり取りできるサーバーのリストを含む「 mysql_servers +」テーブルに追加する必要があります。

3つのMySQLサーバーをそれぞれ追加し、以下のコマンドのサンプルIPアドレスを必ず置き換えてください。

INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (2, '', 3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (2, '', 3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (2, '', 3306);

ここで、「+ 2+」値はこれらのノードすべてを最初にライターに設定し、「+ 3306+」はデフォルトのMySQLポートを設定します。

前と同じように、これらの変更を* runtime に移行し、 disk *に保存して、変更を有効にします。

LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

ProxySQLは、指定されたとおりにホストグループ全体にノードを分散する必要があります。 ProxySQLが使用しているサーバーの現在の状態を公開する `+ runtim330e_mysql_servers `テーブルに対して ` SELECT +`クエリを実行して確認してみましょう。

SELECT hostgroup_id, hostname, status FROM runtime_mysql_servers;
Output+--------------+-------------+--------+
| hostgroup_id | hostname    | status |
+--------------+-------------+--------+
| 2            |  | ONLINE |
| 2            |  | ONLINE |
| 2            |  | ONLINE |
| 3            |  | ONLINE |
| 3            |  | ONLINE |
| 3            |  | ONLINE |
+--------------+-------------+--------+
6 rows in set (0.01 sec)

結果テーブルでは、各サーバーが2回リストされます。ホストグループID「2」および「3」に1つずつ、3つのノードすべてがライターとリーダーの両方であることを示します。 すべてのノードには「+ ONLINE +」のマークが付いており、すぐに使用できます。

ただし、それらを使用する前に、各ノードのMySQLデータベースにアクセスするためのユーザー資格情報を構成する必要があります。

ステップ6-MySQLユーザーの作成

ProxySQLはロードバランサーとして機能します。エンドユーザーはProxySQLに接続し、ProxySQLは選択したMySQLノードに順番に接続を渡します。 個々のノードに接続するために、ProxySQLはアクセスに使用した資格情報を再利用します。

レプリケーションノードにあるデータベースへのアクセスを許可するには、ProxySQLと同じ資格情報を持つユーザーアカウントを作成し、そのユーザーに必要な特権を付与する必要があります。

手順3と同様に、次の手順は*グループの単一のメンバー*でのみ実行する必要があります。 任意のメンバーを選択できます。

パスワード `+ playgroundpassword +`で識別される* playgrounduser *という新しいユーザーを作成します。

CREATE USER ''@'%' IDENTIFIED BY '';

https://www.digitalocean.com/community/tutorials/how-to-configure-mysql-group-replication-on-ubuntu-16-04#start-から `+ playground +`テストデータベースに完全にアクセスする権限を付与します。 group-replication [元のグループ複製チュートリアル]。

GRANT ALL PRIVILEGES on playground.* to ''@'%';

次に、変更を適用してプロンプトを終了します。

FLUSH PRIVILEGES;
EXIT;

ノード上で直接、新しく構成された資格情報でデータベースを試行することにより、ユーザーが適切に作成されたことを確認できます。

新しいユーザーでMySQLインターフェイスを再度開きます。これにより、パスワードの入力が求められます。

mysql -u  -p

ログインしたら、 `+ playground +`データベースでテストクエリを実行します。

SHOW TABLES FROM ;
Output+----------------------+
| Tables_in_playground |
+----------------------+
| equipment            |
+----------------------+
1 row in set (0.00 sec)

オリジナルのレプリケーションチュートリアルで作成された `+ equipment +`テーブルを示すデータベース内のテーブルの可視リストは、ユーザーがノード上で正しく作成されたことを確認します。

これでMySQLインターフェースから切断できますが、サーバーへの接続を開いたまま端末を開いたままにします。 最終ステップでテストを実行するために使用します。

EXIT;

次に、ProxySQLサーバーに対応するユーザーを作成する必要があります。

ステップ7-ProxySQLユーザーの作成

最後の構成手順は、* playgrounduser *ユーザーでProxySQLへの接続を許可し、それらの接続をノードに渡すことです。

そのためには、ユーザー資格情報を保持する `+ mysql_users `テーブルに設定変数を設定する必要があります。 ProxySQLインターフェースで、ユーザー名、パスワード、デフォルトのホストグループを構成データベースに追加します(* writer *ホストグループの場合は「+2」です)

INSERT INTO mysql_users(username, password, default_hostgroup) VALUES ('', '', );

構成を* runtime に移行し、 disk *に保存して、新しい構成を有効にします。

LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;

これらの資格情報を使用してデータベースノードに接続できることを確認するには、別のターミナルウィンドウを開き、ProxySQLサーバーにSSHで接続します。 後で管理プロンプトが必要になるため、まだ閉じないでください。

ssh @

ProxySQLは着信クライアント接続をポート `+ 6033 `でリッスンするため、* playgrounduser *とポート ` 6033 `を使用して、管理インターフェイスではなく実際のデータベースに接続してみてください。 パスワードの入力を求められます。この例では、「 playgroundpassword +」でした。

mysql -u  -p -h 127.0.0.1 -P  --prompt=''

ここでは、プロンプトを `+ ProxySQLClient> +`に設定して、管理インターフェイスプロンプトと区別できるようにします。 最終構成をテストするときに両方を使用します。

プロンプトが開くはずです。これは、クレデンシャルがProxySQL自体によって受け入れられたことを意味します。

ProxySQL client promptWelcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 5.5.30 (ProxySQL)

Copyright (c) 2000, 2017, 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.

ProxySQLClient>

ProxySQLがノードの1つに接続するかどうかを確認する簡単なステートメントを実行しましょう。 このコマンドは、実行中のサーバーのホスト名をデータベースに照会し、唯一の出力としてサーバーのホスト名を返します。

SELECT @@hostname;

設定に従って、このクエリはProxySQLによって* writer *ホストグループに割り当てられた3つのノードのいずれかに向けられる必要があります。 出力は次のようになります。ここで、「++」はいずれかのMySQLノードのホスト名です。

Output+------------+
| @@hostname |
+------------+
|     |
+------------+
1 row in set (0.00 sec)

これで設定が完了し、ProxySQLが3つのMySQLノード間で接続の負荷を分散できるようになります。

最後のステップでは、ProxySQLがデータベース上で読み取りおよび書き込みステートメントを実行でき、一部のノードがダウンした場合でもクエリを処理できることを確認します。

ステップ8-ProxySQL構成の検証

ProxySQLとMySQLノード間の接続が機能していることがわかっているため、最終テストでは、データベースのアクセス許可でProxySQLからの読み取りと書き込みの両方のステートメントが許可されていることを確認し、一部のノードがグループは失敗します。

ProxySQLクライアントプロンプトで `+ SELECT `ステートメントを実行して、 ` playground +`データベースからデータを読み取れることを確認します。

SELECT * FROM playground.equipment;

出力は次のようになり、グループ複製チュートリアルで作成された3つのアイテムが含まれます。 これは、ProxySQLを介してMySQLデータベースからデータを正常に読み取ることを意味します。

Output+----+--------+-------+--------+
| id | type   | quant | color  |
+----+--------+-------+--------+
|  3 | slide  |     2 | blue   |
| 10 | swing  |    10 | yellow |
| 17 | seesaw |     3 | green  |
+----+--------+-------+--------+
3 rows in set (0.00 sec)

次に、5つの赤いドリルを表すテーブルに新しいデータを挿入して書き込みを試みます。

INSERT INTO playground.equipment (type, quant, color) VALUES ();

次に、前の「+ SELECT +」コマンドを再実行して、データが挿入されたことを確認します。

SELECT * FROM playground.equipment;

出力の新しいドリルラインは、ProxySQLを介してMySQLデータベースにデータを正常に書き込んだことを意味します。

Output+----+--------+-------+--------+
| id | type   | quant | color  |
+----+--------+-------+--------+
|  3 | slide  |     2 | blue   |
| 10 | swing  |    10 | yellow |
| 17 | seesaw |     3 | green  |

+----+--------+-------+--------+
4 rows in set (0.00 sec)

ProxySQLはデータベースを完全に使用できるようになりましたが、サーバーに障害が発生するとどうなりますか?

いずれかのMySQLサーバーのコマンドラインから、MySQLプロセスを停止して障害をシミュレートします。

systemctl stop mysql

データベースが停止したら、ProxySQLクライアントプロンプトから `+ equipment +`テーブルのデータを再度クエリしてみてください。

SELECT * FROM playground.equipment;

出力は変更されません。以前と同様に機器リストが表示されます。 これは、ProxySQLがノードの1つに障害が発生したことに気付き、別のノードに切り替えてステートメントを実行したことを意味します。

手順5のように、ProxySQL管理プロンプトから `+ runtime_mysql_servers +`テーブルをクエリすることで確認できます。

SELECT hostgroup_id, hostname, status FROM runtime_mysql_servers;

出力は次のようになります。

Output+--------------+-------------+---------+
| hostgroup_id | hostname    | status  |
+--------------+-------------+---------+
| 1            | 203.0.113.1 |  |
| 2            | 203.0.113.2 | ONLINE  |
| 2            | 203.0.113.3 | ONLINE  |
| 3            | 203.0.113.2 | ONLINE  |
| 3            | 203.0.113.3 | ONLINE  |
+--------------+-------------+---------+
6 rows in set (0.01 sec)

停止したノードは、現在*回避*されています。つまり、一時的にアクセス不能と見なされるため、すべてのトラフィックは残りの2つのオンラインノードに分散されます。

ProxySQLはこのノードの状態を常に監視し、正常に動作する場合は* online に戻し、手順4で設定したタイムアウトしきい値を超える場合は offline *としてマークします。

この監視をテストしましょう。 MySQLサーバーに切り替えて、ノードを再起動します。

systemctl start mysql

しばらく待ってから、ProxySQL管理プロンプトから `+ runtime_mysql_servers +`テーブルを再度クエリします。

SELECT hostgroup_id, hostname, status FROM runtime_mysql_servers;

ProxySQLはすぐにノードが再び利用可能になったことに気付き、オンラインとしてマークします。

Output+--------------+-------------+--------+
| hostgroup_id | hostname    | status |
+--------------+-------------+--------+
| 2            | 203.0.113.1 |  |
| 2            | 203.0.113.2 | ONLINE |
| 2            | 203.0.113.3 | ONLINE |
| 3            | 203.0.113.1 |  |
| 3            | 203.0.113.2 | ONLINE |
| 3            | 203.0.113.3 | ONLINE |
+--------------+-------------+--------+
6 rows in set (0.01 sec)

別のノード(または2つ)でこのテストを繰り返して、少なくとも1つのノードが稼働している場合、読み取り専用アクセスと読み取り/書き込みアクセスの両方でデータベースを自由に使用できることを確認できます。

結論

このチュートリアルでは、マルチプライマリグループレプリケーショントポロジの複数の書き込み可能なMySQLノードでSQLクエリの負荷を分散するようにProxySQLを構成しました。 この種の構成は、複数のサーバーに負荷を分散することにより、データベースを大量に使用する場合のパフォーマンスを向上させることができます。 また、データベースサーバーの1つがオフラインになった場合にフェールオーバー機能を提供できます。

ただし、ここでは例として1つのノードトポロジのみを取り上げました。 ProxySQLは、他の多くのMySQLトポロジにも堅牢なクエリキャッシング、ルーティング、パフォーマンス分析を提供します。 ProxySQLの機能と、それらに関するさまざまなデータベース管理の問題を解決する方法については、http://proxysql.com/blog/ [公式ProxySQLブログ]およびhttps://github.com/sysown/proxysql/wiki[ProxySQL]を参照してください。 wiki]。

Related