【问题标题】:How do I get pcp to automatically attach nodes to postgres pgpool?如何让 pcp 自动将节点附加到 postgres pgpool?
【发布时间】:2017-02-21 08:28:03
【问题描述】:

我在 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 之外,还有什么关于排序的建议吗?

【问题讨论】:

    标签: postgresql centos failover pgpool


    【解决方案1】:

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

    示例 1:

    为登录用户创建PCPPASSFILE (vi ~/.pcppass),文件内容为127.0.0.1:9897:user:pass (hostname:port:username:password),设置文件权限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(hostname:port:username:password),设置文件权限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
    

    【讨论】:

    • 有什么方法可以让命令执行自动化或者通知 pg pool 在 down 节点启动后执行这个命令?
    【解决方案2】:

    是的,您可以使用自定义的 failover_command(/etc/pgpool 中的failover.sh)触发此命令的执行

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    相关资源
    最近更新 更多