sql >> データベース >  >> RDS >> MariaDB

ProxySQLとAWSAuroraを使用したデータベース負荷分散

    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.
    最初のものはよさそうだ。 2番目のAuroraノードに進みます:

    [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ノードに接続できない場合は、すべてのセキュリティビットが正しく配置されていることを確認する必要があります。VPC構成を確認し、ProxySQLノードがAuroraのVPCにアクセスできるかどうかを確認し、セキュリティグループがトラフィックの通過を許可しているかどうかを確認します。 AWSネットワークセキュリティレイヤーは、経験がない場合は構成が難しい場合がありますが、最終的には機能させることができるはずです。

    接続を整理したら、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ノードを設定するのは非常に簡単なプロセスです。


    1. SQLServerでのSETROWCOUNTの動作

    2. EFコードファーストの計算列

    3. MYSQLiエラー:ユーザーにはすでに「max_user_connections」を超えるアクティブな接続があります

    4. PostgreSQLデータベーステーブルの列の位置を変更するにはどうすればよいですか?