ThingWorx 高可用性 > PostgreSQL 高可用性 > PostgreSQL HA のインストールおよび設定
PostgreSQL HA のインストールおよび設定
先に示したダイヤグラムの実装をサポートするガイドラインを以下に示します。これらのガイドラインは PostgreSQL HA 展開を実装する PostgreSQL の管理者およびユーザーを対象としています。
参照用に、 Pgpool-II を使用した PostgreSQL HA の展開例には、このソリューションの実装に使用されるダウンロード、コマンドラインシーケンス、スクリプトの例が示されています。
参照ドキュメント
PostgreSQL をインストールする前に、必要条件となるソフトウェアのドキュメンテーションを含め、インストールと設定に関するすべてのドキュメントを読んで理解します。セキュリティに関する推奨事項を含め、適切な設定について理解し、適用することが重要です。
以下のリンクでは、ストリーミングレプリケーションと Pgpool-II によるノード管理を使用する PostgreSQL HA のインストールと設定に関する有益な情報が提供されています。
PostgreSQL のインストールおよび PostgreSQL での新規ユーザーロールの作成
PostgreSQL をインストールして設定する手順については、Installing ThingWorx ガイドで説明しています。展開するバージョンの ThingWorx のインストールガイドを参照してください。3 つの PostgreSQL ノードすべてで同じインストールと設定のタスクを実行しなければなりません。
PostgreSQL データベーススクリプトの設定および実行
PostgreSQL 内にデータベースを構築する手順については、Installing ThingWorx ガイドで説明しています。展開するバージョンの ThingWorx のインストールガイドを参照してください。3 つの PostgreSQL ノードすべてで同じインストールと設定のタスクを実行する必要があります。
モデル/データプロバイダスキーマスクリプトの設定および実行
PostgreSQL 内に ThingWorx スキーマを構築する手順については、Installing ThingWorx ガイドで説明しています。展開するバージョンの ThingWorx のインストールガイドを参照してください。3 つの PostgreSQL ノードすべてで同じ設定タスクを実行する必要があります。
すべての PostgreSQL ノードへのレプリケーションユーザーの作成
レプリケーションタスクを管理する PostgreSQL ユーザーをすべてのノードに作成します。同じユーザー名とパスワードを使用しなければなりません。
すべての PostgreSQL ノードへのレプリケーションパラメータの追加
以下の表に、PostgreSQL のレプリケーションサービスを制御する PostgreSQL パラメータを示します。
* 
コンフィギュレーション列に示す値は、参照アーキテクチャでの展開例を反映していますが、使用する環境に合わせて修正できます。次の表の多くの設定には、使用する環境に合わせて適切なコンフィギュレーションの値を決定するために役立つリンクが提示されています。
設定
コンフィギュレーション
説明
listen_addresses
‘*’
すべてのネットワークインタフェースで受信します。状況によっては、複数のネットワークインタフェースがある場合、これを特定のネットワークインタフェースに制限することをお勧めします。
Port
5432
これがデフォルトのポート番号です。
max_connections
150
PostgreSQL でのデフォルトは 100 です。ThingWorx でのデフォルト設定も 100 です (maxpoolsize)。データベースで予想される同時接続の総数に基づいてこの数値を増やします。これは必ず、ThingWorx の platform-settings.json ファイルでの maxpoolsize 設定の数値より大きくなければなりません。
shared_buffers
1024 MB
オプションのパフォーマンスチューニング。データベースサーバーが共有のメモリバッファに使用するメモリの量を設定します。マシン上で使用可能なメモリの 4 分の 1 に設定することをお勧めします。 「Resource Consumption」 > 「Memory」を参照してください。
work_mem
32 MB
オプションのパフォーマンスチューニング。一時的なディスクファイルに書き込む前に内部の並べ替え操作とハッシュテーブルによって使用されるメモリの量を指定します。 「Resource Consumption」 > 「Memory」を参照してください。work_mem まで下にスクロールします。
maintenance_work_mem
512 MB
オプションのパフォーマンスチューニング。メンテナンス操作によって使用されるメモリの上限を指定します。 「Resource Consumption」 > 「Memory」を参照してください。このオプションは work_mem のすぐ後ろに表示されます。
wal_level
enum
オプションのパフォーマンスチューニング。メンテナンス操作によって使用されるメモリの上限を指定します。 「Write Ahead Log」 > 「Settings」を参照してください。
synchronous_commit
on
「Write Ahead Log」 > 「Settings」に移動し、synchronous_commit (enum) まで下にスクロールします。
archive_mode
on
archive_command
'cd .'
「Write Ahead Log」 > 「Archiving」に移動し、archive_command (string) まで下にスクロールします。
max_wal_size
10
「Write Ahead Log」に移動し、ARCHIVING リンクをクリックします。max_wal_size (integer) まで上にスクロールします。WAL コンフィギュレーションの詳細については、PostgreSQL 10 のドキュメントの 「WAL Configuration」を参照してください。
synchronous_standby_names
node1, node2 または node2, node0 または node0, node1
コンマ区切りリストとして、ほかのノードの "application_name" をその recovery.conf ファイルで指定されているとおりに追加します。 「Write Ahead Log」の「Settings」セクションにある synchronous_commit を参照してください。
hot_standby
true/false
このモードについては、 「Hot Standby」を参照してください。
fsync
on
「Write Ahead Log」 > 「Settings」に移動し、fsync まで下にスクロールします。
チェックポイントの設定
チェックポイントの設定については、 「Checkpoints」を参照してください。
start_replication および retargetMaster スクリプトの確立
各ノードに、レプリケーションサービスをアクティブ化して PostgreSQL ノードをシステムと同期させるスクリプトを確立します。
さらに、各ノードに、recovery.conf ファイルを作成および実装可能なスクリプトを確立します。recovery.conf ファイルには、発生した失敗に応じてどのノードをマスターにしてどのノードをスタンバイにするかを調整するために必要な変更が含まれている必要があります。
すべての PostgreSQL ノードへの外部接続パラメータの調整
pg_hba.conf ファイルでパラメータを修正して、ユーザーおよび ThingWorx データが保管されるデータベースに、この IP からアクセスできるようにします。この IP からデータベースに接続します。
* 
Pgpool-II から接続する場合、認証アクセスが ここに記載されている Pgpool-II のドキュメンテーション (md5 または trust) に準拠していることを確認します。
pg_hba.conf ファイルの詳細については、 PostgreSQL 10 ドキュメントの「The pg_hba.conf File」を参照してください。
レプリケーションを開始するための PostgreSQL サービスの再開始
どのノードがマスターで (最初に開始)、どのノードがプライマリスタンバイノードで (2 番目に開始)、どのノードが 3 番目 (最後に開始) であるかを制御するため、すべての PostgreSQL ノードを順番に再開始します。
マスターノードでは、PostgreSQL サービスを開始します。
プライマリスタンバイノードでは、マスターノードと同期させるために最初に start_replication スクリプトを実行します。次に、PostgreSQL サービスを開始します。
2 つ目のスタンバイノードでは、プライマリスタンバイノードと同期させるために最初に start_replication スクリプトを実行します。次に、PostgreSQL サービスを開始します。
Pgpool-II ノードのインストール
Pgpool をインストールする前に、必要条件となるソフトウェアのドキュメンテーションを含め、インストールに関するすべてのドキュメントを読んで理解します。セキュリティに関する推奨事項を含め、適切な設定について理解し、適用することが重要です。
Pgpool-II に関する情報を以下からダウンロードできます。
Pgpool-II のインストール手順については、オペレーティングシステムのドキュメンテーションを参照してください。Pgpool-II サービスを実行するすべてのノードに同じバージョンの Pgpool-II がインストールされている必要があります。
Pgpool-II ノードの設定
以下の表に、Pgpool-II のインストール環境で修正するパラメータを示します。Pgpool-II のすべてのパラメータは pgpool.conf ファイルで管理されます。これらのプロパティと値をすべての Pgpool-II ノードに追加する必要があります。
設定
説明
listen_addresses
‘*’
同じサーバーか別のサーバーかにかかわらず、ThingWorx アプリケーションのモデルプロバイダが Pgpool-II に接続可能な値を選択します。
port
5432
クライアント接続を受信する TCP ポート
pcp_listen_address
*
Port Control Protocol (PCP) 接続の IP/ホストフィルタ (* はすべて許可)
pcp_port
9898
PCP 接続を受信する TCP ポート
backend_hostname
backend_port
backend_weight
backend_data_directory
backend_flag
<ip of backend#>
<バックエンドのポート番号>
1
/var/lib/postgresql/10.x/main
ALLOW_TO_FAILOVER
3 つのノード (マスターおよび 2 つのスタンバイ) それぞれに、これらのバックエンドコンフィギュレーション値を設定します。たとえば、backend_hostname0 はマスター、backend_hostname1 はスタンバイなどです。詳細については、 PostgreSQL のオンラインドキュメンテーションを参照してください。
enable_pool_hba
on
pool_hba.conf を有効にします
master_slave_mode
on
マスター/スタンバイレプリケーションを使用していることを Postgres に通知します。
load_balance_mode
off
* 
ThingWorx ではロードバランシングは推奨されていません。
master_slave_sub_mode
stream
既成の PostgreSQL ストリーミングレプリケーションを使用するように Pgpool-II に通知します。
replication_mode
off
Pgpool-II のレプリケーションを使用しないで、代わりに既成の PostgreSQL ストリーミングレプリケーションを使用します。
sr_check_period
10
ストリーミングレプリケーションの遅延 (秒)
sr_check_user
replicator
ストリーミングレプリケーションのユーザー
sr_check_password
replicator
ストリーミングレプリケーションのパスワード
sr_check_database
postgres
ストリーミングレプリケーションのデータベース
health_check_user
postgres
フェールオーバー正常性チェックのユーザー
health_check_password
postgres
フェールオーバー正常性チェックのパスワード
health_check_database
postgres
フェールオーバー正常性チェックのデータベース
failover_command
/etc/pgpool2/failover.sh %d %h %D %m %H %R %M %P
この設定の詳細については、「failover_command」のセクションを参照してください。
さらに、付録 C で以下のサンプルスクリプトを参照してください。
failover.sh
retargetMaster_001.sh
retargetMaster_002.sh
retargetMaster_003.sh
num_init_children
max_pool
max_child_connections
superuser_reserved_connections
パフォーマンスチューニングのパラメータ。これらの設定は Pgpool-II の接続プーリング機能に関連します。ボリュームトラフィックの最大スループットのニーズを満たす十分な接続を起動時に用意するとともに、PostgreSQL DB ノードの最大接続の設定を超えないようにしてください。推奨値および値の計算式については、マニュアル (上記のリンクを参照) の「プール」セクションを参照してください。
* 
num_init_childrenmodelproviderconfig.json 内の maxpoolsize より大きく、postgresql.conf 内の max_connectionsnum_init_children の設定より大きくなるようにします。
PostgreSQL フェールオーバースクリプトの設定
失敗検出時に Pgpool-II サービスが呼び出すフェールオーバースクリプトを各 Pgpool-II ノード内で確立します。このスクリプトには、PostgreSQL ノードで失敗が発生した場合に実行されるロジックとタスクが含まれている必要があります。
PCP コンフィギュレーションの更新
すべての ThingWorx サーバーを認識するように pool_hba.conf ファイルを更新します。
PostgreSQL に対する ThingWorx リクエストでは、Pgpool-II は ThingWorx 資格証明を使用して PostgreSQL ノードに接続することで、確立されているアクセス権限と制約を維持します。pool_hba.conf ファイルでは pg_hba.conf と同じフォーマット、認証方法、および認証オプション (md5、trust など) が使用されます。
pool_hba.conf の設定の詳細については、以下を参照してください。
クライアント認証の更新
すべての ThingWorx サーバーを認識するように pool_hba.conf ファイルを更新します。
PostgreSQL に対する ThingWorx リクエストでは、Pgpool-II は ThingWorx 資格証明を使用して PostgreSQL ノードに接続することで、確立されているアクセス権限と制約を維持します。pool_hba.conf ファイルでは pg_hba.conf と同じフォーマット、認証方法、および認証オプション (md5、trust など) が使用されます。
pool_hba.conf の設定の詳細については、以下を参照してください。
Pgpool-II のフェールオーバーの設定
高可用性構成では、Pgpool-II はアクティブ/パッシブオペレーションで動作し、通常は 1 つのアクティブな Pgpool-II ノードと 1 つのスタンバイノードで構成されます。Pgpool-II はノードの正常性を監視するウォッチドッグプロセスを提供し、プライマリノードが失敗するとスタンバイノードをアクティブ化します。
ウォッチドッグの詳細および設定については、Pgpool のドキュメンテーション ( http://www.pgpool.net/docs/latest/en/html/example-watchdog.html) を参照してください。
以下の表に、Pgpool-II 内でウォッチドッグを設定する際に考慮する必要がある設定と値を示します。これらの設定と値を各 Pgpool-II ノードの pgpool.conf ファイルに追加する必要があります。
設定
説明
use_watchdog
on
Pgpool-II 内でのウォッチドッグをオンにします
wd_hostname
'{IP address of this Pgpool-II node}'
このウォッチドッグのホスト名または IP アドレス
wd_port
9000
このウォッチドッグのポート番号
delegate_IP
'{Virtual IP address to access PostgreSQL}'
(Pgpool-II を経由して) クライアントが PostgreSQL にアクセスする際に使用する仮想 IP アドレス
ifconfig_path
/etc/pgpool2
if_up_cmd および if_down_cmd コマンドまたはスクリプトが含まれているディレクトリの絶対パス。
if_up_cmd
'ifup.sh $_IP_$ <eni id of Pgpool node>'
Pgpool-II が delegate_IP アドレスとの仮想 IP インタフェースを起動するときに発行されるコマンド。Pgpool-II ノードの eni ID は、EC2 管理コンソールにログインして自分の Pgpool-II インスタンスに移動することによって取得できます。コンソール内の説明で Network interfaces エントリを見つけ、「eth0」をクリックしてインタフェース ID を特定します。これを $<eni id of Pgpool node> に使用します。
if_down_cmd
'ifdown.sh $_IP_$ <eni id of Pgpool node>'
Pgpool-II が delegate_IP アドレスとの仮想 IP インタフェースを停止するときに発行されるコマンド。Pgpool-II ノードの eni ID を取得するには、if_up_cmd を参照してください。
arping_path
/usr/bin
インストール iputils-arping パッケージのパス
arping_cmd
arping -U $_IP_$ -w 1
IP の検証に使用される arping コマンド。
heartbeat_destination0
'{IP address of the other Pgpool-II node}'
ハートビートチェックが行われる IP アドレス。other_pgpool_hostname0 設定の値
heartbeat_destination_port0
9694
デフォルト値を使用します。
heartbeat_device
'eth0'
ハートビート通信用 IP アドレスの NIC デバイス
other_pgpool_hostname0
'{IP address of the other Pgpool-II node}'
その他の Pgpool-II サーバーインスタンスの IP アドレス
other_pgpool_port0
5432
その他の Pgpool-II ノードが受信するポート
other_wd_port0
9000
その他の Pgpool-II ウォッチドッグ機能が受信するポート