本記事では、テナントのLocalityプロパティを変更する方法について説明します。
Localityの適用シナリオ
Localityの設定は通常、テナントのレプリカ数の増加、減少、またはレプリカの分散調整に使用されます:
テナントのレプリカ数の増加
クラスタ内の特定のテナントについて、テナントのレプリカ数を一度に1つずつ増やします。例えば、テナントのレプリカ数を1から3に変更する場合、Localityを
F@z1からF@z1,F@z2に変更し、さらにLocalityを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上の各ノードのリソース割り当て状況については、テナントとリソース情報の表示を参照してください。
注意事項
テナントのローカリティは空にすることはできません。
テナントのローカリティが変更されると、そのテナント内のすべてのテーブルのレプリカの配置も変更されます。
前回のテナントローカリティの変更が完了していない場合、新たなテナントローカリティの変更を実行することは許可されません。
ローカリティの変更では一度に一つの操作しか実行できません。例えば、Zone3をZone4に直接置き換えることはできず、まずZone4を追加し、その後Zone3を削除する必要があります。
ローカリティを変更する際は、Primary Zoneへの影響に注意する必要があります。事前にPrimary Zoneを調整することを推奨します。
例:
Zone3を削減する必要がある場合、Zone3が第一優先のPrimary Zoneに属している場合、ローカリティの調整プロセスはテナントの読み書きサービスに影響を与えます。
Zone4を追加する際、Primary Zoneが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が空でない場合は、変更が進行中であることを意味します。