centos 如何让pcp自动将节点连接到postgres pgpool?

bcs8qyzn  于 2022-11-07  发布在  其他
关注(0)|答案(3)|浏览(231)

我在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连接节点:警告:额外的命令行参数“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之外,还有其他排序建议吗?

9o685dep

9o685dep1#

您必须创建PCPPASSFILE。有关详细信息,请搜索pgpool documentation

范例1:

为登录用户创建PCPPASSFILE(vi ~/.pcppass),文件内容为127.0.0.1:9897:用户:密码(主机名:端口:用户名:密码),设置文件权限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:用户:密码(主机名:端口:用户名:密码),设置文件权限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
wn9m85ua

wn9m85ua2#

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

ej83mcc0

ej83mcc03#

自动启动pgpool关闭节点的方法:
1.将此脚本复制到一个文件中,该文件对所需位置具有执行权限,对所有节点具有postgres所有权。
1.在postgres用户下运行crontab -e命令
1.最后,在crontab中设置脚本每分钟运行一次,但是要每秒钟都执行它,您可以创建自己的服务并运行它。


# !/bin/bash

# This script will up all pgpool down node

# ************************

# ******NODE STATUS*******

# ************************

# 0 - This state is only used during the initialization.

# 1 - Node is up. No connection yet.

# 2 - Node is up and connection is pooled.

# 3 - Node is down

# ************************

# ******SCRIPT*******

# ************************

server_node_list=(0 1 2)    
for server_node in ${server_node_list[@]}
do
    source $HOME/.bash_profile
    export PCPPASSFILE=/var/lib/pgsql/.pcppass
    node_status=$(pcp_node_info -p 9898 -h localhost -U pgpool  -n $server_node -w | cut -d ' ' -f 3);

    if [[ $node_status == 3 ]]
    then
            pcp_attach_node -n $server_node -U pgpool -p 9898 -w -v
    fi

done

相关问题