[pgpool-general-jp: 1625] Re: pcpコマンドでの.pcppassファイル使用方法, MASTERノードのpgpool停止時のdelegate IP移動について

Takuma Hoshiai hoshiai @ sraoss.co.jp
2020年 5月 15日 (金) 15:53:41 JST


はじめまして、星合です。


On Wed, 13 May 2020 21:01:32 +0900
Takeharu SATO <takeharu.sato @ gmail.com> wrote:

> 皆様、はじめまして。
> 
> つい先日からpgpool-IIを試し始めた者です。色々と設定に失敗しているようで、
> 何が誤っているか(または誤っている箇所の調査方法)をご教示いただきたくメール
> をお送りします。

エラーが発生する、正常に動作しない場合は、設定ファイルや事象再現時のログ、
判明していれば再現手順も合わせて共有していただけると、回答してくれる方が
多いかと思います。パスワードやIP情報など載せられない情報がある場合は適宜
マスキングしていただければと思います。

> 現在、ドキュメントの「8.3. Pgpool-II + Watchdogの構築の例」にしたがいつ
> つ、2台構成でVirtualBox上に構築を試みています。PostgreSQLのバージョンが
> 10のため、11を前提としたPATH設定は修正済みです。また、NICのdeviceはeth0
> ではなくenp0s8のため、該当部分も変更済みです。
> https://www.pgpool.net/docs/latest/ja/html/example-cluster.html
> 
> 環境は次のとおりです。
> OS: CentOS 7.7.1908 (yum upgrade実行済)
> PostgreSQL: postgresql10-server-10.12-1PGDG.rhel7.x86_64
>             postgresql10-libs-10.12-1PGDG.rhel7.x86_64
>             postgresql10-10.12-1PGDG.rhel7.x86_64
>             (https://www.postgresql.org/download/linux/redhat/ を利用)
> Pgpool-II: pgpool-II-pg10-4.1.1-1pgdg.rhel7.x86_64
>            pgpool-II-pg10-extensions-4.1.1-1pgdg.rhel7.x86_64
>            (pgpool-II-release-4.1-1.noarch を利用してyum install)
> 
> ホスト名  | IPADDR
> ---------+--------------
> pgsql101 | 192.168.56.11
> pgsql102 | 192.168.56.12
> 
> delegate IPADDR: 192.168.56.13
> 
> 【現象1】
> pcpコマンドに-wオプションを付けるとパスワードファイルを利用して認証を行う
> と認識していますが、正常に行えない状況が発生しています。
> 
> -wオプション無しで実行した場合は、正常に実行できています。
> | -bash-4.2$ pcp_watchdog_info -h 192.168.56.13 -p 9898 -U pgpool
> | Password:
> | 2 YES pgsql101:9999 Linux pgsql101 pgsql101
> |
> | pgsql101:9999 Linux pgsql101 pgsql101 9999 9000 4 MASTER
> | pgsql102:9999 Linux pgsql102 pgsql102 9999 9000 7 STANDBY
> 
> -wオプションを付けると、認証エラーが返されます。
> | -bash-4.2$ pcp_watchdog_info -h 192.168.56.13 -p 9898 -U pgpool -w
> | FATAL:  authentication failed for user "pgpool"
> | DETAIL:  username and/or password does not match
> 
> straceで調べたところ、~/.pcppassは正常に読み込めているようですし、権限も
> 正しく設定できているようです。以下、straceの結果から終了直前部分を一部抜粋
> します。試しで構築している関係上、pgpoolのパスワードをpgpoolとして設定し
> てあります。

以下の結果を見る限り、ホスト名がlocalhostになっております。
こちらをpcpを実行する際に指定するhost名と一致させても認証うまくいかないか
試していただければと思います。それでもうまくいかない場合、log_min_messagesを
debug以下のレベルに変更して、上記エラー事象を再現した際のログも合わせて
共有していただければと思います。

> | stat("/var/lib/pgsql/.pcppass", {st_mode=S_IFREG|0600, st_size=29, ...}) = 0
> | open("/var/lib/pgsql/.pcppass", O_RDONLY) = 4
> | fstat(4, {st_mode=S_IFREG|0600, st_size=29, ...}) = 0
> | mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
> -1, 0) = 0x7f619659c000
> | read(4, "localhost:9898:pgpool:pgpool\n", 4096) = 29
> | read(4, "", 4096)                       = 0
> | close(4)                                = 0
> | munmap(0x7f619659c000, 4096)            = 0
> | write(3, "M\0\0\0\4", 5)                = 5
> | select(4, [3], NULL, [3], NULL)         = 1 (in [3])
> | read(3, "m\0\0\0\10B\342H*", 1024)      = 9
> | write(3, "R\0\0\0,pgpool\0fd5d959733067cc6dbca"..., 45) = 45
> | select(4, [3], NULL, [3], NULL)         = 1 (in [3])
> | read(3, "E\0\0\0xSFATAL\0CXX000\0Mauthenticati"..., 1024) = 121
> | close(3)                                = 0
> | write(2, "FATAL:  authentication failed fo"..., 98FATAL:
> authentication failed for user "pgpool"
> | DETAIL:  username and/or password does not match
> |
> | ) = 98
> | exit_group(1)                           = ?
> | +++ exited with 1 +++
> 
> 【現象2】
> MASTER側のpgpoolを停止した際、delegate IPがSLAVE側へ移動しない現象に遭遇
> しています。なお、MASTER側のpostgresql-10を停止した際には、delegate IPが
> SLAVE側へ移動することが確認できています。
> 
> pgsql101 (ドキュメント中のserver1相当) での実行履歴
> | # pcp_watchdog_info -h 192.168.56.13 -p 9898 -U pgpool
> | Password:
> | 2 YES pgsql101:9999 Linux pgsql101 pgsql101
> |
> | pgsql101:9999 Linux pgsql101 pgsql101 9999 9000 4 MASTER
> | pgsql102:9999 Linux pgsql102 pgsql102 9999 9000 7 STANDBY
> | # psql -h 192.168.56.13 -p 9999 -U pgpool postgres -c "show pool_nodes"
> | ユーザー pgpool のパスワード:
> |  node_id | hostname | port | status | lb_weight |  role   |
> select_cnt | load_balance_node | replication_delay | replication_state
> | replication_sync_state | last_status_change
> | ---------+----------+------+--------+-----------+---------+------------+-------------------+-------------------+-------------------+------------------------+---------------------
> |  0       | pgsql101 | 5432 | up     | 0.500000  | primary | 0
>   | true              | 0                 |                   |
>                 | 2020-05-13 08:58:10
> |  1       | pgsql102 | 5432 | up     | 0.500000  | standby | 0
>   | false             | 0                 | streaming         | async
>                 | 2020-05-13 08:58:10
> | (2 行)
> |
> | # systemctl stop pgpool.service
> 
> pgsql102 (ドキュメント中のserver2相当) での実行履歴
> | $ ip a show dev enp0s8
> | 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc
> pfifo_fast state UP group default qlen 1000
> |     link/ether 08:00:27:fe:eb:88 brd ff:ff:ff:ff:ff:ff
> |     inet 192.168.56.12/24 brd 192.168.56.255 scope global noprefixroute enp0s8
> |        valid_lft forever preferred_lft forever
> |     inet6 fe80::7073:a9e2:c4aa:e246/64 scope link noprefixroute
> |        valid_lft forever preferred_lft forever

delegate IPは、クォーラムが存在しない場合VIPが立ち上がらないため、
そちらが理由かと思います。
enable_consensus_with_half_votesがoff(deafult)の場合、過半数の
Pgpoolノード(2台の場合、生存ノード > 2 ÷ 2)が生きている必要があります。
そのため、Pgpool2台構成の場合は、1ノードでもDOWNしているとクォーラムが
存在しなくなります。もし、2台構成でこちらをテストしたい場合、
enable_consensus_with_half_votesを有効にして実施すればよいかと思います。

・delegate_IP
https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#CONFIG-WATCHDOG-VIP-CONTROL
・enable_consensus_with_half_votes
https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#CONFIG-WATCHDOG-FAILOVER-BEHAVIOR

以上、よろしくお願いいたします。

> どなたか、ご教示いただけますと幸いです。
> よろしくお願いいたします。
> 
> -- 
> Takeharu SATO <takeharu.sato @ gmail.com>
> _______________________________________________
> pgpool-general-jp mailing list
> pgpool-general-jp @ sraoss.jp
> http://www.sraoss.jp/mailman/listinfo/pgpool-general-jp


-- 
Takuma Hoshiai <hoshiai @ sraoss.co.jp>



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