[pgpool-general-jp: 1696] Re: pgpool-iiの3.7系のフェイルオーバーについて

nakamura nakamura @ ichi-holdings.com
2022年 4月 11日 (月) 10:59:24 JST


彭様

中村です

確認いただき、ありがとうございます


ALWAYS_MASTERの部分、failoverの設定が完了する前
masterを変に切り替えないようにと指定していたものをすっかり失念してしまっておりました…

手元環境でも切り替えの確認が取れました

お騒がせいたしました…

On 2022/04/09 21:11, Bo Peng wrote:
> 中村さん
>
> お世話になっております。彭です。
>
> 情報を提供頂き、ありがとうございます。
>
> failover.sh の後、follow_master.sh 直前のログには、
> 「find_primary_node: ALWAYS_MASTER flag found. Returns node id: 0」
> が出力されています。
>
> === ログ抜粋 ===
> 2022-04-05 23:30:34: pid 55704: LOG:  find_primary_node_repeatedly: waiting for finding a primary node
> 2022-04-05 23:30:34: pid 55704: DEBUG:  find_primary_node: ALWAYS_MASTER flag found. Returns node id: 0
> 2022-04-05 23:30:34: pid 55704: LOG:  starting follow degeneration. shutdown host 172.20.8.8(5432)
> 2022-04-05 23:30:34: pid 55704: LOG:  starting follow degeneration. shutdown host 172.20.8.9(5432)
> 2022-04-05 23:30:34: pid 55704: WARNING:  All the DB nodes are in down status and skip writing status file.
> 2022-04-05 23:30:34: pid 55704: LOG:  failover: 2 follow backends have been degenerated
> 2022-04-05 23:30:34: pid 55704: LOG:  failover: set new primary node: 0
> 2022-04-05 23:30:34: pid 85021: LOG:  start triggering follow command.
> failover done. shutdown host 172.20.8.7(5432)2022-04-05 23:30:34: pid 85021: LOG:  execute command: /etc/pgpool/follow_master.sh 0 172.20.8.7 5432 /var/postgresql/data/ 0 172.20.8.7 0 0 "" ""
> =================
>
> pgpool.conf を再度確認させて頂きましたが、
> ノード0 (旧プライマリ)に「ALLOW_TO_FAILOVER」が設定されております。
>
>    backend_flag0 = 'ALLOW_TO_FAILOVER|ALWAYS_MASTER'
>
> 「ALWAYS_MASTER」の設定により、フェイルオーバー後にも、
> ダウンしていた DB がプライマリとして渡されました。
>
> 「ALWAYS_MASTER」は、Amazon Aurora や kubernetes などの環境で、
> プライマリノードを固定したい場合に利用するオプションとなります。
>
> フェイルオーバーに伴い、プライマリノードが変わる場合には、
> この設定は不要です。
>
> 以下のように設定変更頂くと、本事象が解消されると思います。
>
>   backend_flag0 = 'ALLOW_TO_FAILOVER|ALWAYS_MASTER'
> =>
>   backend_flag0 = 'ALLOW_TO_FAILOVER'
>
> また、pcp_promote_node は、実際に PostgreSQL のスタンバイサーバを昇格させるわけではないので、
> ご注意ください。単に Pgpool-II の内部ステータスを変更するだけです。
> backend_flag0 の設定変更によって、本事象が解消されると思いますので、
> failover.sh にて pcp_promote_node の実行は不要です。
>
> 以上、よろしくお願いいたします。
>
> On Thu, 7 Apr 2022 14:42:38 +0900
> nakamura <nakamura @ ichi-holdings.com> wrote:
>
>> 中村です
>>
>> お世話になっております
>>
>> 彭様
>>
>> 返信いただき、ありがとうございます。
>>
>>
>>> 設定ファイルより、Pgpool-II は2台構成と認識しています。
>>> ap-001、ap-002 のいずれかが 172.20.8.10 でしょうか。
>>
>> 現在、ap-001のpgpool一台のみを起動させた状態での仮想環境を作成し
>> ap-001,db-001~003の4台で投入前のテストを行なっている状況です。
>>
>> 上の環境にて、use_watchdogをoffにし、テストを行なってみたのですが
>>
>> 状況変わらず旧プライマリがfollow_masterに来てしまう状態です…
>>
>> debugを有効にしたログと、failover.shを添付いたします。
>>
>> pcp_promoteの部分については、コメントアウトした状態と機能させた状態でテストしましたが
>>
>> 旧プライマリがfollow_masterに来てしまう状態は変化せずの
>>
>> よろしくお願いいたします。
>>
>> On 2022/04/07 11:46, Bo Peng wrote:
>>> 彭です。
>>>
>>> ご報告ありがとうございます。
>>>
>>>> この構成で、DB1を落とした時
>>>> follow_masterがうまく動かずにはまってしまっています…
>>> 事象について、了解しました。
>>>
>>>> DB1  0 172.20.8.7 master
>>>> DB2  1 172.20.8.8 slave
>>>> DB3  2 172.20.8.9 slave
>>>>
>>>> pgpool 172.20.8.10
>>> 設定ファイルより、Pgpool-II は2台構成と認識しています。
>>> ap-001、ap-002 のいずれかが 172.20.8.10 でしょうか。
>>>
>>> ----
>>> wd_hostname = 'ap-001'
>>> heartbeat_destination0 = 'ap-002'
>>> other_pgpool_hostname0 = 'ap-002'
>>> ----
>>>
>>> 可能でしたら、Watchdog を無効にして頂き、再度お試して頂けますでしょうか。
>>>
>>>     use_watchdog = off
>>>
>>>
>>> 上記設定変更で改善されない場合には、以下の情報を共有していただけますと幸いです。
>>>
>>> - すべての Pgpool-II のログ (起動後から follow master 完了までのログ)
>>> - すべての Pgpool-II の pgpool.conf
>>> - failover.sh
>>>
>>> 以上、よろしくお願いします。
>>>
>>> On Wed, 6 Apr 2022 18:17:01 +0900
>>> nakamura <nakamura @ ichi-holdings.com> wrote:
>>>
>>>> 中村と申します。
>>>>
>>>> お世話になります
>>>>
>>>> pgpool-II
>>>> 3.7.18、PostgreSQLは13.5でのストリーミングレプリケーションを使用しています
>>>>
>>>> DB1  0 172.20.8.7 master
>>>> DB2  1 172.20.8.8 slave
>>>> DB3  2 172.20.8.9 slave
>>>>
>>>> pgpool 172.20.8.10
>>>>
>>>> この構成で、DB1を落とした時
>>>> follow_masterがうまく動かずにはまってしまっています…
>>>>
>>>> failover.shでは
>>>> new_primaryが1 , 172.20.8.8になったと検知され
>>>> dbのpromoteと、pcpでのpromoteが共に動く状態です
>>>> #念の為、follow_masterの部分を''にしてfailbackのみでテストしたところここまでは問題がなく動作しておりました
>>>>
>>>> ただ、follow_master側で受けた時の引数が、ダウンしたはずの
>>>> 172.20.8.7がプライマリとして呼び出されてしまい、follow_masterが失敗してしまう状態です
>>>>
>>>>
>>>> failoverの後すぐ呼び出されるのが原因かと思い、sleepなども入れたのですが
>>>> やはり落ちたはずのDBをprimaryとして呼び出されてしまう状態です
>>>>
>>>> failover.shについては
>>>> https://www.pgpool.net/docs/37/ja/html/example-cluster.html
>>>> を参考にpromoteをかけ、念の為pcp_promoteなどもつけるなどの処理も付け加えたり戻したりをしている状態です
>>>>
>>>>
>>>> 何かお気づきの点などありましたら、ご指摘いただけませんでしょうか?
>>>> よろしくお願いいたします。
>>>>
>>>> 以下設定内容になります
>>>>
>>>> pgpool.conf
>>>> -------------------------
>>>> follow_master_command = '/etc/pgpool/follow_master.sh %d %h %p %D %m %H
>>>> %M %P %r %R'
>>>> -------------------------
>>>>
>>>> follow_master.sh
>>>> -------------------------
>>>> NODE_ID=$1
>>>> NODE_HOST=$2
>>>> NODE_PORT=$3
>>>> NODE_PGDATA=$4
>>>> .
>>>> .
>>>> .
>>>>
>>>>
>>>> echo "count= $# DUMP >>> $@" >> $log
>>>> -------------------------
>>>>
>>>> *log
>>>> -------------------------
>>>> failed_node_id=0 new_primary=172.20.8.8 new_primary_id=1
>>>> count= 10 DUMP >>> 0 172.20.8.7 5432 /var/postgresql/data/ 0 172.20.8.7 0 0
>>>> OLD PRIMARY = 0 NEW PRIMARY = 0
>>>> count= 10 DUMP >>> 1 172.20.8.8 5432 /var/postgresql/data/ 0 172.20.8.7 0 0
>>>> count= 10 DUMP >>> 2 172.20.8.9 5432 /var/postgresql/data/ 0 172.20.8.7 0 0
>>>>
>>>> -------------------------
>


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