如何让pcp自动将节点附加到postgres pgpool?

时间:2016-10-12 13:43:30

标签: postgresql centos failover pgpool

我使用postgres 9.4.9,pgpool 3.5.4 on centos 6.8。

我很难让pgpool自动检测节点何时启动(它经常检测到第一个节点但很少检测到辅助节点)但是如果我使用pcp_attach_node告诉它节点是什么,那么一切很笨拙。

所以我想,直到我可以正确排序问题,我会编写一个小脚本来检查节点的状态并适当地附加它们,但是我遇到了密码提示问题。根据文档,我应该能够发出像

这样的命令
pcp_attach_node 10 localhost 9898 pgpool mypass 1

但这只是抱怨

pcp_attach_node:警告:额外的命令行参数" localhost"忽视 pcp_attach_node:警告:额外的命令行参数" 9898"忽视 pcp_attach_node:警告:额外的命令行参数" pgpool"忽视 pcp_attach_node:警告:额外的命令行参数" mypass"忽视 pcp_attach_node:警告:额外的命令行参数" 1"忽略

只有当我使用像

这样的参数时它才会起作用
pcp_attach_node -U pgpool -h localhost -p 9898 -n 1 

并且没有密码参数,我必须在提示时手动输入。

除了使用Expect之外,还有其他任何建议吗?

1 个答案:

答案 0 :(得分:2)

您必须创建 PCPPASSFILE 。搜索pgpool documentation以获取更多信息。

示例1:

为已登录用户创建PCPPASSFILE(vi ~/.pcppass),文件内容为127.0.0.1:9897:user:pass(主机名:端口:用户名:密码),设置文件权限0600(chmod 0600 ~/.pcppass)< / p>

命令应该在不询问密码的情况下运行

pcp_attach_node -h 127.0.0.1 -U user -p 9897 -w -n 1

示例2:

创建PCPPASSFILE(vi /usr/local/etc/.pcppass),文件内容为127.0.0.1:9897:user:pass(主机名:端口:用户名:密码),设置文件权限0600(chmod 0600 /usr/local/etc/.pcppass),设置变量PCPPASSFILE (export PCPPASSFILE=/usr/local/etc/.pcppass

命令应该在不询问密码的情况下运行

pcp_attach_node -h 127.0.0.1 -U user -p 9897 -w -n 1

自动附加节点的脚本

您可以使用例如crontab安排此脚本。

#!/bin/bash
#pgpool status
#0 - This state is only used during the initialization. PCP will never display it.
#1 - Node is up. No connections yet.
#2 - Node is up. Connections are pooled.
#3 - Node is down.

source $HOME/.bash_profile
export PCPPASSFILE=/appl/scripts/.pcppass
STATUS_0=$(/usr/local/bin/pcp_node_info -h 127.0.0.1 -U postgres -p 9897 -n 0 -w | cut -d " " -f 3)
echo $(date +%Y.%m.%d-%H:%M:%S.%3N)" [INFO] NODE 0 status "$STATUS_0;

if (( $STATUS_0 == 3 ))
then
    echo $(date +%Y.%m.%d-%H:%M:%S.%3N)" [WARN] NODE 0 is down - attaching node"
    TMP=$(/usr/local/bin/pcp_attach_node -h 127.0.0.1 -U postgres -p 9897 -n 0 -w -v)
    echo $(date +%Y.%m.%d-%H:%M:%S.%3N)" [INFO] "$TMP 
fi


STATUS_1=$(/usr/local/bin/pcp_node_info -h 127.0.0.1 -U postgres -p 9897 -n 1 -w | cut -d " " -f 3)
echo $(date +%Y.%m.%d-%H:%M:%S.%3N)" [INFO] NODE 1 status "$STATUS_1;

if (( $STATUS_1 == 3 ))
then
    echo $(date +%Y.%m.%d-%H:%M:%S.%3N)" [WARN] NODE 1 is down - attaching node"
    TMP=$(/usr/local/bin/pcp_attach_node -h 127.0.0.1 -U postgres -p 9897 -n 1 -w -v)
    echo $(date +%Y.%m.%d-%H:%M:%S.%3N)" [INFO] "$TMP 
fi

exit 0