一部の例外事由により、特定のログストリームの法定メンバー数(paxos_replica_num)とテナントローカリティ内のフル機能レプリカの数が一致しない場合があります。このような場合は、ALTER SYSTEM MODIFY コマンドを使用して、ログストリームの法定メンバー数を手動で調整できます。
制限事項
システムテナント(sysテナント)はすべてのテナントのログストリームの法定メンバー数を変更できますが、ユーザーテナントは自身のログストリームの法定メンバー数のみを変更できます。
テナント内の同一ログストリームについて、レプリカ移行タスクは複数パラレル実行可能ですが、その他の災害復旧タスク(レプリカ追加、レプリカ削除、レプリカタイプ変更、ログストリームの法定メンバー数変更など)は一度に1つしか実行できません。
sysテナントは
CDB_OB_LS_REPLICA_TASKSビューを使用して実行中の災害復旧タスクを確認できます。ユーザーテナントはDBA_OB_LS_REPLICA_TASKSビューを使用して実行中の災害復旧タスクを確認できます。現在、
paxos_replica_numを手動で増やすことはサポートされておらず、減らすことのみが可能です。
前提条件
ログストリームのリーダーの法定メンバー数を変更する前に、現在のユーザーが
ALTER SYSTEM権限を持っていることを確認してください。持っていない場合はALTER SYSTEM MODIFYコマンドを実行できません。ビューを照会する前に、現在のユーザーが以下のビューに対する
SELECT権限を持っていることを確認してください。持っていない場合は関連情報を照会できません。DBA_OB_TENANTSDBA_OB_LS/CDB_OB_LSDBA_OB_LS_LOCATIONS/CDB_OB_LS_LOCATIONS
操作手順
現在、tenant1というテナントがあり、その1002番のログストリームには4つのFレプリカが存在し、paxos_replica_numの値が5(4より大きい)であるとします。この場合、コマンドを使用して手動でpaxos_replica_numの値を4に調整することで、テナントローカリティ内のフル機能レプリカの数と一致させることができます。
ユーザーはクラスタに対応するテナントにログインします。
接続例は以下のとおりです:
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,LOCALITY FROM oceanbase.DBA_OB_TENANTS;Oracleモードで以下のステートメントを実行します。
obclient [SYS]> SELECT TENANT_NAME,TENANT_ID,LOCALITY 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を参照してください。
テナントの各ログストリームの分布状況をそれぞれ確認します。
たとえば、1002番のログストリームのレプリカの分布とそのログストリームの
paxos_replica_numを確認します。システムテナント
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 | +----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+--------------------------------------------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ | 2024-01-31 16:50:06.856652 | 2024-01-31 16:52:54.618093 | 1002 | 100.xx.xxx.012 | 5070 | 5105 | z1 | LEADER | 100.xx.xxx.012:5070:1,100.xx.xxx.001:5071:1706691024376341,100.xx.xxx.003:5073:1706691171162545,100.xx.xxx.004:5074:1706691096303187 | 5 | FULL | | FALSE | | 2024-01-31 16:50:24.450775 | 2024-01-31 16:52:54.760939 | 1002 | 100.xx.xxx.001 | 5071 | 5106 | z1 | FOLLOWER | NULL | NULL | FULL | | FALSE | | 2024-01-31 16:52:51.216095 | 2024-01-31 16:52:57.135393 | 1002 | 100.xx.xxx.003 | 5073 | 5108 | z2 | FOLLOWER | NULL | NULL | FULL | | FALSE | | 2024-01-31 16:51:36.356401 | 2024-01-31 16:52:54.686229 | 1002 | 100.xx.xxx.004 | 5074 | 5109 | z3 | FOLLOWER | NULL | NULL | FULL | | FALSE | +----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+--------------------------------------------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ 4 rows in set結果によると、テナントの1002番のログストリームには4つのFタイプのレプリカがあり、ログストリームの
PAXOS_REPLICA_NUMBERは5であるため、このログストリームのPAXOS_REPLICA_NUMBERを4に調整する必要があります。
paxos_replica_numを変更するコマンドを実行します。ステートメントは次のとおりです:
ALTER SYSTEM MODIFY LS [=] ls_id PAXOS_REPLICA_NUM [=] paxos_replica_num [TENANT [=] 'tenant_name'];ステートメントの使用方法:
ls_id:変更対象のログストリームIDを指定します。paxos_replica_num:変更後のログストリームの法定メンバー数、つまりテナントローカリティ内のフル機能(F)レプリカの数を指定します。このパラメータの値を指定する際には、以下の点に注意する必要があります:
調整後、
paxos_replica_numおよびリーダーレプリカのMEMBER_LISTのメンバー数が過半数を満たすようにする必要があります。paxos_replica_numの値は、現在のリーダーレプリカのMEMBER_LISTのメンバー数以上でなければなりません。sysテナントはビューCDB_OB_LS_LOCATIONSを照会して確認できます。ユーザーテナントはビューDBA_OB_LS_LOCATIONSを照会して確認できます。paxos_replica_numは小さくすることはできますが、大きくすることはできず、値の変更は1を超えてはなりません。たとえば、この例ではpaxos_replica_numを4にしか変更できません。
指定された値が上記のいずれかの条件を満たしていない場合、システムはエラーを報告します。
tenant_name:操作対象のテナントを指定します。システムテナントは他のテナントを指定できますが、ユーザーテナントは自身のテナントのみを指定できます。操作対象のテナントを明示的に指定しない場合、デフォルトのテナント名は現在のテナントになります。このステートメントでは、all、all_user、all_metaなどを使用してすべてのテナント、ユーザーテナント、およびすべてのMetaテナントを指定することはサポートされていません。
例:
obclient> ALTER SYSTEM MODIFY LS = 1002 paxos_replica_num = 4;実行が成功したら、再度そのログストリームのレプリカの分布を確認します。
システムテナント
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 | +----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+--------------------------------------------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ | 2024-01-31 16:50:06.856652 | 2024-01-31 17:17:23.032797 | 1002 | 100.xx.xxx.012 | 5070 | 5105 | z1 | LEADER | 100.xx.xxx.012:5070:1,100.xx.xxx.001:5071:1706691024376341,100.xx.xxx.003:5073:1706691171162545,100.xx.xxx.004:5074:1706691096303187 | 4 | FULL | | FALSE | | 2024-01-31 16:50:24.450775 | 2024-01-31 17:17:22.976381 | 1002 | 100.xx.xxx.001 | 5071 | 5106 | z1 | FOLLOWER | NULL | NULL | FULL | | FALSE | | 2024-01-31 16:52:51.216095 | 2024-01-31 17:17:23.113112 | 1002 | 100.xx.xxx.003 | 5073 | 5108 | z2 | FOLLOWER | NULL | NULL | FULL | | FALSE | | 2024-01-31 16:51:36.356401 | 2024-01-31 17:17:23.715470 | 1002 | 100.xx.xxx.004 | 5074 | 5109 | z3 | FOLLOWER | NULL | NULL | FULL | | FALSE | +----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+--------------------------------------------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ 4 rows in setクエリ結果から、テナント1002番のログストリームの
PAXOS_REPLICA_NUMBERが4に変更されたことがわかります。