[pgpool-general-jp: 1747] Re: pgpool2と接続したレプリケーション構成でverify_backend_node_statusから出力されるプライマリからスタンバイへの接続エラーメッセージ出力を抑止したい

Tatsuo Ishii ishii @ postgresql.org
2024年 10月 9日 (水) 09:12:41 JST


友藤様

お世話になっています。石井です。

こちらですが、
> ■スタンバイサーバ(STANHOST#1)
>    listen_addresses = '127.0.0.1,444.444.444.444,666.666.666.666'

ではなくて、

    listen_addresses = '127.0.0.1,555.555.555.555,777.777.777.777'

である、という理解で合っていますでしょうか?

> 石井様
> 
> 友藤です。
> お世話になっております。
> 
> お客様よりホスト名とIPアドレスの関係の情報を入手できましたので、プライマリサーバのlisten_addressesおよび
> スタンバイサーバのprimary_conninfoの設定値につきまして、これまでの回答分を一旦白紙に戻して
> 再回答させて頂きます。
> 
> そもそも石井様に疑念を生じさせてしまっていた発端箇所が判りました。
> 以下に記述の、過去の私の回答に誤りがあったためとなります。混乱させて申し訳ございません。
> (回答時点ではIPアドレスとホスト名の関係を調査資料内から類推しながら行っており、そこに誤りがございました。)
> 
> 【過去の回答誤り箇所】
>> > > ところで念の為に教えていただきたいのですが、primary PostgreSQLの
>> > > listen_addressesには、以下のように複数のIPが設定されている状態でしょうか?
>> > >
>> > > listen_addresses = '${APP_HOST_DB#0},${REP_HOST_DB#0}'
>>
>> 想定されておられます通り、primary PostgreSQLのlisten_addressesには、
>> 次のように複数のIPが設定されておりました。
>  【誤】
>>  listen_addresses = '127.0.0.1, プライマリサーバ側のIPアドレス,スタンバイサーバ側のIPアドレス' 
>                                          ↓↓↓
>  【正】                                      ↓↓↓★訂正箇所★
>   listen_addresses = '127.0.0.1, プライマリサーバ側の業務用IPアドレス,プライマリサーバ側のレプリケーション用IPアドレス' 
> 
> 上記の誤り箇所を含め、プライマリサーバおよびスタンバイサーバのlisten_addressesとprimary_conninfoの設定値に
> つきまして再回答させて頂きます。
> 
> 前提)お客様環境のホスト名とIPアドレスの関係(便宜上、お客様のホスト名/IPアドレスを変更して記述しています)
> 
>               │(1) PGPOOLで使用する(ヘル  │(2) 業務通信で使用する        │(3) ストリーミングレプリケー
>               │    スチェックで使用する)  │    ホスト名とIPアドレス      │    ションで使用するホスト名
> 代表ホスト名  │    ホスト名とIPアドレス    │                              │    とIPアドレス         
> ───────┼──────────────┼───────────────┼──────────────────
> PRIMHOST#0    │PGPCHOST#0:111.111.111.111 │APP_HOST_DB#0:444.444.444.444│REP_HOST_DB#0:666.666.666.666 ★
> STANHOST#1    │PGPCHOST#1:222.222.222.222 │APP_HOST_DB#1:555.555.555.555│REP_HOST_DB#1:777.777.777.777
> PGPHOST#2     │PGPCHOST#2:333.333.333.333 │                              │
> 
> ■プライマリサーバ(PRIMHOST#0)                    ↓★
>    listen_addresses = '127.0.0.1,444.444.444.444,666.666.666.666'
>    ⇒ listen_addresses = '${APP_HOST_DB#0},${REP_HOST_DB#0}'に合致
> 
> ■スタンバイサーバ(STANHOST#1)
>    listen_addresses = '127.0.0.1,444.444.444.444,666.666.666.666'
>    primary_conninfo = 'host=REP_HOST_DB#0’ ★
>     ⇒ プライマリサーバのlisten_addressesに指定された${REP_HOST_DB#0}に合致
> 
> ■pgpool.conf
>  backend_hostname0 = 'APP_HOST_DB#0'
>  backend_hostname1 = 'APP_HOST_DB#1'
>     ⇒ スタンバイサーバのprimary_conninfo に指定されたホスト名と、backend_hostname0 のホスト名は異なっている →今回のメッセージ出力
> 
> 以上、どうぞよろしくお願い致します。
> 
>> -----Original Message-----
>> From: Tomofuji, Masao/友藤 正雄 <tomofu @ fujitsu.com>
>> Sent: Monday, October 7, 2024 11:14 AM
>> To: 'Tatsuo Ishii' <ishii @ postgresql.org>; pgpool-general-jp @ pgpool.net
>> Cc: FJ-sym-open-3rd <fj-sym-open-3rd @ dl.jp.fujitsu.com>
>> Subject: RE: [pgpool-general-jp: 1736] Re: pgpool2と接続したレプリケーション構成でverify_backend_node_statusから
>> 出力されるプライマリからスタンバイへの接続エラーメッセージ出力を抑止したい
>> 
>> 石井様
>> 
>> 友藤です。
>> お世話になっております。
>> 
>> > primary_coninfoの"host="のIPアドレスをプライマリサーバがlistenしていな
>> > ければ、スタンバイの wal_receiver プロセスがプライマリサーバに接続でき
>> > ないと思うのですが...
>> 
>> ご指摘ありがとうございます。
>> 矛盾しているように見えている状況でございますので、先方へ各システムのhostsファイルの入手を依頼しております。
>> 入手次第、確認致しますので今しばらくお待ちください。
>> (現時点の調査情報は、IPアドレスの設定/情報出力とホスト名の設定/情報出力が入り混じっている状況でして、
>>  そのマッピングを他の調査資料から確定させることが難しくなったため)
>> 
>> 以上、どうぞよろしくお願い致します。
>> 
>> > -----Original Message-----
>> > From: Tatsuo Ishii <ishii @ postgresql.org>
>> > Sent: Friday, October 4, 2024 10:26 PM
>> > To: Tomofuji, Masao/友藤 正雄 <tomofu @ fujitsu.com>
>> > Cc: pgpool-general-jp @ pgpool.net
>> > Subject: Re: [pgpool-general-jp: 1736] Re:
>> > pgpool2と接続したレプリケーション構成でverify_backend_node_statusから
>> > 出力されるプライマリからスタンバイへの接続エラーメッセージ出力を抑止したい
>> >
>> > 友藤様
>> >
>> > 早速の返信ありがとうございます。
>> >
>> > > 石井様
>> > >
>> > > 友藤です。
>> > > お世話になっております。
>> > >
>> > > ご返信ありがとうございます。
>> > >
>> > >> スタンバイサーバのprimary_coninfoの"host="に書いてあるIPは、プライマリ
>> > >> サーバのlisten_addressesに書いてある「スタンバイサーバ側のIPアドレス」
>> > >> と同一でしょうか?
>> > >
>> > > 現時点におきまして、スタンバイサーバのprimary_coninfoの"host="のIPアドレスと、
>> > > ライマリサーバのlisten_addressesに書いてある「スタンバイサーバ側のIPアドレス」は、
>> > > 異なっているように見えております。
>> >
>> > primary_coninfoの"host="のIPアドレスをプライマリサーバがlistenしていな
>> > ければ、スタンバイの wal_receiver プロセスがプライマリサーバに接続でき
>> > ないと思うのですが...
>> >
>> > > しかしながら、調査資料にhostsファイルがなく、他の調査資料から推定した状況であること、
>> > > および、postgresql.confではprimary_coninfoを省略し、実行時に他の定義情報より上書きする
>> > > 仕組みとなっていることより、確認を継続致しますので今しばらくお待ちいただけますでしょうか。
>> > >
>> > > 以上、どうぞよろしくお願い致します。
>> >
>> > お手数かけますが、よろしくお願いします。
>> >
>> > >> -----Original Message-----
>> > >> From: Tatsuo Ishii <ishii @ postgresql.org>
>> > >> Sent: Friday, October 4, 2024 7:48 PM
>> > >> To: Tomofuji, Masao/友藤 正雄 <tomofu @ fujitsu.com>
>> > >> Cc: pgpool-general-jp @ pgpool.net
>> > >> Subject: Re: [pgpool-general-jp: 1736] Re:
>> > >> pgpool2と接続したレプリケーション構成でverify_backend_node_statusから
>> > >> 出力されるプライマリからスタンバイへの接続エラーメッセージ出力を抑止したい
>> > >>
>> > >> 友藤様
>> > >>
>> > >> こちらこそお世話になっています。石井です。
>> > >>
>> > >> ちょっとわからなくなってきたので更に念の為に確認させていただきたいのですが、
>> > >>
>> > >> スタンバイサーバのprimary_coninfoの"host="に書いてあるIPは、プライマリ
>> > >> サーバのlisten_addressesに書いてある「スタンバイサーバ側のIPアドレス」
>> > >> と同一でしょうか?
>> > >>
>> > >> もしその答えがyesだとすると、スタンバイサーバ側のpostgresql.confの
>> > >> listen_addressesはどういう状態になっているのでしょうか?プライマリサー
>> > >> バのlisten_addressesとは同じに書けないと思いますが...
>> > >>
>> > >> > 石井様
>> > >> >
>> > >> > 富士通)友藤です。
>> > >> > お世話になっております。
>> > >> >
>> > >> > 先のlisten_addressesのお客様の設定値に関しまして補足させて頂きます。
>> > >> >
>> > >> >>  listen_addresses = '127.0.0.1, プライマリサーバ側のIPアドレス,スタンバイサーバ側のIPアドレス'
>> > >> >
>> > >> > 次のように、プライマリサーバ側のIPアドレスとスタンバイサーバ側のIPアドレスでは、別ネットワークの
>> > >> > IPアドレスが設定されております。'
>> > >> >   listen_addresses = '127.0.0.1,〇〇〇.□□□. □□□, 〇〇〇.■■■.■■■.〇〇'
>> > >> >    〇  :プライマリサーバ側のIPアドレスとスタンバイサーバ側のIPアドレスで同一値の部分
>> > >> >    □/■:プライマリサーバ側のIPアドレスとスタンバイサーバ側のIPアドレスで異なる値の部分
>> > >> >
>> > >> > 以上、どうぞよろしくお願い致します。
>> > >> >
>> > >> >> -----Original Message-----
>> > >> >> From: Tomofuji, Masao/友藤 正雄
>> > >> >> Sent: Wednesday, October 2, 2024 9:46 PM
>> > >> >> To: 'Tatsuo Ishii' <ishii @ postgresql.org>;
>> > >> >> 'pgpool-general-jp @ pgpool.net' <pgpool-general-jp @ pgpool.net>
>> > >> >> Subject: RE: [pgpool-general-jp: 1736] Re:
>> > >> >> pgpool2と接続したレプリケーション構成でverify_backend_node_statusから
>> > >> >> 出力されるプライマリからスタンバイへの接続エラーメッセージ出力を抑止したい
>> > >> >>
>> > >> >> 石井様
>> > >> >>
>> > >> >> 富士通)友藤と申します。
>> > >> >> この度はご返信いただきありがとうございます。
>> > >> >>
>> > >> >> 文末にて、ご確認依頼事項に対しまして回答させて頂きます。
>> > >> >>
>> > >> >> > -----Original Message-----
>> > >> >> > From: Tomofuji, Masao/友藤 正雄
>> > >> >> > Sent: Tuesday, October 1, 2024 5:55 PM
>> > >> >> > To: 'Tatsuo Ishii' <ishii @ postgresql.org>;
>> > >> >> > pgpool-general-jp @ pgpool.net
>> > >> >> > Subject: RE: [pgpool-general-jp: 1736] Re:
>> > >> >> > pgpool2と接続したレプリケーション構成でverify_backend_node_statusから
>> > >> >> > 出力されるプライマリからスタンバイへの接続エラーメッセージ出力を抑止したい
>> > >> >> >
>> > >> >> > > -----Original Message-----
>> > >> >> > > From: Tatsuo Ishii <ishii @ postgresql.org>
>> > >> >> > > Sent: Tuesday, October 1, 2024 5:47 PM
>> > >> >> > > To: pgpool-general-jp @ pgpool.net
>> > >> >> > > Cc: Tomofuji, Masao/友藤 正雄 <tomofu @ fujitsu.com>
>> > >> >> > > Subject: Re: [pgpool-general-jp: 1736] Re:
>> > >> >> > > pgpool2と接続したレプリケーション構成でverify_backend_node_statusから
>> > >> >> > > 出力されるプライマリからスタンバイへの接続エラーメッセージ出力を抑止したい
>> > >> >> > >
>> > >> >> > > >> 以下の構成にした場合に発生する事象について、対処方法をご相談させてください。
>> > >> >> > > >>
>> > >> >> > > >> [事象]
>> > >> >> > > >> * プライマリとスタンバイ間で、ストリーミングレプリケーションが正しく
>> > >> >> > > >>   接続されているにもかかわらず、以下のメッセージが出力されます。
>> > >> >> > > >>    LOG:  verify_backend_node_status: primary XXX does not connect to standby XXX
>> > >> >> > > >>    LOG:  verify_backend_node_status: primary XXX owns
>> > >> >> > > >> only XXX standbys out of XXX
>> > >> >> > > >>
>> > >> >> > > >> [事象が発生する構成]
>> > >> >> > > >> * pgpoolサーバーが1台、バックエンドノードが2台(プライマリ1台、
>> > >> >> > > >>   スタンバイ1台)の構成で、バックエンドノードへの接続とレプリケーションの
>> > >> >> > > >>   接続で利用するネットワークが異なる場合に発生します。
>> > >> >> > > >>   具体的には、以下のようにIPアドレスを設定した場合に発生します。
>> > >> >> > > >>   [pgpool Server: pgpool.conf]
>> > >> >> > > >>   * backend_hostname0 = '${APP_HOST_DB#0}' # DB#0はプライマリ
>> > >> >> > > >>   * backend_hostname1 = '${APP_HOST_DB#1}' # DB#1はスタンバイ
>> > >> >> > > >>
>> > >> >> > > >>   [DB#1: postgresql.conf]
>> > >> >> > > >>   * primary_conninfo = '... host=${REP_HOST_DB#0} ...'   # backend_hostname0 と異なるホスト名
>> > >> >> > > >>
>> > >> >> > > >> [調査して判明したこと]
>> > >> >> > > >> * 過去のメーリスでは、backend_hostnameとprimary_conninfoで
>> > >> >> > > >>   異なるホスト名を指定した場合には、上記のエラーが発生するとコメントがありました。
>> > >> >> > > >>   * [pgpool-hackers: 3943] Re: verify_backend_node_status
>> > >> >> > > >> does not recognise that the primary is connected to
>> > >> >> > > standbys
>> > >> >> > > >>
>> > >> >> > > >> https://www.pgpool.net/pipermail/pgpool-hackers/2021-July/003944.
>> > >> >> > > >> ht
>> > >> >> > > >> ml
>> > >> >> > > >>
>> > >> >> > > ============================================================
>> > >> >> > > ==
>> > >> >> > > ===
>> > >> >> > > ===
>> > >> >> > > ==
>> > >> >> > > ===
>> > >> >> > > >>       I think the reason you are seeing these errors is that pgpool tries to
>> > >> >> > > >>       compare backend_hostname2 (dbod-ag-pg03.ch) and backend_port2 (6600)
>> > >> >> > > >>       with host and port (dbod-hac-c02.ch, 6600) in primary_conninfo. In
>> > >> >> > > >>       this case port matches but hostname does not match and Pgpool-II
>> > >> >> > > >>       regards that the standbys do not connect to the primary node,.
>> > >> >> > > >>
>> > >> >> > > >> =========================================================
>> > >> >> > > >> ==
>> > >> >> > > >> ===
>> > >> >> > > >> ===
>> > >> >> > > >> ==
>> > >> >> > > >> ==
>> > >> >> > > >> ====
>> > >> >> > > >>
>> > >> >> > > >> * verify_backend_node_status()のソースコードを確認したところ、
>> > >> >> > > >>   確かにbackend_hostnameとprimary_conninfoのhostの文字列比較を
>> > >> >> > > >>   行っていることを確認しました。
>> > >> >> > > >>   また、このエラーが出力される場合には、デタッチ対象のノードである
>> > >> >> > > >>   フラグを更新できないため、detach_false_primary パラメータの処理が
>> > >> >> > > >>   動作しない影響があるように見えました。
>> > >> >> > > >>
>> > >> >> > > >> [相談事項]
>> > >> >> > > >> (1) verify_backend_node_status()では、バックエンドノードへの接続と
>> > >> >> > > >>     レプリケーション接続でネットワークが異なる場合に対応していないという
>> > >> >> > > >>     認識で合ってますでしょうか。
>> > >> >> > > >
>> > >> >> > > > はい、ご認識の通りです。
>> > >> >> > > >
>> > >> >> > > >> (2) 上記(1)の認識が正しい場合、本事象のメッセージを抑止するために、
>> > >> >> > > >>     detach_false_primaryパラメータを無効化するしかないでしょうか。
>> > >> >> > > >
>> > >> >> > > > はい、そうです。
>> > >> >> > > >
>> > >> >> > > >> [気になっている点]
>> > >> >> > > >> ・今回のエラーが出力される場合には、デタッチ対象のノードである
>> > >> >> > > >>   フラグを更新できないため、detach_false_primary パラメータの処理が
>> > >> >> > > >>   動作しない影響がある、という認識は正しいでしょうか。
>> > >> >> > > >
>> > >> >> > > > primary/standbyそれぞれ1台の構成では、detach_false_primaryが検出できる
>> > >> >> > > > 異常状態は、standbyをオペミスなどで間違って昇格してしまい、primaryが2
>> > >> >> > > > 台、standbyが0台の状況だけです。この場合は、2台のprimaryのうちどちらが
>> > >> >> > > > 正しいprimaryなのかはpgpoolは判定できないため、node 1のprimaryを切り離
>> > >> >> > > > すことになります(決め打ちでnode番号のわかりprimaryを残します)。この一
>> > >> >> > > > 連の動作において、primaryとstandbyの接続性の検証は行われないので、今回
>> > >> >> > > > のエラーは影響しません。
>> > >> >> > >
>> > >> >> > > ところで念の為に教えていただきたいのですが、primary PostgreSQLの
>> > >> >> > > listen_addressesには、以下のように複数のIPが設定されている状態でしょうか?
>> > >> >> > >
>> > >> >> > > listen_addresses = '${APP_HOST_DB#0},${REP_HOST_DB#0}'
>> > >> >> >
>> > >> >> > ご指摘ありがとうございます。
>> > >> >> > 確認を取れ次第、返信させて頂きます。
>> > >> >>
>> > >> >> 想定されておられます通り、primary PostgreSQLのlisten_addressesには、
>> > >> >> 次のように複数のIPが設定されておりました。
>> > >> >>  listen_addresses = '127.0.0.1, プライマリサーバ側のIPアドレス,スタンバイサーバ側のIPアドレス'
>> > >> >>
>> > >> >> 以上、どうぞよろしくお願い致します。
>> > >> >> > > --
>> > >> >> > > Tatsuo Ishii
>> > >> >> > > SRA OSS K.K.
>> > >> >> > > English: http://www.sraoss.co.jp/index_en/
>> > >> >> > > Japanese:http://www.sraoss.co.jp


pgpool-general-jp メーリングリストの案内