この記事では、主にレプリカの移行方法について説明します。レプリカの移行は、ゾーン内でのレプリカの位置変更のみを対象とし、レプリカ数やレプリカタイプの変更は含まれません。レプリカの移行は、ノード障害シナリオおよびロードバランシングシナリオに適用されます。
Unit移行
Unit移行とは、単一ゾーン内でのノード間におけるUnitの移行を指します。テナント内のUnitを移行することで、テナント内のログストリームのレプリカ移行を実現できます。
(オプション)Unit GCの最大待機時間を調整する
OceanBaseデータベースでは、Unit移行が完了すると、システムは自動的に移行前のソースサーバー上のテナントを削除し、そのテナント上のすべてのセッションを強制終了します。これにより、ユーザーが実行中のクエリ操作に影響を与える可能性があります。この問題を解決するため、OceanBaseデータベースはUnitのスムーズなGC(ガベージコレクション)方式を実装しています。つまり、Unit移行が完了すると、Unit GCのカウントダウン状態に入ります。カウントダウンが開始されると、システムは新しい接続リクエストを受け付けなくなり、同時に実行中のリクエストがある場合は、リクエストの実行終了後にGCを行います。
さらに、完全なUnitスムーズGCでは、実行時間が非常に長いタスクに遭遇した場合、長時間GCできない問題が発生する可能性があります。UnitがスムーズにGCできるようにするため、OceanBaseデータベースはクラスタレベルの構成パラメータunit_gc_wait_timeを使用して、Unit GCの最大待機時間を制御します。最大待機時間を超えると、システムは自動的にGCを行います。構成パラメータunit_gc_wait_timeのデフォルト値は1分です。ユーザーは自身のビジネスニーズに応じて、適切に調整できます。
具体的な設定方法は以下のとおりです:
rootユーザーでクラスタのsysテナントにログインします。
接続例は以下のとおりです:
obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A現在の構成パラメータ
unit_gc_wait_timeの値を確認します。obclient> SHOW PARAMETERS LIKE '%unit_gc_wait_time%';構成パラメータ
unit_gc_wait_timeの値を調整します。例:
obclient> ALTER SYSTEM SET unit_gc_wait_time = '1m';
ユニットの移行を実行する
例:テナントmq_t1内のUNIT_ID = 1006のユニットを、同一ゾーン内の別ノードに移行します。
rootユーザーでクラスタのsysテナントにログインします。
obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -Aoceanbaseデータベースに移動します。obclient>use oceanbase;テナント
mq_t1のtenant_idを照会します。この例では、テナント
mq_t1のtenant_idは1004です。obclient> SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1'; +-----------+-------------+-------------+----------------------------+----------------------------+----------------------------------------+------------------------------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS | +-----------+-------------+-------------+----------------------------+----------------------------+----------------------------------------+------------------------------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+ | 1004 | mq_t1 | USER | 2023-01-04 11:57:11.384141 | 2023-01-04 11:57:37.866707 | sa128_obv4_1;sa128_obv4_2 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1684396167132057328 | 1684396167132057328 | 1684396167051160964 | 4611686018427387903 | NOARCHIVELOG | DISABLED | +-----------+-------------+-------------+----------------------------+----------------------------+----------------------------------------+------------------------------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+ 1 row in set対応するテナント
mq_t1のユニット情報を確認します。この例では、
UNIT_ID = 1006のユニットはゾーンsa128_obv4_3のxx.xx.xx.19ノードに配置されています。obclient> SELECT * FROM oceanbase.DBA_OB_UNITS WHERE TENANT_ID = 1004; +---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+--------------+------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+----------+----------+-------------+ | UNIT_ID | TENANT_ID | STATUS | RESOURCE_POOL_ID | UNIT_GROUP_ID | CREATE_TIME | MODIFY_TIME | ZONE | SVR_IP | SVR_PORT | MIGRATE_FROM_SVR_IP | MIGRATE_FROM_SVR_PORT | MANUAL_MIGRATE | UNIT_CONFIG_ID | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT | +---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+--------------+------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+----------+----------+-------------+ | 1004 | 1004 | ACTIVE | 1005 | 1002 | 2023-01-04 11:48:36.582413 | 2023-01-04 11:57:11.387383 | sa128_obv4_1 | xx.xx.xx.47 | 2882 | NULL | NULL | NULL | 1006 | 3 | 3 | 12884901888 | 38654705664 | 30000 | 30000 | 3 | | 1005 | 1004 | ACTIVE | 1005 | 1002 | 2023-01-04 11:48:36.591414 | 2023-01-04 11:57:11.388449 | sa128_obv4_2 | xx.xx.xx.81 | 2882 | NULL | NULL | NULL | 1006 | 3 | 3 | 12884901888 | 38654705664 | 30000 | 30000 | 3 | | 1006 | 1004 | ACTIVE | 1005 | 1002 | 2023-01-04 14:13:36.980799 | 2023-01-04 14:13:36.980799 | sa128_obv4_3 | xx.xx.xx.19 | 2882 | NULL | NULL | NULL | 1006 | 3 | 3 | 12884901888 | 38654705664 | 30000 | 30000 | 3 | +---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+--------------+------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+----------+----------+-------------+ 3 rows in set移行するユニットが存在するゾーン内のOBServerノードのサーバーIPアドレスを確認します。
この例では、ゾーン
sa128_obv4_3にはxx.xx.xx.19とxx.xx.xx.158の2つのOBServerノードが含まれています。obclient> SELECT * FROM oceanbase.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 | +-------------+----------+----+--------------+----------+-----------------+--------+----------------------------+-----------+-----------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------+ | xx.xx.xx.81 | 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) | | xx.xx.xx.19 | 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) | | xx.xx.xx.158 | 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) | | xx.xx.xx.43 | 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) | | xx.xx.xx.106 | 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) | | xx.xx.xx.47 | 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テナント
mq_t1内のUNIT_ID = 1006のユニットを、同一ゾーン内の別ノードに移行します。obclient> ALTER SYSTEM migrate unit = 1006 destination = 'xx.xx.xx.158:2882'; Query OK, 0 rows affectedユニットの移行状態を確認します。
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_JOBS WHERE JOB_TYPE = 'MIGRATE_UNIT'; +--------+--------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------+----------+------------+------------+-------------+ | JOB_ID | JOB_TYPE | JOB_STATUS | RESULT_CODE | PROGRESS | START_TIME | MODIFY_TIME | TENANT_ID | UNIT_ID | SQL_TEXT | EXTRA_INFO | RS_SVR_IP | RS_SVR_PORT | +--------+--------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------+----------+------------+------------+-------------+ | 4 | MIGRATE_UNIT | INPROGRESS | NULL | 0 | 2023-01-04 17:22:02.208219 | 2023-01-04 17:22:02.208219 | 1004 | 1006 | NULL | NULL | xx.xx.xx.106 | 2882 | +--------+--------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------+----------+------------+------------+-------------+ 1 row in setクエリ結果によると、
JOB_STATUSの値がINPROGRESSの場合は移行が進行中を意味し、その値がSUCCESSの場合は移行が成功したことを示します。ユニット移行後の情報を確認します。
obclient> SELECT * FROM oceanbase.DBA_OB_UNITS WHERE UNIT_ID = 1006; +---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+--------------+-------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+----------+----------+-------------+ | UNIT_ID | TENANT_ID | STATUS | RESOURCE_POOL_ID | UNIT_GROUP_ID | CREATE_TIME | MODIFY_TIME | ZONE | SVR_IP | SVR_PORT | MIGRATE_FROM_SVR_IP | MIGRATE_FROM_SVR_PORT | MANUAL_MIGRATE | UNIT_CONFIG_ID | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT | +---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+--------------+-------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+----------+----------+-------------+ | 1006 | 1004 | ACTIVE | 1005 | 1002 | 2023-01-04 14:13:36.980799 | 2023-01-04 17:22:02.210245 | sa128_obv4_3 | xx.xx.xx.158 | 2882 | xx.xx.xx.19 | 2882 | YES | 1006 | 3 | 3 | 12884901888 | 38654705664 | 30000 | 30000 | 3 | +---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+--------------+-------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+----------+----------+-------------+ 3 rows in setクエリにより、
UNIT_ID = 1006がxx.xx.xx.19からxx.xx.xx.158に変更されたことがわかります。ユニットの移行は成功しました。
レプリカの手動移行
ユニット移行やその他の場合において、レプリカの配置場所とユニットの配置場所が一致しない場合、ALTER SYSTEM MIGRATE REPLICA コマンドを使用して対応するレプリカを指定された場所に移行できます。
制限事項
システムテナント(sysテナント)はすべてのテナントのログストリームに対してレプリカ移行操作を実行できますが、ユーザーテナントは自身のログストリームに対してのみレプリカ移行操作を実行できます。
テナント内の同一ログストリームについては、レプリカ移行タスクを複数パラレル実行できる以外、他の災害復旧タスク(レプリカの追加、削除、レプリカタイプの変更、ログストリームの法定メンバー数の変更など)は一度に1つしか実行できません。
sysテナントは
CDB_OB_LS_REPLICA_TASKSビューを使用して実行中の災害復旧タスクがあるかどうかを確認できます。ユーザーテナントはDBA_OB_LS_REPLICA_TASKSビューを使用して実行中の災害復旧タスクがあるかどうかを確認できます。レプリカ移行は同一ゾーン間でのみ実行できます。
前提条件
レプリカ移行操作を実行する前に、現在のユーザーが
ALTER SYSTEM権限を持っていることを確認してください。持っていない場合はALTER SYSTEM MIGRATE REPLICAコマンドを実行できません。ビューを照会する前に、現在のユーザーが以下のビューに対する
SELECT権限を持っていることを確認してください。持っていない場合は関連情報を照会できません。DBA_OB_TENANTSDBA_OB_LS/CDB_OB_LSGV$OB_UNITSDBA_OB_LS_LOCATIONS/CDB_OB_LS_LOCATIONS
レプリカ移行操作を実行する前に、ターゲットサーバー上にユーザーが利用可能なリソース、すなわちUnitが存在し、そのUnit上に該当ログストリームのレプリカが存在しないことを確認してください。
複数のレプリカ移行タスクを同時に実行する必要がある場合、テナントロールがプライマリテナントの場合は、そのテナントに対応する構成パラメータ
replica_parallel_migration_modeの値をonに設定する必要があります。テナントロールがスタンバイテナントの場合は、そのテナントに対応する構成パラメータreplica_parallel_migration_modeの値をonまたはautoに設定する必要があります。テナントレベルの構成パラメータreplica_parallel_migration_modeの詳細と設定については、replica_parallel_migration_modeを参照してください。
操作手順
現在、tenant1というテナントがあり、Unit移行コマンドALTER SYSTEM MIGRATE UNIT= 1003 DESTINATION = '100.xx.xx.002:5072';を使用して、unit_idが1003のUnitをターゲットサーバー100.xx.xxx.002:5072に移行しました。異常な理由により、システムはレプリカの移行を正常に完了できず、手動でレプリカをターゲットサーバー100.xx.xxx.002:5072に移行する必要があります。
ユーザーがクラスタに対応するテナントにログインします。
接続例は以下のとおりです:
obclient -h172.30.xxx.xxx -P2883 -uroot@tenant1#obdemo -pxxxx -Aデータベースへの接続方法の詳細については、データベース接続の概要(MySQLモード)およびデータベース接続の概要(Oracleモード)を参照してください。
操作対象のテナントのテナントID情報を取得します。
システムテナント
obclient [oceanbase]> SELECT TENANT_NAME,TENANT_ID FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME='tenant1';ユーザーテナント
MySQLモードOracleモードMySQLモードでは、次のステートメントを実行します。
obclient [oceanbase]> SELECT TENANT_NAME,TENANT_ID FROM oceanbase.DBA_OB_TENANTS;Oracleモードで以下のステートメントを実行します。
obclient [SYS]> SELECT TENANT_NAME,TENANT_ID FROM SYS.DBA_OB_TENANTS;クエリ結果の例は次のとおりです:
+-------------+-----------+ | TENANT_NAME | TENANT_ID | +-------------+-----------+ | tenant1 | 1002 | +-------------+-----------+ 1 row in setクエリ結果によると、このテナントのテナントIDは
1002です。ビュー
DBA_OB_TENANTSの各フィールドの詳細については、DBA_OB_TENANTSを参照してください。
操作対象のテナントのすべてのログストリーム情報を確認します。
システムテナント
obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_LS WHERE TENANT_ID=1002;ビュー
CDB_OB_LSの各フィールドの詳細については、CDB_OB_LSを参照してください。ユーザーテナント
MySQLモードOracleモードMySQLモードでは、次のステートメントを実行します。
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_LS;Oracleモードで以下のステートメントを実行します。
obclient [SYS]> SELECT * FROM SYS.DBA_OB_LS;クエリ結果の例は次のとおりです:
+-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+ | LS_ID | STATUS | PRIMARY_ZONE | UNIT_GROUP_ID | LS_GROUP_ID | CREATE_SCN | DROP_SCN | SYNC_SCN | READABLE_SCN | FLAG | +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+ | 1 | NORMAL | z1;z2 | 0 | 0 | NULL | NULL | 1712455113896017202 | 1712455113896017202 | | | 1001 | NORMAL | z1;z2 | 1001 | 1001 | 1712125812893680165 | NULL | 1712455113896017202 | 1712455113896017202 | | | 1002 | NORMAL | z1;z2 | 1002 | 1002 | 1712125812908098857 | NULL | 1712455114041323052 | 1712455113540551113 | | | 1003 | NORMAL | z1;z2 | 0 | 0 | 1712125828880850585 | NULL | 1712455113896017202 | 1712455113896017202 | DUPLICATE | +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+ 4 rows in setクエリ結果によると、tenant1テナントにはログストリーム1、ログストリーム1001、ログストリーム1002、およびログストリーム1003のブロードキャストログストリームがあります。
ビュー
DBA_OB_LSの各フィールドの詳細については、DBA_OB_LSを参照してください。
操作対象のテナントのUnitリソースを確認します。
システムテナント
obclient [oceanbase]> SELECT * FROM oceanbase.GV$OB_UNITS WHERE TENANT_ID=1002;ユーザーテナント
MySQLモードOracleモードMySQLモードでは、次のステートメントを実行します。
obclient [oceanbase]> SELECT * FROM oceanbase.GV$OB_UNITS;Oracleモードで以下のステートメントを実行します。
obclient [SYS]> SELECT * FROM SYS.GV$OB_UNITS;クエリ結果の例は次のとおりです:
+----------------+----------+---------+-----------+------+-----------+----------------+---------+---------+-------------+---------------------+---------------------+-------------+---------------+-----------------+------------------+--------+----------------------------+ | SVR_IP | SVR_PORT | UNIT_ID | TENANT_ID | ZONE | ZONE_TYPE | REGION | MAX_CPU | MIN_CPU | MEMORY_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT | LOG_DISK_SIZE | LOG_DISK_IN_USE | DATA_DISK_IN_USE | STATUS | CREATE_TIME | +----------------+----------+---------+-----------+------+-----------+----------------+---------+---------+-------------+---------------------+---------------------+-------------+---------------+-----------------+------------------+--------+----------------------------+ | 100.xx.xxx.012 | 5070 | 1002 | 1002 | z1 | ReadWrite | default_region | 2 | 2 | 1073741824 | 9223372036854775807 | 9223372036854775807 | 2 | 5798205850 | 75552460 | 0 | NORMAL | 2023-11-05 22:03:30.630137 | | 100.xx.xxx.002 | 5072 | 1004 | 1002 | z2 | ReadWrite | default_region | 2 | 2 | 1073741824 | 9223372036854775807 | 9223372036854775807 | 2 | 5798205850 | 75552460 | 0 | NORMAL | 2023-11-05 22:03:30.634915 | | 100.xx.xxx.003 | 5073 | 1003 | 1002 | z2 | ReadWrite | default_region | 2 | 2 | 1073741824 | 9223372036854775807 | 9223372036854775807 | 2 | 5798205850 | 169443835 | 12582912 | NORMAL | 2023-11-05 22:03:30.633004 | | 100.xx.xxx.001 | 5071 | 1001 | 1002 | z1 | ReadWrite | default_region | 2 | 2 | 1073741824 | 9223372036854775807 | 9223372036854775807 | 2 | 5798205850 | 169443835 | 14680064 | NORMAL | 2023-11-05 22:03:30.627247 | | 100.xx.xxx.004 | 5074 | 1006 | 1002 | z3 | ReadWrite | default_region | 2 | 2 | 1073741824 | 9223372036854775807 | 9223372036854775807 | 2 | 5798205850 | 151021679 | 0 | NORMAL | 2023-11-05 22:03:30.638615 | | 100.xx.xxx.005 | 5075 | 1005 | 1002 | z3 | ReadWrite | default_region | 2 | 2 | 1073741824 | 9223372036854775807 | 9223372036854775807 | 2 | 5798205850 | 0 | 0 | NORMAL | 2023-11-05 22:03:30.636885 | +----------------+----------+---------+-----------+------+-----------+----------------+---------+---------+-------------+---------------------+---------------------+-------------+---------------+-----------------+------------------+--------+----------------------------+ 6 rows in setクエリ結果によると、現在のテナントは
100.xx.xxx.012:5070、100.xx.xxx.002:5072、100.xx.xxx.003:5073、100.xx.xxx.001:5071、100.xx.xxx.004:5074、100.xx.xxx.005:5075などのサーバーで利用可能なUnitリソースを持っています。また、unit_idが1003のUnitは100.xx.xxx.003:5073サーバーにあります。ビュー
GV$OB_UNITSの各フィールドの詳細については、GV$OB_UNITSを参照してください。
以前に取得したテナントのログストリーム情報に基づいて、ログストリーム1002のレプリカの分散状況を確認します。
システムテナント
obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE LS_ID=1002 AND TENANT_ID=1002;ビュー
CDB_OB_LS_LOCATIONSの各フィールドの詳細については、CDB_OB_LS_LOCATIONSを参照してください。ユーザーテナント
MySQLモードOracleモードMySQLモードでは、次のステートメントを実行します。
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_LS_LOCATIONS WHERE LS_ID=1002;Oracleモードで以下のステートメントを実行します。
obclient [SYS]> SELECT * FROM SYS.DBA_OB_LS_LOCATIONS WHERE LS_ID=1002;クエリ結果の例は次のとおりです:
+----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+-------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ | CREATE_TIME | MODIFY_TIME | LS_ID | SVR_IP | SVR_PORT | SQL_PORT | ZONE | ROLE | MEMBER_LIST | PAXOS_REPLICA_NUMBER | REPLICA_TYPE | LEARNER_LIST | REBUILD | +----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+-------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ | 2023-11-05 23:52:15.716363 | 2023-11-05 23:52:24.212243 | 1002 | 100.xx.xxx.003 | 5073 | 5107 | z2 | LEADER | 100.xx.xxx.003:5073:1699199535653021,100.xx.xxx.012:5070:1,100.xx.xxx.004:5074:1699194477097063 | 3 | FULL | | FALSE | | 2023-11-05 22:05:20.420160 | 2023-11-05 23:52:24.807711 | 1002 | 100.xx.xxx.012 | 5070 | 5105 | z1 | FOLLOWER | NULL | NULL | FULL | | FALSE | | 2023-11-05 22:27:57.157395 | 2023-11-05 23:52:24.361105 | 1002 | 100.xx.xxx.004 | 5074 | 5109 | z3 | FOLLOWER | NULL | NULL | FULL | | FALSE | +----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+-------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ 3 rows in setクエリ結果によると、
100.xx.xxx.003:5073上のレプリカを移行する必要があります。レプリカはz2上にあるため、前のステップで取得したUnit情報を組み合わせて、同一ゾーン内で利用可能なUnitを見つけることで、レプリカを100.xx.xxx.002:5072に移行できます。
レプリカ移行コマンドを実行します。
ステートメントは次のとおりです:
ALTER SYSTEM MIGRATE REPLICA LS [=] ls_id SOURCE [=] 'svr_ip:svr_port' DESTINATION [=] 'destination_ip:destination_port' [DATA_SOURCE [=] 'data_source'] [TENANT [=] 'tenant_name']ステートメントの使用方法:
ls_id:移行対象のレプリカのログストリームIDを指定します。svr_ip:svr_port:移行対象のレプリカが存在するサーバーのIPアドレスとポート番号を指定します。例:100.xx.xxx.003:5073。destination_ip:destination_port:移行対象のレプリカのターゲットサーバーのIPアドレスとポート番号を指定します。例:100.xx.xxx.002:5072。data_source:レプリカのデータソースアドレスを指定します。ログストリーム内の他の任意のレプリカをデータソースアドレスとして選択できます。業務の実際の状況に応じて選択してください。例:100.xx.xxx.004:5074。指定されたデータソースが利用不可能な場合、システムはエラーを報告します。この値を明示的に指定しない場合、システムは自動的に利用可能なデータソースを選択します。
tenant_name:操作対象のテナントを指定します。システムテナントは他のテナントを指定できますが、ユーザーテナントは自身のテナントのみを指定できます。操作対象のテナントを明示的に指定しない場合、デフォルトのテナント名は現在のテナントになります。このステートメントでは、all、all_user、all_metaなどを使用してすべてのテナント、ユーザーテナント、およびすべてのMetaテナントを指定することはサポートされていません。このステートメントでは一度に1つのログストリームレプリカしか移行できません。複数のレプリカを移行する必要がある場合は、このステートメントを複数回実行する必要があります。
例:
obclient> ALTER SYSTEM MIGRATE REPLICA LS = 1002 SOURCE='100.xx.xxx.003:5073' DESTINATION = '100.xx.xxx.002:5072'実行が成功した後、再度そのログストリームのレプリカの分散状況を確認します。
システムテナント
obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE LS_ID=1002 AND TENANT_ID=1002;ユーザーテナント
MySQLモードOracleモードMySQLモードでは、次のステートメントを実行します。
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_LS_LOCATIONS WHERE LS_ID=1002;Oracleモードで以下のステートメントを実行します:
obclient [SYS]> SELECT * FROM SYS.DBA_OB_LS_LOCATIONS WHERE LS_ID=1002;クエリ結果の例は次のとおりです:
+----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+-------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ | CREATE_TIME | MODIFY_TIME | LS_ID | SVR_IP | SVR_PORT | SQL_PORT | ZONE | ROLE | MEMBER_LIST | PAXOS_REPLICA_NUMBER | REPLICA_TYPE | LEARNER_LIST | REBUILD | +----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+-------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ | 2023-11-06 00:05:39.520972 | 2023-11-06 00:05:49.101503 | 1002 | 100.xx.xxx.002 | 5072 | 5106 | z2 | LEADER | 100.xx.xxx.002:5072:1699200339454143,100.xx.xxx.012:5070:1,100.xx.xxx.004:5074:1699194477097063 | 3 | FULL | | FALSE | | 2023-11-05 22:05:20.420160 | 2023-11-06 00:05:50.037494 | 1002 | 100.xx.xxx.012 | 5070 | 5105 | z1 | FOLLOWER | NULL | NULL | FULL | | FALSE | | 2023-11-05 22:27:57.157395 | 2023-11-06 00:05:49.484669 | 1002 | 100.xx.xxx.004 | 5074 | 5109 | z3 | FOLLOWER | NULL | NULL | FULL | | FALSE | +----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+-------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ 3 rows in set結果によると、テナント1002のログストリームの元の
100.xx.xxx.003:5073上のレプリカは100.xx.xxx.002:5072に移行され、移行は成功しました。