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

ApsaraDB for SelectDB:複数のコンピューティングクラスター

最終更新日:Jan 16, 2025

ApsaraDB for SelectDB インスタンスには、複数のコンピューティングクラスターを含めることができます。これらのコンピューティングクラスターを使用して、異なるワークロードを処理できます。たとえば、データの読み取りと書き込みを分離したり、オンラインデータをオフラインデータから分離したりできます。このようにして、異なるビジネスシステム間でワークロードを分離できます。このトピックでは、ApsaraDB for SelectDB インスタンスで複数のコンピューティングクラスターを使用してコンピューティングリソースを分離する方法について説明します。

仕組み

ApsaraDB for SelectDB は、クラウドネイティブのコンピューティングストレージ分離アーキテクチャを使用します。このアーキテクチャでは、上位層のコンピューティングリソースが同じデータセットを共有します。ApsaraDB for SelectDB は、このアーキテクチャに基づいて複数のコンピューティングクラスターをサポートしています。1 つのインスタンスには、基盤となるデータストレージを共有する複数のコンピューティングクラスターを含めることができます。

コンピューティングクラスターは、分散システムにおけるコンピューティングリソースグループまたはコンピューティングキューに似ています。コンピューティングクラスターは、1 つ以上のコンピューティングユニットを調整してコンピューティングタスクを完了します。 ApsaraDB for SelectDB インスタンスでは、複数のコンピューティングクラスターのコンピューティングリソースは物理的に分離されています。これらのコンピューティングクラスターを使用して、異なるワークロードを処理できます。たとえば、データの読み取りと書き込みを分離したり、オンラインデータをオフラインデータから分離したりできます。このようにして、ワークロードを分離し、異なるビジネスシステム間の相互干渉を防ぐことができます。

この例では、インスタンスに複数のコンピューティングクラスターが含まれており、test_01 と test_02 の 2 つのアカウントが作成されています。 test_01 アカウントはビジネスシステム A のコンピューティングリクエストを処理するために使用され、cluster_01 クラスターにアクセスするための権限が付与されています。 test_02 アカウントはビジネスシステム B のコンピューティングリクエストを処理するために使用され、cluster_02 クラスターにアクセスするための権限が付与されています。どちらのアカウントもインスタンス内のすべてのデータにアクセスできます。

  1. 管理者アカウントを使用してインスタンスに接続し、test_01 アカウントと test_02 アカウントを初期化します。サンプルコード:

    mysql> CREATE USER test_01 IDENTIFIED BY 'testPassword';
    -- test_01 ユーザーを作成し、パスワードを設定します。
    
    Query OK, 0 rows affected (0.06 sec)
    
    mysql> CREATE USER test_02 IDENTIFIED BY 'testPassword';
    -- test_02 ユーザーを作成し、パスワードを設定します。
    
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> GRANT ALL ON *.* TO test_01;
    -- test_01 ユーザーにすべてのデータベースとテーブルに対するすべての権限を付与します。
    
    Query OK, 0 rows affected (0.07 sec)
    
    mysql> GRANT ALL ON *.* TO test_02;
    -- test_02 ユーザーにすべてのデータベースとテーブルに対するすべての権限を付与します。
    
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> GRANT USAGE_PRIV ON CLUSTER cluster_01 TO test_01;
    -- test_01 ユーザーに cluster_01 クラスターへのアクセス権限を付与します。
    
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> GRANT USAGE_PRIV ON CLUSTER cluster_02 TO test_02;
    -- test_02 ユーザーに cluster_02 クラスターへのアクセス権限を付与します。
    
    Query OK, 0 rows affected (0.04 sec)
  2. 管理者アカウント内で使用可能なクラスターをクエリします。サンプルコード:

    mysql> SHOW clusters;
    +------------+------------+-------+
    | cluster    | is_current | users |
    +------------+------------+-------+
    | cluster_01 | FALSE      |       |
    | cluster_02 | TRUE       |       |
    +------------+------------+-------+
    2 rows in set (0.04 sec)

    結果は、管理者アカウントが 2 つのクラスターにアクセスする権限を持っており、デフォルトで cluster_02 クラスターにアクセスしていることを示しています。

  3. test_01 アカウントを使用してインスタンスに接続し、使用可能なクラスターをクエリします。サンプルコード:

    mysql> SHOW clusters;
    +------------+------------+-------+
    | cluster    | is_current | users |
    +------------+------------+-------+
    | cluster_01 | TRUE       |       |
    +------------+------------+-------+
    1 row in set (0.03 sec)

    結果は、test_01 アカウントが cluster_01 クラスターにのみアクセスできることを示しています。

  4. test_01 アカウントを使用してテストデータを挿入します。サンプルコード:

    mysql> CREATE TABLE golds_log
    (
        user_id  bigint,
        accounts string,
        change_type string,
        golds    bigint,
        log_time int
    ) DISTRIBUTED BY HASH(`user_id`) BUCKETS 3;
    -- golds_log テーブルを作成します。
    
    Query OK, 0 rows affected (0.06 sec)
    
    mysql> INSERT INTO golds_log VALUES
        -> (3645356,'wds7654321(4171752)','swim',1700,152607152),
        -> (2016869,'dqyx123456789(2376699)','noise',1140,152607152),
        -> (3630468,'dke3776611(4156064)','white',1200,152602752);
    -- golds_log テーブルにデータを挿入します。
    
    Query OK, 3 rows affected (0.20 sec)
    {'label':'insert_9707a9905aab4805_b8b9d28aadcd96e6', 'status':'VISIBLE', 'txnId':'15313504260617216'}
  5. test_02 アカウントを使用してインスタンスに接続し、使用可能なクラスターをクエリします。サンプルコード:

    mysql> SHOW clusters;
    +------------+------------+-------+
    | cluster    | is_current | users |
    +------------+------------+-------+
    | cluster_02 | TRUE       |       |
    +------------+------------+-------+
    1 row in set (0.04 sec)

    結果は、test_02 アカウントが cluster_02 クラスターにのみアクセスできることを示しています。

  6. test_02 アカウントを使用してテストデータをクエリします。サンプルコード:

    mysql> SELECT * FROM golds_log;
    -- golds_log テーブルのすべてのデータを選択します。
    
    +---------+------------------------+------------------+-------+-----------+
    | user_id | accounts               | change_type      | golds | log_time  |
    +---------+------------------------+------------------+-------+-----------+
    | 3630468 | dke3776611(4156064)    | noise            |  1200 | 152602752 |
    | 2016869 | dqyx123456789(2376699) | whitewo          |  1140 | 152607152 |
    | 3645356 | wds7654321(4171752)    | swim             |  1700 | 152607152 |
    +---------+------------------------+------------------+-------+-----------+
    3 rows in set (0.13 sec)

    結果は、異なるクラスターが同じインスタンス内のデータを共有していることを示しています。

  7. 管理者アカウントを使用してインスタンスに接続し、test_03 アカウントを作成します。 test_03 アカウントにクラスターアクセス権限を付与しないでください。サンプルコード:

    mysql> CREATE USER test_03 IDENTIFIED BY 'testPassword';
    -- test_03 ユーザーを作成し、パスワードを設定します。
    
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> GRANT ALL ON *.* TO test_03;
    -- test_03 ユーザーにすべてのデータベースとテーブルに対するすべての権限を付与します。ただし、クラスターへのアクセス権限は付与しません。
    
    Query OK, 0 rows affected (0.04 sec)
  8. test_03 アカウントを使用してインスタンスに接続し、テストデータをクエリします。この場合、test_03 アカウントにはインスタンス内のクラスターにアクセスする権限がないため、エラーが報告されます。サンプルコード:

    mysql> SELECT * FROM golds_log;
    -- test_03 アカウントはクラスターにアクセスできないため、エラーが発生します。
    
    ERROR 1105 (HY000): errCode = 2, detailMessage = 90363 have no queryable replicas. err: 90364's backend -1 does not exist or not alive, or you may not have permission to access the current cluster, clusterName=null