中央管理ノードでは、データノードごとにconmgrプロセスをセットアップします。各データノードのconmgrプロセスをセットアップする方法を説明します。
“Connection Manager 利用ガイド”の“conmgrプロセスのためのディレクトリ作成”を参照し、各データノードのconmgrプロセスのためのディレクトリを作成してください。
“Connection Manager 利用ガイド”の“conmgr.confの設定”を参照し、各データノードのconmgr.confを設定してください。backend_host*、backend_hostaddr*、backend_port*、watchdog_port*は、各データノードの値を設定してください。
“リファレンス”の“cm_ctl”を参照し、conmgrプロセスの起動を実施してください。この時点ではデータノードが起動していないため、-Wオプションを指定してください。
“クラスタ運用ガイド(データベース多重化編)”の“プライマリサーバのデータベース多重化運用のセットアップ”を参照し、中央管理ノードのプライマリサーバのデータベース多重化運用のセットアップを実施してください。
network.confの設定を実施する際には、“裁定サーバによる自動縮退を選択した場合”を選択してください。
サーバ識別子.confには、以下のパラメータの設定を追加してください。
パラメータ | 設定値 | 説明 |
---|---|---|
node_role | coordinator | ノードの識別子。中央管理ノードの場合、coordinator、データノードの場合、dataを指定します。それ以外の値は無効です。デフォルト値はNULLで無効です。 |
node_name (注1) | conmgrプロセスが接続する接続先ノードのノード名,[...] | 中央管理ノードのconmgrプロセスが接続する相手先ノードを確定するために設定します。CREATE PGXNODEで指定したサーバ名を設定してください。中央管理ノードの場合はデータノードのノード名をカンマ区切りで指定します。 |
conmgr_port | conmgrプロセスが動作するポート番号,[...] | Mirroring Controllerプロセスが連携するconmgrプロセスのポート番号を指定します。conmgr.confに指定したportと同じ値を設定してください。スケールアウト構成でない場合、無効です。複数のconmgrプロセスが存在する場合には、カンマ区切りで複数のポート番号を指定してください。 |
internode_address | ノード間ネットワークのアドレス | ネットワーク監視時に使用するノード間ネットワークアドレスを半角シングルクォートで囲んで指定します。 |
conmgr_check_interval | ノード間ネットワークの生死監視の時間間隔(ms) | conmgrプロセスがノード間の生死監視を依頼する間隔を指定します。スケールアウト構成ではない場合はこの値は無視されます。デフォルト値はheartbeat_intervalの値です。 |
conmgr_check_timeout | ノード間ネットワーク生死監視のタイムアウト時間(s) | conmgrプロセスからの応答を待つ最大待機時間を指定します。指定された秒数の間応答がない場合に、ノード間ネットワークに障害が発生したと判断します。デフォルト値はheartbeat_timeoutの値です。 |
conmgr_check_retry | ノード間ネットワークの生死監視のリトライ回数 | 異常と判断するまでのリトライ回数を指定します。ここで指定した回数+1回連続で異常を検知した場合に、ノード間ネットワークが不通であると判断し、データノードは裁定を依頼します。中央管理ノードの場合、裁定を依頼しません。デフォルト値はheartbeat_retryの値です。 |
注1) 中央管理ノードの場合、管理するデータノードのnode_nameの記載順とそのデータノードと接続するconmgr_portの記載順は揃えてください。
サーバ識別子.conf
node_name=datanode1,datanode2 conmgr_port=datanode1に接続するConnection Managerのポート番号,datanode2に接続するConnection Managerのポート番号
注意
Scale out Controller構成の注意点
Scaleout Controller構成で運用する場合、Connection Managerがノード間のネットワークを監視します。このため、Connection Managerの接続先インスタンスを指定するbackend_hostパラメータには、接続先ノードのinternode_addressパラメータと同じ値を指定してください。
“クラスタ運用ガイド(データベース多重化編)”の“プライマリサーバのインスタンスの作成・設定・登録”を参照し、中央管理ノードのプライマリサーバのインスタンスの作成・設定・登録を実施してください。
中央管理ノードのプライマリサーバでは、以下の相違点があります。
initdbコマンドのオプション
中央管理ノードでは、--coordinatorオプションを指定してください。
例)
initdb -D /database/inst1 --coordinator --waldir=/transaction/inst1 --lc-collate="C" --lc-ctype="C" --encoding=UTF8
pg_hba.confの設定
データノードからの接続を認証するために、pg_hba.confファイルにエントリを追加します。データノードからの接続は、以下の場合に使用されます。
データノードを初めて起動した場合における、クラスタ内で全ノードに対して作成されたオブジェクトのデータノードへの定義
initdbを実行したユーザーで、全データベースに接続します。
レプリケーションテーブルのデータの複製
initdbを実行したユーザーで、レプリケーションテーブルが存在するデータベースに接続します。
各データノードのすべてのサーバがプライマリサーバにもスタンバイサーバにもなることができるので、各データノードのすべてのサーバのアドレスについて、エントリを追加してください。
例)
# TYPE DATABASE USER ADDRESS METHOD host all initdbのユーザー データノードのアドレス1 認証方式 host all initdbのユーザー データノードのアドレス2 認証方式 ...
注意
上記の場合、initdbを実行したユーザーが使用されるため、スーパーユーザーのロールを削除しないでください。
postgresql.confの設定
“Connection Manager 利用ガイド”の“postgresql.confの設定”を参照し、watchdogプロセスのための設定を行ってください。
また、以下のパラメータの設定を追加してください。リゾルバランチャープロセス、リゾルバワーカープロセスの詳細に関しては、“4.4.3 シャーディングを使ったトランザクション制御”を参照してください。
パラメータ | 設定値 | 説明 |
---|---|---|
max_worker_processes | スケールアウトで使用するワーカープロセスの数を加算 | スケールアウトで使用するワーカープロセスは下記です。 リゾルバランチャープロセス:インスタンスで1つ起動されます。 リゾルバワーカープロセス:最大でpostgres_scaleout_fdw.max_resolver_workersで指定したプロセスが起動されます。 レプリケーションスロットの同期プロセス:fetch_slotsを有効にした場合、インスタンスで1つ起動されます。 |
log_line_prefix | 例) | 中央管理ノードのログとデータノードのログを照合するため指定します。 “postgres_scaleout_fdw.application_name"の説明と合わせて参照してください。 |
shared_preload_libraries | postgres_scaleout_fdwを追加 | リゾルバプロセスを起動するために、postgres_scaleout_fdwを追加で指定してください。 |
postgres_scaleout_fdw.application_name | 例) | postgres_scaleout_fdwがデータノードへの接続を確立する際に利用する、application_nameの値を設定します。中央管理ノードのログとデータノードのログを照合するために使用します。中央管理ノード上のlog_line_prefixに%p、postgres_scaleout_fdw.application_nameに%pを指定し、データノード上のlog_line_prefixに%aを指定することで、データノードのログのapplication_nameの一部に中央管理ノード上のプロセス識別子が表示できるため、データノード上のログが、中央管理ノード上のどのプロセスによるログなのかが識別できます。 |
postgres_scaleout_fdw.health_check_interval | 例) | postgres_scaleout_fdwが確立したデータノードへの接続の生死監視を行う間隔を設定します。接続の切断を検知すると、実行中のトランザクションはアボートされます。 |
postgres_scaleout_fdw.max_resolver_workers | リゾルバワーカーの最大数 | リゾルバワーカーの最大数を指定します。リゾルバワーカーは接続可能なデータベースの数だけ起動されます。デフォルトではtemplate0は接続可能でないためリゾルバワーカーは起動されませんが、template1は接続可能であるためリゾルバワーカーは起動されます。このパラメータはサーバの起動時のみ設定可能であるため、将来使用する予定のデータベース数も考慮して設定してください。 |
postgres_scaleout_fdw.resolver_time_interval | 例) | リゾルバランチャープロセスがデータベースをチェックし、必要に応じてリゾルバワーカープロセスを起動するまでの待機時間、およびリゾルバワーカープロセスが接続されたデータベース上でトランザクションの解決とバキューム機能を実行するまでの待機時間を指定します。 |
cluster_name | 中央管理ノードであることが識別できるようにクラスタ名を指定 | ここで指定したcluster_nameは、二相コミットのトランザクション識別子の一部として使用されます。そのため、データノードにインダウトトランザクションがあるときには、cluster_nameは変更しないでください。 |
wal_level | logical | レプリケーションテーブルでは論理レプリケーションを使用するため、logicalを指定します。 |
max_replication_slots | レプリケーションテーブルを利用する際に必要となるレプリケーションスロット数を加算 | 以下の計算式で算出された値を、設定値に加算してください。 |
max_wal_senders | max_replication_slotsの分だけ加算 | (max_replication_slots+同時に接続するストリーミングレプリケーションのスタンバイサーバ数)より大きい値を設定する必要があります。fetch_slotsを有効にした場合、追加で1つのWAL senderプロセスが起動するので、1を加算してください。 |
fetch_slots | 例) | 中央管理ノードのスタンバイサーバが、プライマリサーバに作成されている論理レプリケーションスロットの情報取得するために指定します。有効にした場合、スタンバイサーバは定期的にレプリケーションスロットの情報を取得し、中央管理ノードのスタンバイサーバが昇格したときに、旧プライマリサーバに作成してある論理レプリケーションスロットと同様のものを新しいプライマリサーバに作成します。レプリケーションテーブルを使用する場合、onを指定して機能を有効にしてください。 |
wal_retrieve_retry_interval | 例) | 中央管理ノードのスタンバイサーバが、WALデータを受信できない場合に待機する時間を指定します。fetch_slotsを有効にした場合、スタンバイサーバは、このパラメータに指定した間隔で、論理レプリケーションスロットの情報をプライマリサーバから取得します。 |
SSL接続の設定
SSLを使用した通信データの暗号化を行う場合、“3.8 スケールアウト環境におけるSSL(Secure Sockets Layer)による安全な通信の構成”を参考に設定してください。また、インスタンスの作成時に、SSLの設定を行うと、ユーザーマッピングにSSL証明書の格納先が設定されます。詳細は、“5.5.1 ユーザーマッピングの自動作成”を参照してください。
“クラスタ運用ガイド(データベース多重化編)”の“データベースサーバのユーザー出口の作成”を参照し、中央管理ノードのプライマリサーバのユーザー出口を作成してください。
“クラスタ運用ガイド(データベース多重化編)”の“プライマリサーバのMirroring Controllerの起動”を参照し、中央管理ノードのプライマリサーバのMirroring Controllerを起動してください。
“Connection Manager 利用ガイド”の“watchdog拡張の導入”を参照し、中央管理ノードのプライマリサーバにwatchdog拡張を導入してください。