ProxySQLは、データベース管理者がデータベースの高可用性の要件に対処するのに役立つ実証済みのソリューションです。 SQLに対応しているため、データベースに向かうトラフィックの形成にも使用できます。クエリを特定のノードにルーティングしたり、必要に応じてクエリを書き換えたり、トラフィックを抑制したり、SQLファイアウォールを実装したり、作成したりできます。トラフィックのミラーを作成し、別のホストグループに送信します。
ProxySQL 2.0.5は、Galera Cluster、MySQLレプリケーション、およびMySQLグループレプリケーションをネイティブにサポートします。残念ながら、デフォルトではAWSAuroraをサポートしていません。ただし、使用できる回避策はまだあります。
AWSが読み取り/書き込み分割を行うエンドポイントを提供してくれるのに、なぜProxySQLを気にする必要があるのでしょうか。それは確かに事実ですが、それは単なるr/w分割です。一方、ProxySQLは、読み取りと書き込みを分離するだけでなく、データベーストラフィックを制御する機会を提供します。 ProxySQLは、多くの場合、単一のクエリを書き直すだけでデータベースが過負荷になるのを防ぐことができます。
ProxySQL2.0.5およびAWSAurora
ProxySQLを試してみることにした場合は、いくつかの手順を実行する必要があります。まず、ProxySQLをインストールするためのEC2インスタンスが必要になります。インスタンスを起動して実行したら、最新のProxySQLをインストールできます。そのためにリポジトリを使用することをお勧めします。ドキュメントページ(https://github.com/sysown/proxysql/wiki)の手順に従って設定できます。使用したUbuntu16.04LTSの場合、以下を実行する必要があります:
apt-get install -y lsb-release
wget -O - 'https://repo.proxysql.com/ProxySQL/repo_pub_key' | apt-key add -
echo deb https://repo.proxysql.com/ProxySQL/proxysql-2.0.x/$(lsb_release -sc)/ ./ \
| tee /etc/apt/sources.list.d/proxysql.list
次に、ProxySQLをインストールします。
apt-get update
apt-get install proxysql
次に、ProxySQLインスタンスからAWSAuroraノードへの接続があることを確認する必要があります。接続には直接エンドポイントを使用します。
ポート3306の正しいエンドポイントへのtelnetを使用して、接続を簡単にテストできます。 :
[email protected]:~# telnet dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com 3306
Trying 10.0.0.53...
Connected to dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com.
Escape character is '^]'.
J
5.7.12_2>ZWP-&[Ov8NzJ:H#Mmysql_native_password^CConnection closed by foreign host.
[email protected]:~# telnet dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com 3306
Trying 10.0.1.90...
Connected to dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com.
Escape character is '^]'.
J
tr3'3rynMmysql_native_password^CConnection closed by foreign host.
接続を整理したら、Auroraでユーザーを作成する必要があります。そのユーザーを使用して、ProxySQLでAuroraノードを監視します。まず、ProxySQLノードにMySQLクライアントをインストールする必要がある場合があります:
[email protected]:~# apt install mysql-client-core-5.7
次に、クラスターのエンドポイントを使用してライターに接続し、その上にユーザーを作成します。
[email protected]:~# mysql -h dbtest.cluster-cqb1vho43rod.eu-central-1.rds.amazonaws.com -u root -ppassword
mysql> CREATE USER 'monuser'@'10.0.0.191' IDENTIFIED BY 'mon1t0r';
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT REPLICATION CLIENT ON *.* TO 'monuser'@'10.0.0.191';
Query OK, 0 rows affected (0.00 sec)
これが完了すると、ProxySQL管理インターフェース(デフォルトではポート6032)にログインして、モニターユーザーとそのパスワードを定義できます。
[email protected]:~# mysql -P6032 -u admin -padmin -h127.0.0.1
mysql> SET mysql-monitor_username='monuser';
Query OK, 1 row affected (0.00 sec)
mysql> SET mysql-monitor_password='mon1t0r';
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, 116 rows affected (0.00 sec)
次に、ProxySQLでAuroraノードを定義します。
mysql> INSERT INTO mysql_servers (hostgroup_id, hostname) VALUES (10, 'dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com'), (20, 'dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com');
Query OK, 2 rows affected (0.01 sec)
ご覧のとおり、ホスト名として直接エンドポイントを使用しています。これが完了したら、mysql_replication_hostgroupテーブルを使用してリーダーとライターのホストグループを定義します。また、正しいチェックタイプに合格する必要があります。デフォルトでは、ProxySQLは「read_only」変数を検索しますが、Auroraは「innodb_read_only」を使用してライターとリーダーを区別します。
mysql> SHOW CREATE TABLE mysql_replication_hostgroups\G
*************************** 1. row ***************************
table: mysql_replication_hostgroups
Create Table: CREATE TABLE mysql_replication_hostgroups (
writer_hostgroup INT CHECK (writer_hostgroup>=0) NOT NULL PRIMARY KEY,
reader_hostgroup INT NOT NULL CHECK (reader_hostgroup<>writer_hostgroup AND reader_hostgroup>=0),
check_type VARCHAR CHECK (LOWER(check_type) IN ('read_only','innodb_read_only','super_read_only')) NOT NULL DEFAULT 'read_only',
comment VARCHAR NOT NULL DEFAULT '', UNIQUE (reader_hostgroup))
1 row in set (0.00 sec)
mysql> INSERT INTO mysql_replication_hostgroups VALUES (10, 20, 'innodb_read_only', 'Aurora');
Query OK, 1 row affected (0.00 sec)
mysql> LOAD MYSQL SERVERS TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
これで、ProxySQLがランタイム構成でノードをどのように構成したかを確認できます。
mysql> SELECT hostgroup_id, hostname, port FROM runtime_mysql_servers;
+--------------+-----------------------------------------------------------------------------+------+
| hostgroup_id | hostname | port |
+--------------+-----------------------------------------------------------------------------+------+
| 10 | | 3306 |
| 20 | dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |
| 20 | dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |
+--------------+-----------------------------------------------------------------------------+------+
3 rows in set (0.00 sec)
ご覧のとおり、dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.comがライターです。今すぐフェイルオーバーを試してみましょう:
mysql> SELECT hostgroup_id, hostname, port FROM runtime_mysql_servers;
+--------------+-----------------------------------------------------------------------------+------+
| hostgroup_id | hostname | port |
+--------------+-----------------------------------------------------------------------------+------+
| 10 | dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |
| 20 | dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |
| 20 | dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |
+--------------+-----------------------------------------------------------------------------+------+
3 rows in set (0.00 sec)
ご覧のとおり、ライター(ホストグループ10)は2番目のノードに変更されています。
結論
これは基本的にはそれです-ご覧のとおり、ProxySQLでAWSAuroraノードを設定するのは非常に簡単なプロセスです。