スケールアウトとFUJITSU Enterprise Postgresが提供する機能との組み合わせについて説明します。
pgx_dmpall、pgx_rcvall
“5.12 ノードのバックアップ”および“5.13.3.2 物理バックアップを使用したリカバリ”を参照してください。
透過的データ暗号化
シャード表やレプリケーションテーブルなどのデータも、各ノードの暗号化テーブル空間に配置することで、暗号化可能です。キーストアはノードごとに作成してください。
データ秘匿化
データノード上のテーブルに対し秘匿化ポリシーを作成していた場合、データノードに対して直接アクセスした場合と比較して、結果が異なる場合があります。
例えば、下記のようなケースで説明します。
データノード上にt1 (c1 int)、t2(c2 int)のテーブルがあり、t1に(1), (2)、t2に(1) (3)の行がある
c1とc2は全秘匿化(全ての値を0に変換)している
データノードに直接アクセスし、“select c1 from t1, t2 where c1 = c2”というSQLを実行すると、(0)の1行のみが返却されます。これは、SQLを実行した結果に対して秘匿化ポリシーが適用されるためです。一方で、中央管理ノード経由で同じSQLを実行すると、アクセスプランによっては、(0), (0), (0), (0)の4行が返却されるケースがあります。これは、中央管理ノード経由でSQLを実行すると、各テーブルのデータを取得するために内部的にデータノードに対してSQLを実行します。この内部で実行されるSQLが返却されたタイミングで秘匿化ポリシーが適用されるため、中央管理ノードからはt1とt2には両方とも(0), (0)の2行があるように見えるためです。
これを防ぐために、中央管理ノードからデータノードに対して内部的に実行されるSQLでは秘匿化ポリシーを適用せず、中央管理ノード上で秘匿化ポリシーを適用する必要がでてきます。これを実現するために、下記を実施します。
データノード上にスーパーユーザーを作成します。そのスーパーユーザーに対して、下記を実行します。
alter user <superuser> set pgx_datamasking.enable=false;
中央管理ノードで、CREATE USER MAPPINGにより、上記ユーザーにマッピングします。
中央管理ノード上で、外部テーブルに対して秘匿化ポリシーを作成します。
pgx_loader
接続したノードに閉じた範囲でロードができます。
複数ノードに跨るデータをロードする場合には、データをノードごとに分割し、ノードごとにデータをロードしてください。
インメモリ機能
中央管理ノードに集計を実施するSQLを実行した場合、データノードにVertical Clustered Index (VCI)を作成している場合でも、VCIは利用されません。これは、中央管理ノードからデータノードに内部的に実行されるSQLは集計のクエリとならず、VCIが利用されないためです。
監査ログ
Session Audit Loggingでは、pgaudit設定ファイル内のruleセクションで、出力するログを絞り込むためのルールを指定します。スケールアウトでは、自動で実行されるSQLがあります。以下に、これらのSQLのログ出力を制御するために追加で必要な情報を示します。
中央管理ノードからデータノードに内部的に実行されるSQL
audit_roleは、中央管理ノードからデータノードに接続する際に使用するユーザーマッピングのuserの値となります。
application_nameは、中央管理ノードでのpostgres_scaleout_fdw.application_nameパラメータの値、PGXNODEに設定したapplication_nameの値、postgres_scaleout_fdwの優先順位で設定されます。
remote_hostは、中央管理ノードのホスト名またはIPアドレスとなります。
リゾルバプロセスが中央管理ノードで内部的に実行するSQL
database、audit_role、application_name、remote_hostがそれぞれ空になります。ただし、内部的には、application_nameが'resolver_worker'に設定されているため、application_nameにより出力するログを絞り込むことが可能です。
リゾルバプロセスがデータノードに対して内部的に実行するSQL
application_nameは、'resolver_worker'に設定されています。
Connection Managerから中央管理ノードに内部的に実行されるSQL
database、audit_role、application_nameは、Connection Managerの設定ファイルconmgr.confのcollect_shardinfo_conninfoで設定した値となります。Mirroring Controllerを利用している場合、データベースtemplate1の監査ログを取得の対象外とする設定にしているため、collect_shardinfo_conninfoの設定で、template1へ接続させることで、監査ログを絞り込むことが可能です。
remote_hostは、Connection Managerの存在するホスト名または、IPアドレスとなります。
Npgsql
接続ルーティング機能はConnection Managerを使用しますが、NpgsqlがConnection Managerに対応していないため、Npgsqlで接続ルーティングを使用することはできません。
Npgsqlを使用したアプリケーションを動作させる場合、各ノードに直接アクセスしてください。
oracle_fdw、dblink、postgres_fdw
中央管理ノード経由でデータノードを更新した場合、postgres_scaleout_fdwが自動的に二相コミットを使用します。一方で、oracle_fdw、dblink、postgres_fdwは二相コミットに対応していません。そのため、中央管理ノード経由で、データノードとデータノード以外のインスタンスにoracle_fdwなどで接続した場合には、トランザクションの原始性は保たれません。
auto_explain、pg_hint_plan
“auto_explainの使用”および“pg_hint_planの使用”を参照してください。
スケールアウトで利用できない機能
下記の機能は、スケールアウトでは利用できません。
WebAdmin、pgAdmin
コマンドによる運用を行ってください。
PRIMECLUSTER連携、Pgpool-II
Mirroring ControllerとScale out Controllerを用いた冗長化を行ってください。
pg_rman
pgx_dmpallコマンドおよびpgx_rcvallコマンドを利用してください。
上記以外の機能
データノードまたは中央管理ノードに閉じた範囲であれば使用可能です。