一部の異常な理由により、特定のログストリームの法定メンバー数(paxos_replica_num)がテナントのローカリティにおけるフル機能レプリカの数と一致しない場合、ALTER SYSTEM MODIFYコマンドを使用してログストリームの法定メンバー数を手動で調整できます。
制限
システムテナント(sysテナント)はすべてのテナントのログストリームの法定メンバー数を変更できますが、ユーザーテナントは自身のログストリームの法定メンバー数のみを変更できます。
テナント内の同一ログストリームについて、レプリカ移行タスクは複数並列実行可能ですが、その他のディザスタリカバリタスク(レプリカ追加、レプリカ削除、レプリカタイプ変換、ログストリームの法定メンバー数変更など)は1回につき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(root@sys)[oceanbase]> SELECT TENANT_NAME,TENANT_ID FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME='tenant1';ユーザーテナント
MySQLモードOracleモードMySQLモードで以下のステートメントを実行します。
obclient(root@tenant1)[oceanbase]> SELECT TENANT_NAME,TENANT_ID FROM oceanbase.DBA_OB_TENANTS;Oracleモードで以下のステートメントを実行します。
obclient(SYS@tenant1)[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(root@sys)[oceanbase]> SELECT * FROM oceanbase.CDB_OB_LS WHERE TENANT_ID=1002;ビュー
CDB_OB_LSの各フィールドの詳細については、CDB_OB_LSを参照してください。ユーザーテナント
MySQLモードOracleモードMySQLモードで以下のステートメントを実行します:
obclient(root@tenant1)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_LS;Oracleモードで以下のステートメントを実行します:
obclient(SYS@tenant1)[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 | UNIT_LIST | +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+----------------+ | 1 | NORMAL | z1;z2 | 0 | 0 | NULL | NULL | 1712455113896017202 | 1712455113896017202 | | | | 1001 | NORMAL | z1;z2 | 0 | 1001 | 1712125812893680165 | NULL | 1712455113896017202 | 1712455113896017202 | | 1002,1004,1006 | | 1002 | NORMAL | z1;z2 | 0 | 1002 | 1712125812908098857 | NULL | 1712455114041323052 | 1712455113540551113 | | 1001,1003,1005 | | 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(root@sys)[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(root@tenant1)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_LS_LOCATIONS WHERE LS_ID=1002;Oracleモードで以下のステートメントを実行します:
obclient(SYS@tenant1)[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(root@sys)[oceanbase]> SELECT * FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE LS_ID=1002 AND TENANT_ID=1002;ユーザーテナント
MySQLモードOracleモードMySQLモードで以下のステートメントを実行します:
obclient(root@tenant1)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_LS_LOCATIONS WHERE LS_ID=1002;Oracleモードで以下のステートメントを実行します。
obclient(SYS@tenant1)[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に変わったことがわかります。