OceanBaseデータベースはマルチテナントアーキテクチャを採用しています。マルチテナントアーキテクチャは、リソース統合(Resource Consolidation)やクラウドサービスなどのシナリオに適しており、運用保守の複雑さも低減します。
OceanBaseデータベースでは、バージョン4.0からシステムテナント、ユーザーテナント、および各ユーザーテナントに対応するMetaテナントの3種類のテナントがあります。
システムテナントへのログイン
システムテナントは、OceanBaseデータベース内部でクラスタの共通タスクを処理するためのデータベースインスタンスです。Root Serviceはシステムテナントに基づいてOceanBaseデータベースの管理業務を担い、クラスタ管理、テナント管理、リソース管理、ロードバランシング、日次メジャーコンパクションのスケジューリング、移行レプリケーションなどを含みます。システムテナントはクラスタがデフォルトで作成するテナントであり、クラスタのライフサイクルと一致し、クラスタおよびすべてのテナントのライフサイクル管理を担当します。
システムテナントはMySQLモードと互換性があり、MySQLクライアントまたはOceanBaseクライアント(OBClient)を使用してログインできます。
MySQLクライアントによるログイン
MySQLクライアントを使用したデータベース接続文字列の例は以下のとおりです:
mysql -h<ホストIP> -P<ポート番号> -u<アカウント> -p<'データベースパスワード'> -D<デフォルトデータベース> -A -c --prompt "OceanBase(\u@\d)> "
主なパラメータの説明:
-h:OceanBaseデータベースにログインするホストのIPアドレス。OceanBaseはODP経由でのログインと、OBServerノードへの直接接続ログインをサポートしています。ODP経由でのログインを推奨します。ODPは、ルーティングや災害復旧機能を含むOceanBaseデータベースの分散特性をより適切に処理できます。-P:OceanBaseデータベースにログインするポート番号。OceanBaseデータベースはデプロイ時に設定ファイルでポート番号を変更できます。設定ファイル内の各OBServerノードのmysql_portパラメータとODPのlisten_portパラメータを確認できます。明示的に指定しない場合はデフォルト値が適用されます。ODP経由でログインする場合、デフォルトのポート番号は2883です。
OBServerノードに直接接続してログインする場合、デフォルトのポート番号は2881です。
-u:OceanBaseデータベースにログインするアカウント。従来のデータベースとは異なり、OceanBaseデータベースのアカウントには、ユーザー名、テナント名、クラスタ名を含む複数のフィールドが含まれます。ODP経由でログインする場合、ユーザー名、テナント名、クラスタ名を指定する必要があります。形式は以下のとおりです:
ユーザー名@テナント名#クラスタ名、クラスタ名:テナント名:ユーザー名、クラスタ名-テナント名-ユーザー名、またはクラスタ名.テナント名.ユーザー名。例えば、rootユーザーでtestクラスタのSYSテナントにログインする場合、アカウントはroot@sys#testとなります。OBServerノードに直接接続してログインする場合、ユーザー名とテナント名を指定する必要があります。形式は
ユーザー名@テナント名です。例えば、rootユーザーでtestクラスタのSYSテナントにログインする場合、アカウントはroot@sysとなります。
-p:OceanBaseデータベースにログインするパスワード。新規構築されたクラスタでは、SYSテナントのrootユーザーの初期パスワードは空です。新規構築したクラスタで最初に行うことは、rootユーザーのパスワードを変更することを推奨します。コマンドはalter user root identified by '******'です。
MySQLクライアント接続の詳細については、MySQLクライアントによるOceanBaseテナントへの接続を参照してください。
OBClientによるログイン
MySQLクライアントを使用したログイン以外に、OceanBaseクライアント(OBClient)を使用してログインすることもできます。OBClientは、OceanBaseデータベースの推奨されるコマンドラインクライアントツールであり、そのユーザーインターフェースはMySQLクライアントと互換性があります。データベース接続文字列の例は以下のとおりです:
obclient -h<ホストIP> -P<ポート番号> -u<アカウント> -p<'データベースパスワード'> -D<デフォルトデータベース> -A -c --prompt "OceanBase(\u@\d)> "
OBClientクライアントによる接続の詳細については、OBClientを使用してOceanBaseテナントに接続するを参照してください。
ログインのベストプラクティス
rootユーザーは権限が高すぎるため、無計画に権限を拡散するとデータベースのセキュリティに重大なリスクをもたらします。rootユーザーは他のユーザーの管理にのみ使用し、「最小限必要な機能」の原則に基づいて作成された専用の運用保守ユーザーと読み取り専用ユーザーを使用することを推奨します。
ビューの確認には、専用の読み取り専用ユーザーでログインすることを推奨します。
OceanBaseデータベース4.0では、以前のバージョンと比べて最大の変更点は、内部情報のクエリがビューへと全面的に移行したことです。システムテナントのOceanBaseデータベースから豊富なビュー情報を確認できます。
obclient> use oceanbase obclient> show tables; +-------------------------------------------+ | Tables_in_oceanbase | +-------------------------------------------+ | CDB_INDEXES | | CDB_IND_COLUMNS | | CDB_IND_PARTITIONS | | CDB_IND_SUBPARTITIONS | | CDB_OBJECTS | | CDB_OB_ARCHIVELOG | | CDB_OB_ARCHIVELOG_PIECE_FILES | ......これらのビューは大きく分けて2つのカテゴリに分類されます:データディクショナリビューと動的性能ビューです。
データディクショナリビュー:命名規則は
DBA_またはCDB_で始まります。DBA_で始まるビューは各テナント内の情報を表示します。例えば、DBA_OB_LSビューはテナント内のログストリーム情報を表示しますが、システムテナント内のDBA_OB_LSテーブルはシステムテナント自身のログストリーム情報のみを表示します。CDB_で始まるビューはシステムテナント専用であり、システムテナント内でクラスタ内のすべてのテナントのデータベース状態を確認するために使用されます。例えば、CDB_OB_LSビューはクラスタ内のすべてのテナントのすべてのログストリーム情報を表示します。通常、各DBA_で始まるビューには、システムテナント下に対応するCDB_で始まるビューが存在します。動的性能ビューの命名規則は
GV$またはV$で始まります。V$はログインしたマシン上の情報のみを表示し、GV$はテナントのすべてのマシン情報の集計です。OceanBase 4.0では、通常のテナントでも多くの動的性能ビューが追加されています。例えば、GV$OB_UNITSビューでは、テナント内のユニット分布情報を照会できます。システムテナントの動的性能ビューは特別な処理が施されており、クラスタ内のすべてのテナント情報の集計を直接表示します。
例えば、OceanBaseクラスタのノード情報を確認する場合:
obclient> use oceanbase Database changed obclient> select * from dba_ob_servers; +-------------+----------+----+--------------+----------+-----------------+--------+----------------------------+-----------+-----------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------+ | SVR_IP | SVR_PORT | ID | ZONE | SQL_PORT | WITH_ROOTSERVER | STATUS | START_SERVICE_TIME | STOP_TIME | BLOCK_MIGRATE_IN_TIME | CREATE_TIME | MODIFY_TIME | BUILD_VERSION | +-------------+----------+----+--------------+----------+-----------------+--------+----------------------------+-----------+-----------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------+ | 6.x.xxx.xx | 2882 | 6 | sa128_obv4_2 | 2881 | NO | ACTIVE | 2022-12-30 16:17:03.173519 | NULL | NULL | 2022-12-30 16:08:04.749100 | 2023-01-04 11:48:36.589270 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec 7 2022 16:22:15) | | 6.x.xxx.xx | 2882 | 4 | sa128_obv4_3 | 2881 | NO | ACTIVE | 2022-12-30 16:36:35.567437 | NULL | NULL | 2022-12-30 16:08:02.755200 | 2023-01-04 14:13:36.976548 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec 7 2022 16:22:15) | | 6.x.xxx.xxx | 2882 | 3 | sa128_obv4_3 | 2881 | NO | ACTIVE | 2022-12-12 12:42:00.054759 | NULL | NULL | 2022-11-03 15:37:09.530894 | 2022-12-22 14:43:26.717736 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec 7 2022 16:22:15) | | 6.x.xx.xx | 2882 | 1 | sa128_obv4_1 | 2881 | NO | ACTIVE | 2022-12-12 12:25:17.555651 | NULL | NULL | 2022-11-03 15:37:08.990683 | 2022-12-12 12:25:18.553763 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec 7 2022 16:22:15) | | 6.x.xx.xxx | 2882 | 2 | sa128_obv4_2 | 2881 | YES | ACTIVE | 2022-12-12 11:46:37.222980 | NULL | NULL | 2022-11-03 15:37:09.490511 | 2022-12-12 11:47:31.075335 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec 7 2022 16:22:15) | | 6.x.xx.xx | 2882 | 5 | sa128_obv4_1 | 2881 | NO | ACTIVE | 2022-12-30 16:25:45.420996 | NULL | NULL | 2022-12-30 16:08:03.928478 | 2023-01-04 11:48:36.578231 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec 7 2022 16:22:15) | +-------------+----------+----+--------------+----------+-----------------+--------+----------------------------+-----------+-----------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------+ 6 rows in setクラスタの運用保守コマンドの実行には、専用の運用保守ユーザーを使用することを推奨します。
システムテナントからクラスタの運用保守コマンドを実行できます。例えば、異常なノードを隔離する場合:
obclient> ALTER SYSTEM STOP SERVER 'xx.xx.xx.xx:2882';実行成功後、
DBA_OB_SERVERSビューの該当ノードのSTOP_TIMEフィールドを確認することで、隔離が成功したかどうかを確認できます。
テナントへのログイン
システムテナントに対応するのがユーザーテナントです。ユーザーテナントはユーザーが作成するテナントであり、完全なデータベース機能を外部に提供し、MySQLおよびOracleの2種類の互換モードをサポートしています。
システムテナントにログインし、DBA_OB_TENANTSビューをクエリすることで、すべてのテナント情報を確認できます:
TENANT_TYPEはテナントタイプを表します:SYSはシステムテナント、METAはMetaテナント、Userはユーザーテナントです。テナントIDが1のものがシステムテナントです。テナントIDが1000より大きいテナントのうち、偶数のものがユーザーテナント、奇数のものがMetaテナントであり、ユーザーテナントのテナントIDは対応するMetaテナントよりも1大きくなっています。COMPATIBILITY_MODEはテナントの互換モードを表します:MYSQLはMySQL互換モード、ORACLEはOracle互換モードです。
MySQLモードのユーザーテナントにログインする場合は、MySQLクライアントとOBClientクライアントのいずれかを使用できます。Oracleモードのユーザーテナントにログインする場合は、OBClientクライアントのみを使用できます。ログイン方法はシステムテナントにログインする方法と同じですが、ログインアカウントのテナント名を対応するテナント名に変更する必要があります。
MySQLモードのユーザーテナントでは、OceanBaseデータベース独自のデータディクショナリビューと動的性能ビューはすべてoceanbaseという名前空間にあります。Oracleモードのユーザーテナントでは、OceanBaseデータベース独自のビューはSYSユーザー下にあります。両モードにおいて、OceanBaseデータベースのビュー名、フィールド、使用感は一致しています。
Metaテナントへのログイン
MetaテナントはOceanBaseデータベースが内部で自己管理するテナントであり、ユーザーテナントを作成するたびに対応するMetaテナントが作成され、そのライフサイクルはユーザーテナントと一致します。Metaテナントには直接ログインできませんが、その情報はユーザーテナントやシステムテナントからアクセスできます。
関連ドキュメント
OceanBaseデータベースへの接続とアクセス方法、操作の詳細については、以下を参照してください: