本記事では、テナントのLocalityプロパティを変更する方法について説明します。
Localityの適用シナリオ
Localityの設定は、通常、テナントのレプリカ数の増加、削減、またはレプリカ配置の調整に使用されます。
テナントレプリカ数の増加
クラスタ内の特定のテナントについて、そのテナントのレプリカ数を増やします。一度に1つだけ増やせます。例えば、テナントのレプリカ数を1つから3つに変更する場合、Localityを
F@z1からF@z1,F@z2に変更し、さらにF@z1,F@z2からF@z1,F@z2,F@z3に変更する必要があります。具体的な操作については、レプリカの追加を参照してください。注意
テナントのレプリカ数を3つから5つに変更する場合、直接操作できます。まず4つに変更してから5つに変更する必要はありません。
テナントレプリカ数の削減
クラスタ内の特定のテナントについて、そのテナントのレプリカ数を削減します。例えば、テナントのレプリカ数を3つから2つに変更する場合、または、テナントのレプリカ数を5つから3つに変更する場合です。具体的な操作については、レプリカの削除を参照してください。
注意
- 現在のバージョンでは、テナントのレプリカ数を2つから1つに変更することがサポートされています。
- テナントのレプリカ数を5つから3つに変更する場合、直接操作できます。まず4つに変更してから3つに変更する必要はありません。
テナントレプリカ配置の調整
クラスタ内の特定のテナントについて、複数回のLocality変更を通じて、そのテナントのデータセンター配置を調整します。例えば、テナントの元のLocalityが
F@z1,F@z2,F@z3で、z3のデータセンターの契約期間が満了したため、z4に調整する必要がある場合、LocalityをF@z1,F@z2,F@z4に変更する必要があります。これを実現するには、F@z1,F@z2,F@z3からF@z1,F@z2,F@z3,F@z4へ、さらにF@z1,F@z2,F@z3,F@z4からF@z1,F@z2,F@z4へと、2回のLocality変更が必要です。具体的な操作については、レプリカ配置の調整を参照してください。
前提条件
Localityを変更する前に、変更対象のZone上の各ノードのリソース割り当て状況を確認する必要があります。Zone上のノードのリソースが不足しており、テナントが必要とするリソースユニットを格納できない場合、Localityの変更はできません。
Zone上の各ノードのリソース割り当て状況については、テナントとリソース情報の確認を参照してください。
注意点
テナントのローカリティは空にすることはできません。
テナントのローカリティが変更されると、そのテナント配下のすべてのテーブルのレプリカ配置も変更されます。
前回のテナントローカリティ変更が完了する前に、次のテナントローカリティ変更を実行することはできません。
ローカリティを変更する際は、一度に1つの操作のみを実行できます。例えば、Zone3をZone4に直接置き換えることはできません。まずZone4を1つ追加し、その後Zone3を1つ削除する必要があります。
ローカリティを変更する際は、プライマリゾーンへの影響に注意する必要があります。事前にプライマリゾーンを調整することを推奨します。
例:
Zone3を削除する必要がある場合、そのZone3が第一優先順位のプライマリゾーンに属していると、ローカリティ調整プロセスがテナントの読み書きサービスに影響を与えます。
Zone4を追加する際、プライマリゾーンがRANDOMの場合、その後Zone4も読み書きサービスを提供します。
ローカリティ変更にはPaxosメンバーの変更とデータのコピーが関わるため、安定性とパフォーマンスへの影響を評価する必要があります。Paxosメンバー変更の影響については、ノード障害に対する耐容度への影響を明確に評価する必要があります。レプリカ配置の変化については、デプロイメントアーキテクチャがデータセンター障害や都市障害に対するSLA設計を破綻させないかどうかを評価する必要があります。データコピーについては、変更プロセス中にデータコピーが同一ノード上の他のテナントに与える影響を観察し、可能な限り業務の低負荷時間帯に行い、事前に緊急対応計画を準備する必要があります。
ローカリティ変更プロセスでは、ノード障害に対する想定される耐容度を低下させてはなりません。例えば、3レプリカデプロイメントのクラスタでデータセンター交換シナリオの場合、変更プロセス中にノード障害に対する想定される耐容度を低下させないように、まずレプリカを追加し、その後レプリカを削除する必要があります。したがって、変更プロセス中に単一レプリカに異常が発生しても、理論上はサービスの連続性に影響しません。影響がある場合は、データベースの可用性回復が最優先事項であり、まずハードウェア異常の回復を試みるべきです。
手順
例:テナント mq_t1 のローカリティを FULL{1}@sa128_obv4_1,FULL{1}@sa128_obv4_2 から F{1}@sa128_obv4_1,F{1}@sa128_obv4_2,F{1}@sa128_obv4_3 に変更します。
rootユーザーでクラスタのsysテナントにログインします。
obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -Aoceanbaseデータベースに移動します。obclient>use oceanbase;変更前のローカリティを確認します。
obclient> SELECT TENANT_ID,TENANT_NAME,TENANT_TYPE,PRIMARY_ZONE,LOCALITY FROM oceanbase.DBA_OB_TENANTS; +-----------+-------------+-------------+----------------------------------------+------------------------------------------------------------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | PRIMARY_ZONE | LOCALITY | +-----------+-------------+-------------+----------------------------------------+------------------------------------------------------------------+ | 1 | sys | SYS | sa128_obv4_2;sa128_obv4_1,sa128_obv4_3 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 | | 1001 | META$1002 | META | sa128_obv4_2;sa128_obv4_1,sa128_obv4_3 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 | | 1002 | midas0_3790 | USER | sa128_obv4_2;sa128_obv4_1,sa128_obv4_3 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 | | 1003 | META$1004 | META | sa128_obv4_1,sa128_obv4_2 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2 | | 1004 | mq_t1 | USER | sa128_obv4_1,sa128_obv4_2 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2 | +-----------+-------------+-------------+----------------------------------------+------------------------------------------------------------------+テナント
mq_t1のローカリティを変更します。obclient>ALTER TENANT mq_t1 locality="F{1}@sa128_obv4_1,F{1}@sa128_obv4_2,F{1}@sa128_obv4_3";ローカリティ変更タスクの実行状態を確認します。
obclient>SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE = 'ALTER_TENANT_LOCALITY'; +--------+-----------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------------------------------------------------------------------------------------------------+---------------------------------------------+----------------+-------------+ | JOB_ID | JOB_TYPE | JOB_STATUS | RESULT_CODE | PROGRESS | START_TIME | MODIFY_TIME | TENANT_ID | SQL_TEXT | EXTRA_INFO | RS_SVR_IP | RS_SVR_PORT | +--------+-----------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+----------------------------------------------------------------------------------------------------+---------------------------------------------+----------------+-------------+ | 1 | ALTER_TENANT_LOCALITY | SUCCESS | 0 | 100 | 2023-01-05 19:33:46.730319 | 2023-01-05 19:33:46.920111 | 1002 | ALTER TENANT mq_t1 locality="F{1}@sa128_obv4_1,F{1}@sa128_obv4_2,F{1}@sa128_obv4_3" | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2 | xx.xx.xx.xx | 2882 | +--------+-----------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+----------------------------------------------------------------------------------------------------+---------------------------------------------+----------------+-------------+JOB_STATUSがSUCCESSの場合、ローカリティ変更タスクは正常に実行されたことを示します。変更後のローカリティを確認します。
obclient>SELECT TENANT_ID,TENANT_NAME,TENANT_TYPE,PRIMARY_ZONE,LOCALITY FROM oceanbase.DBA_OB_TENANTS; +-----------+-------------+-------------+----------------------------------------+------------------------------------------------------------------+--------------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | +-----------+-------------+-------------+----------------------------------------+------------------------------------------------------------------+--------------------+ | 1 | sys | SYS | sa128_obv4_2;sa128_obv4_1,sa128_obv4_3 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 | null | | 1001 | META$1002 | META | sa128_obv4_2;sa128_obv4_1,sa128_obv4_3 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 | null | | 1002 | midas0_3790 | USER | sa128_obv4_2;sa128_obv4_1,sa128_obv4_3 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 | null | | 1003 | META$1004 | META | sa128_obv4_1,sa128_obv4_2 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 | null | | 1004 | mq_t1 | USER | sa128_obv4_1,sa128_obv4_2 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 | null | +-----------+-------------+-------------+----------------------------------------+------------------------------------------------------------------+--------------------+クエリにより、
mq_t1のローカリティがF{1}@sa128_obv4_1,F{1}@sa128_obv4_2,F{1}@sa128_obv4_3に変更されたことが確認できます。この時点でPREVIOUS_LOCALITYが空であれば、変更は成功したことを意味します。PREVIOUS_LOCALITYが空でない場合は、変更中であることを意味します。