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 クラスターにアクセスするための権限が付与されています。どちらのアカウントもインスタンス内のすべてのデータにアクセスできます。
管理者アカウントを使用してインスタンスに接続し、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)管理者アカウント内で使用可能なクラスターをクエリします。サンプルコード:
mysql> SHOW clusters; +------------+------------+-------+ | cluster | is_current | users | +------------+------------+-------+ | cluster_01 | FALSE | | | cluster_02 | TRUE | | +------------+------------+-------+ 2 rows in set (0.04 sec)結果は、管理者アカウントが 2 つのクラスターにアクセスする権限を持っており、デフォルトで cluster_02 クラスターにアクセスしていることを示しています。
test_01 アカウントを使用してインスタンスに接続し、使用可能なクラスターをクエリします。サンプルコード:
mysql> SHOW clusters; +------------+------------+-------+ | cluster | is_current | users | +------------+------------+-------+ | cluster_01 | TRUE | | +------------+------------+-------+ 1 row in set (0.03 sec)結果は、test_01 アカウントが cluster_01 クラスターにのみアクセスできることを示しています。
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'}test_02 アカウントを使用してインスタンスに接続し、使用可能なクラスターをクエリします。サンプルコード:
mysql> SHOW clusters; +------------+------------+-------+ | cluster | is_current | users | +------------+------------+-------+ | cluster_02 | TRUE | | +------------+------------+-------+ 1 row in set (0.04 sec)結果は、test_02 アカウントが cluster_02 クラスターにのみアクセスできることを示しています。
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)結果は、異なるクラスターが同じインスタンス内のデータを共有していることを示しています。
管理者アカウントを使用してインスタンスに接続し、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)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