すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:読み書き分離を使用する

最終更新日:Jun 05, 2025

データベースシステムが大量の読み取りリクエストを受信する一方で、書き込みリクエストの数が少ない場合、ビジネスの成長に伴い、プライマリ ApsaraDB RDS for MySQL インスタンスがより多くの読み取りリクエストを処理する必要が生じる可能性があります。その結果、プライマリ RDS インスタンスのパフォーマンスに影響が出ます。この場合、読み取り専用 RDS インスタンスを作成し、データベースプロキシを有効にして、読み取りリクエストを自動的に読み取り専用 RDS インスタンスに転送することができます。これは、プライマリ RDS インスタンスの負荷を軽減し、読み書き分離を実現するのに役立ちます。

課金ルール

  • プライマリおよび読み取り専用 RDS インスタンスに選択したインスタンスタイプとストレージリソースに対して課金されます。詳細については、「課金対象項目」をご参照ください。

  • Elastic Compute Service (ECS) インスタンスに選択したインスタンスタイプと Elastic Block Storage (EBS) リソースに対して課金されます。詳細については、「課金概要」をご参照ください。

  • プライマリおよび読み取り専用 RDS インスタンスに対して SQL Explorer and Audit 機能を有効にした場合、ログトラフィックとログインデックスに対して課金されます。詳細については、「課金詳細」をご参照ください。

準備

このトピックでは、読み取りリクエストと書き込みリクエストの送受信をシミュレートするために、ECS インスタンスと RDS インスタンスが必要です。

RDS インスタンスの作成と構成

  1. ApsaraDB RDS コンソール にログインし、インスタンスを作成 をクリックして、ApsaraDB RDS 購入ページに移動します。

  2. RDS インスタンスを作成します。このトピックでは、標準 RDS インスタンスを作成します。このインスタンスは、MySQL 8.0RDS High-availability Edition 上で実行し、PL1 ESSD または Premium ESSD を使用し、20 GB のストレージ容量を提供します。コストを削減するために、他の仕様には最低構成を使用できます。

  3. データベースを作成します。このトピックでは、dbtest という名前のデータベースを作成し、UTF-8 文字セットをサポートします。

  4. 特権アカウントを作成します。このトピックでは、特権アカウント dbuser を作成し、カスタムパスワードを指定します。

ECS インスタンスの作成と構成

このトピックでは、読み取りリクエストと書き込みリクエストの送信をシミュレートするために ECS インスタンスを作成し、ECS インスタンスに MySQL データベースを作成します。詳細については、「ECS を使い始める」をご参照ください。

  1. ECS インスタンスを作成します: ECS 購入ページ にアクセスします。[従量課金] の課金方式、[中国 (杭州)] リージョン、[Alibaba Cloud Linux 3.2104 LTS 64 ビット] イメージを選択します。[ログインユーザー名] パラメーターを root に設定し、[パスワードを指定] します。コストを削減するために、他の仕様には最低構成を使用できます。

    重要

    内部ネットワーク経由で通信できるようにするには、ECS インスタンスと RDS インスタンスが同じリージョンと同じ仮想プライベートクラウド (VPC) に存在する必要があります。そうでない場合、ECS インスタンスを RDS インスタンスに接続できない可能性があります。

  2. ECS インスタンスにログインします: ECS コンソールのインスタンスページ で、ECS インスタンスを見つけ、[アクション] 列の [接続] をクリックします。次に、root ユーザーとして ECS インスタンスにログインします。

  3. ECS インスタンスの CLI で次のコマンドを実行して、MySQL サービスをインストールして有効にします。

    yum install -y mysql-server
    systemctl start mysqld
    systemctl enable mysqld

    インストールプロセスが完了したら、mysql コマンドを実行します。次の図の情報が表示された場合、MySQL サービスはインストールされ、有効になっています。次に、exit コマンドを実行して CLI を終了できます。image

1. プライマリ RDS インスタンスと読み取り専用 RDS インスタンスを構成する

RDS インスタンスが RDS High-availability Edition を実行している場合、セカンダリ RDS インスタンスにはアクセスできません。この場合、読み取り専用 RDS インスタンスを作成し、データベースプロキシを使用して読み取りリクエストを読み取り専用 RDS インスタンスに転送して、読み書き分離を実装する必要があります。読み取り専用 RDS インスタンスの詳細については、「読み取り専用 ApsaraDB RDS for MySQL インスタンスの概要」をご参照ください。

1.1 プライマリ RDS インスタンスを構成する

  1. ApsaraDB RDS コンソール にログインします。作成した RDS インスタンスの ID をクリックします。

  2. プライマリ RDS インスタンスのデータベースプロキシ機能を有効にします

    説明

    このトピックでは、汎用データベースプロキシが有効になっています。汎用データベースプロキシは無料で提供され、書き込みリクエストをプライマリ RDS インスタンスに、読み取りリクエストを読み取り専用 RDS インスタンスに転送します。詳細については、「データベースプロキシとは」をご参照ください。

    1. 表示されるページの左側のナビゲーションウィンドウで、[データベースプロキシ] をクリックします。[汎用] カードで、[今すぐ有効にする] をクリックします。

    2. 表示されるダイアログボックスで、[OK] をクリックします。汎用データベースプロキシが有効になるまで、約 1 ~ 2 分待ちます。

1.2 読み取り専用 RDS インスタンスを構成する

  1. [インスタンス] ページで、プライマリ RDS インスタンスの ID をクリックして、インスタンスの詳細ページに移動します。

  2. [基本情報] ページの [インスタンス分散] セクションで、[読み取り専用インスタンス] の右側にある [追加] をクリックして、ApsaraDB RDS 購入ページに移動します。

  3. 読み取り専用 RDS インスタンスを作成します: [従量課金] の課金方式、[High-availability Edition][標準] プロダクトタイプを選択します。プライマリ RDS インスタンスのストレージ容量以上のストレージ容量を指定します。コストを削減するために、他の仕様には最低構成を使用できます。このトピックでは、20 GB のストレージ容量が選択されています。

  4. [次へ: インスタンス構成] をクリックします。次に、[次へ: 注文の確認] をクリックします。表示されるページで、[数量] パラメーターを 1 に設定し、支払いを完了します。

  5. プライマリまたは読み取り専用 RDS インスタンスの [データベースプロキシ] ページに移動して、インスタンスの接続トポロジーを表示します。読み取り専用 RDS インスタンスが作成されると、プライマリ RDS インスタンスのデータベースプロキシは自動的に読み取り専用 RDS インスタンスに接続し、読み取り重みを割り当てます。デフォルトでは、プライマリ RDS インスタンスは書き込みリクエストのみを処理し、読み取り専用 RDS インスタンスは読み取りリクエストのみを処理します。image

重要
  • データベースプロキシ機能は、読み取りリクエストと書き込みリクエストを分散するために使用されます。読み書き分離の効果を確認するには、読み取りリクエストと書き込みリクエストが送信される前に、プライマリ RDS インスタンスと読み取り専用 RDS インスタンスの SQL Explorer and Audit 機能を有効にする必要があります。詳細については、「SQL Explorer and Audit 機能を使用する」をご参照ください。

  • SQL Explorer and Audit 機能を有効にすると、ログトラフィックとログインデックスに対して課金されます。このトピックでは、この機能を使用して、プライマリ RDS インスタンスと読み取り専用 RDS インスタンスでの読み取りリクエストと書き込みリクエストの分散を確認します。読み書き分離の確認後、RDS インスタンスを引き続き使用したいが、この機能が不要になった場合は、予期せぬ料金が発生しないように、この機能を無効にすることをお勧めします。詳細については、SQL Explorer and Audit 機能を使用する をご参照ください。

2. 読み取りリクエストと書き込みリクエストをシミュレートする

2.1 データベースに接続する

ECS インスタンスにログインします。ECS インスタンスの CLI で、次のコマンドを実行してデータベースに接続します。

# mysql 接続コマンドテンプレート
mysql -hデータベースプロキシの内部エンドポイント -Pポート番号 -uユーザー名 -p

# mysql 接続コマンドの例
mysql -hmr-bm**************.rwlb.rds.aliyuncs.com -P3306 -udbuser -p
  • デフォルトポート 3306 を使用します。

  • ユーザー名として dbuser を、パスワードとしてカスタムパスワードを使用します。 dbuser は、「準備」で作成した特権アカウントです。

  • データベースプロキシの内部エンドポイントを使用します。プライマリ RDS インスタンスのエンドポイントを使用する場合、読み書き分離を実装することはできません。[データベースプロキシ] ページに移動して、接続トポロジーからデータベースプロキシの内部エンドポイントを取得できます。image

2.2 書き込みリクエストをシミュレートする

  1. データベースに接続した後、次のコマンドを実行して、「準備」で作成した dbtest データベースに切り替えることができます。

    -- dbtest データベースを使用します。
    USE dbtest;
  2. 次の文を実行して、dbtest データベースに table_test という名前のテーブルを作成し、テーブルに 4 つのデータレコードを挿入します。

    -- table_test テーブルを作成します。
    CREATE TABLE table_test (
        id INT PRIMARY KEY,
        name VARCHAR(50),
        age INT
    );
    
    -- テーブルに 4 つのデータレコードを挿入します。
    INSERT INTO table_test (id, name, age) VALUES (1, 'user1', 25);
    INSERT INTO table_test (id, name, age) VALUES (2, 'user2', 30);
    INSERT INTO table_test (id, name, age) VALUES (3, 'user3', 28);
    INSERT INTO table_test (id, name, age) VALUES (4, 'user4', 18);

2.3 読み取りリクエストをシミュレートする

次の SELECT 文を実行して、データベースからデータをクエリします。次に、読み取りリクエストの送信をシミュレートします。

SELECT * FROM table_test;
SELECT * FROM table_test WHERE id = 1;
SELECT * FROM table_test WHERE id = 2;
SELECT * FROM table_test WHERE id = 3;
SELECT * FROM table_test WHERE id = 4;

3. (オプション) 読み書き分離を確認する

説明

読み書き分離の効果を確認するには、読み取りリクエストと書き込みリクエストが送信される前に、プライマリ RDS インスタンスと読み取り専用 RDS インスタンスの SQL Explorer and Audit 機能を有効にする必要があります。

ECS インスタンスから読み取りリクエストと書き込みリクエストが送信された後、SQL Explorer and Audit 機能を使用して、プライマリインスタンスと読み取り専用 RDS インスタンスでの読み取りリクエストと書き込みリクエストの分散と処理を表示できます。プライマリ RDS インスタンスは書き込みリクエストのみを処理し、読み取り専用 RDS インスタンスはデータベースプロキシによって割り当てられたデフォルトの読み取り重みに基づいて読み取りリクエストのみを処理します。読み取りリクエストは CREATE TABLE 文と INSERT 文を指します。書き込みリクエストは SELECT 文を指します。

プライマリ RDS インスタンスのリクエストを確認する

  1. [インスタンス] ページで、プライマリ RDS インスタンスの ID をクリックします。表示されるページの左側のナビゲーションウィンドウで、[SQL Explorer And Audit] をクリックします。表示されるページで、[監査] タブをクリックします。image

  2. 検索条件を指定します: 時間範囲を指定し、[ユーザー] パラメーターを dbuser に、[データベース] パラメーターを dbtest に設定して、[クエリ] をクリックします。[ログ] セクションで、プライマリ RDS インスタンスでの SQL 文の実行を表示できます。image前の図は、1 つの CREATE TABLE 文と 4 つの INSERT 文が実行され、プライマリ RDS インスタンスでは SELECT 文が実行されていないことを示しています。これは、書き込みリクエストのみがプライマリ RDS インスタンスに送信されることを示しています。

読み取り専用 RDS インスタンスのリクエストを確認する

  1. [インスタンス] ページで、読み取り専用 RDS インスタンスの ID をクリックします。表示されるページの左側のナビゲーションウィンドウで、[SQL Explorer And Audit] をクリックします。表示されるページで、[監査] タブをクリックします。

  2. 検索条件を指定します: 時間範囲を指定し、[ユーザー] パラメーターを dbuser に、[データベース] パラメーターを dbtest に設定して、[クエリ] をクリックします。[ログ] セクションで、読み取り専用 RDS インスタンスでの SQL 文の実行を表示できます。image前の図は、5 つの SELECT 文のみが読み取り専用 RDS インスタンスで実行されていることを示しています。これは、読み取りリクエストのみが読み取り専用 RDS インスタンスに送信されることを示しています。

4. 複数の読み取り専用 RDS インスタンスの重みを構成する

読み取り専用 RDS インスタンスを 1 つだけアタッチすると、読み取り専用 RDS インスタンスでパフォーマンスのボトルネックが発生する可能性があります。読み取りリクエストの数が増加するにつれて、読み取り専用 RDS インスタンスの処理能力が使い果たされる可能性があります。読み取り専用 RDS インスタンスに障害が発生すると、データベースシステムの安定性に影響が出ます。プライマリ RDS インスタンスに複数の読み取り専用 RDS インスタンスをアタッチし、RDS インスタンスの読み取り重みを調整することで、高パフォーマンスでより安定した読み書き分離を実現できます。

4.1 読み取り専用 RDS インスタンスの読み取り重みを指定する

  1. プライマリ RDS インスタンスの別の読み取り専用 RDS インスタンスを作成します。次に、読み取り専用 RDS インスタンスの [SQL Explorer And Audit] 機能を有効にします。詳細については、「SQL Explorer and Audit 機能を使用する」をご参照ください。

  2. [インスタンス] ページで、プライマリ RDS インスタンスの ID をクリックします。表示されるページの左側のナビゲーションウィンドウで、[データベースプロキシ] をクリックします。表示されるページで、接続トポロジーを見つけ、[構成の変更] をクリックします。image

  3. 表示されるダイアログボックスで、[読み取り重みの割り当て] パラメーターを [カスタム] に設定します。新しい読み取り専用 RDS インスタンスの重みを 300 に設定し、元の読み取り専用 RDS インスタンスのデフォルトの重み 100 を保持します。次に、[OK] をクリックします。

    説明
    • 読み取り重みは 1 ~ 10,000 です。読み取り重みが高いほど、処理が必要な読み取りリクエストが多いことを示します。

    • 読み取りリクエストは、インスタンスの重みに基づいて読み取り専用 RDS インスタンス間で割り当てられます。このトピックでは、読み取り専用 RDS インスタンスへの読み取りリクエストの割り当て比率は 1:3 です。詳細については、「読み取り属性と書き込み属性、および読み取り重みを構成する」をご参照ください。

    image

4.2 (オプション) 読み取り重みの割り当てを確認する

  1. ECS インスタンスの CLI で、次の SELECT 文を 8 回繰り返し入力して実行します。読み取り重みが 100 の読み取り専用 RDS インスタンスは 2 つの読み取りリクエストを処理する必要があり、読み取り重みが 300 の読み取り専用 RDS インスタンスは 6 つの読み取りリクエストを処理する必要があります。

    SELECT * FROM table_test;
  2. [インスタンス] ページで、読み取り重みが 100 の読み取り専用 RDS インスタンスの ID をクリックします。[SQL Explorer And Audit] ページで、SQL 文の実行を表示します。詳細については、「3. (オプション) 読み書き分離を確認する」をご参照ください。次の図は、2 つの読み取りリクエストが読み取り専用 RDS インスタンスに分散されていることを示しています。image

  3. [インスタンス] ページで、読み取り重みが 300 の読み取り専用 RDS インスタンスの ID をクリックします。[SQL Explorer And Audit] ページで、SQL 文の実行を表示します。次の図は、6 つの読み取りリクエストが読み取り専用 RDS インスタンスに分散されていることを示しています。読み取り専用 RDS インスタンスへの読み取りリクエストの割り当ては、1:3 の割り当て比率を満たしています。image

5. リソースを解放する

  1. ECS インスタンスを解放します: ECS コンソール にログインし、解放する ECS インスタンスを見つけます。次に、[詳細] アイコンをクリックし、[アクション] 列の [解放] を選択して、ECS インスタンスを解放します。

  2. RDS インスタンスを解放します: ApsaraDB RDS コンソール にログインし、解放するプライマリ RDS インスタンスを見つけます。次に、[詳細] をクリックし、[アクション] 列の [インスタンスの解放] を選択します。プライマリ RDS インスタンスが解放されると、読み取り専用 RDS インスタンスも解放され、RDS インスタンスに対して有効になっている機能は使用できなくなります。

    重要

    読み書き分離の確認後、RDS インスタンスを引き続き使用したいが、SQL Explorer and Audit 機能が不要になった場合は、予期せぬ料金が発生しないように、この機能を無効にすることをお勧めします。詳細については、「SQL Explorer and Audit 機能を使用する」をご参照ください。

参照