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

标签 postgresql centos failover pgpool

我在 centos 6.8 上使用 postgres 9.4.9、pgpool 3.5.4。

我很难让 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 之外,还有其他对此进行排序的建议吗?

最佳答案

您必须创建PCPPASSFILE。搜索 pgpool documentation了解更多信息。

示例 1:

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

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

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

关于postgresql - 如何让 pcp 自动将节点附加到 postgres pgpool?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40000250/

相关文章:

java - 如何设置队列生产者超时?

java - 使用 Apache HTTP 客户端进行客户端负载平衡

postgresql - 在 Postgres 中选择一行作为 JSON

java - 异常 : org. postgresql.util.PSQLException:错误: "call"处或附近的语法错误

mysql - 为什么我在结果中得到 (BLOB) 值而不是 INT 值

datasource - Quartz 调度程序不会在 AWS RDS 故障转移上更新数据库连接

sql - 有没有办法使用 LIMIT 关键字在 Postgres 中获取一系列记录

sql - 地区和城市的月环比增长

php - 在 CentOS 上安装 PhalconPHP

mysql - Centos - 无法启动MySQL