プライマリテナントに強力同期のスタンバイテナントを設定した後、プライマリテナントを最大可用モードまたは最大保護モードに設定できます。
使用上の制限と注意事項
保護モードはプライマリテナントでのみ設定できます。
最大パフォーマンスモードのプライマリテナントについて、保護モードを最大可用モードまたは最大保護モードに設定する場合、プライマリテナントには強力同期のスタンバイテナントが設定されている必要があります。プライマリテナントに強力同期のスタンバイテナントを設定する手順の詳細については、強力同期のダウンストリームを設定するを参照してください。
最大保護モードまたは最大可用モードのテナントについては、保護モードを最大パフォーマンスモードに直接変更できます。
カスケードされたスタンバイテナントを強力同期モードに設定することはサポートされていません。
テナントを最大パフォーマンスモードまたは最大可用モードから最大保護モードに設定する場合、強力同期のスタンバイテナントの同期位置とプライマリテナントの同期位置の差が5秒を超えてはなりません。
以下のステートメントを使用して、プライマリテナントとスタンバイテナントの同期位置をそれぞれ確認し、その差が5,000,000,000未満であることを確認できます(フィールド
SYNC_SCNはナノ秒単位の位置に対応します)。システムテナント
obclient(root@sys)[(none)]> SELECT SYNC_SCN FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_ID = tenant_id;ユーザーテナント
MySQLモードOracleモードMySQLモードでのクエリステートメントは以下のとおりです:
obclient(root@mysql)[(none)]> SELECT SYNC_SCN FROM oceanbase.DBA_OB_TENANTS;Oracleモードでのクエリステートメントは以下のとおりです:
obclient(sys@oracle001)[SYS]> SELECT SYNC_SCN FROM SYS.DBA_OB_TENANTS;
手順
管理者ユーザーとして、プライマリテナント、またはプライマリテナントが存在するクラスタの
sysテナントにログインします。説明
MySQLモードの管理者ユーザーは
rootユーザー、Oracleモードの管理者ユーザーはSYSユーザーです。接続例は以下のとおりです。データベースへの接続時には、実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A以下のステートメントを実行し、プライマリテナントの保護モードを設定します。
ステートメントは以下のとおりです:
ALTER SYSTEM SET STANDBY TENANT TO {MAXIMIZE PERFORMANCE} | {MAXIMIZE AVAILABILITY} | {MAXIMIZE PROTECTION} [TENANT = tenant_name];ここで、
tenant_nameは、保護モードを設定するプライマリテナント名をシステムテナントが指定するために使用されます。例:
システムテナントは、プライマリテナントmysqlの保護モードを最大可用モードに設定します。
obclient(root@sys)[(none)]> ALTER SYSTEM SET STANDBY TENANT TO MAXIMIZE AVAILABILITY TENANT = mysql;ユーザーテナントは、自身のテナントの保護モードを最大可用モードに設定します。
obclient> ALTER SYSTEM SET STANDBY TENANT TO MAXIMIZE AVAILABILITY;
設定が成功した後、
DBA_OB_TENANTSビューを確認して設定が正しく行われたかどうかを確認できます。システムテナント
obclient(root@sys)[oceanbase]> SELECT TENANT_NAME, PROTECTION_MODE, PROTECTION_LEVEL FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mysql';ユーザーテナント
MySQLモードOracleモードMySQLモードでは、クエリステートメントは以下のとおりです:
obclient(root@mysql)[oceanbase]> SELECT TENANT_NAME, PROTECTION_MODE, PROTECTION_LEVEL FROM oceanbase.DBA_OB_TENANTS;Oracleモードでは、クエリステートメントは以下のとおりです:
obclient(sys@oracle001)[SYS]> SELECT TENANT_NAME, PROTECTION_MODE, PROTECTION_LEVEL FROM SYS.DBA_OB_TENANTS;
クエリ結果の例は以下のとおりです:
+-------------+----------------------+----------------------+ | TENANT_NAME | PROTECTION_MODE | PROTECTION_LEVEL | +-------------+----------------------+----------------------+ | mysql | MAXIMUM AVAILABILITY | MAXIMUM AVAILABILITY | +-------------+----------------------+----------------------+ 1 row in set
保護モード設定のベストプラクティス
プライマリおよびスタンバイテナントはデフォルトで最大パフォーマンスモードに設定されています。最大パフォーマンスモードでは、スタンバイテナントはログアーカイブまたはネットワーク経由でログを取得し、物理的同期を実現します。この場合、プライマリとスタンバイのデプロイメント方法、OS、仕様などを気にする必要はありません。しかし、最大保護モードまたは最大可用性モードでは、プライマリテナントはスタンバイテナントの同期進捗状況に注意を払う必要があります。ログはスタンバイテナント上で正常に永続化された後にクライアントに返されるため、実質的にプライマリテナントには過半数が追加されることになります。このような状況下でプライマリテナントの業務への影響を軽減するため、保護モードを設定する際には、以下の点を確認する必要があります:
プライマリおよびスタンバイテナントは可能な限り同一リージョンにデプロイし、ネットワーク遅延が許容範囲内であることを確認した上で、十分な帯域幅を確保することが望ましいです。
プライマリおよびスタンバイテナントのデプロイメント方法は同種である必要があり、CPUやメモリ不足によってスタンバイテナントのログ受信が制限されるのを防ぐ必要があります。
強力同期モードでは、プライマリおよびスタンバイテナントのスケーリングを行う際、常にスタンバイテナントのリソースがプライマリテナント以上であることを保証することを推奨します。具体的には、拡張時はスタンバイテナントからプライマリテナントの順に、縮小時はプライマリテナントからスタンバイテナントの順に行います。