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

Takeharu SATO takeharu.sato @ gmail.com
2020年 5月 13日 (水) 21:01:32 JST


皆様、はじめまして。

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

現在、ドキュメントの「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として設定し
てあります。
| 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

どなたか、ご教示いただけますと幸いです。
よろしくお願いいたします。

-- 
Takeharu SATO <takeharu.sato @ gmail.com>


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