2016-10-12 2 views
0

Я использую postgres 9.4.9, pgpool 3.5.4 on centos 6.8.Как получить pcp для автоматического прикрепления узлов к postgres pgpool?

У меня тяжелое время, когда pgpool автоматически обнаруживает, когда узлы вверх (он часто обнаруживает первый узел, но редко обнаруживает вторичный), но если я использую pcp_attach_node, чтобы рассказать, какие узлы вверху, тогда все hunky dory.

Поэтому я решил, что до тех пор, пока я не смогу правильно разобраться с проблемой, я бы написал небольшой скрипт, чтобы проверить состояние узлов и прикрепить их соответствующим образом, но у меня возникают проблемы с запросом пароля. Согласно документации, я должен быть в состоянии выдавать команды, как

pcp_attach_node 10 localhost 9898 pgpool mypass 1 

, но это просто жалуется

pcp_attach_node: Внимание: дополнительные аргумент командной строки «локальный» игнорируется 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?

ответ

0

Вы должны создать 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

Script для автоматического прикрепления узла

Вы можете запланировать этот скрипт, например, 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 
+1

Есть ли способ сделать автоматическое выполнение команды или сообщить pg пул для выполнения этой команды после того, как узел вниз? –

Смежные вопросы