PostgreSQL - не удается запустить IP-адрес делегата в pgpool 2

Я пытаюсь настроить сервер pgpool на сервере ubuntu и по этой ссылке: pgpool-II Tutorial [Watchdog].

Но когда я запускаю службу pgpool, делегированный IP не запускается.

Я видел в файле журнала на системный журнал и получил некоторые ошибки, как это.

    Oct 25 08:46:25 pgpool-1 pgpool[1647]: [8-2] 2017-10-25 08:46:25: pid 1647: DETAIL:  Host:"172.16.0.42" WD Port:9000 pgpool-II port:5432 
    Oct 25 08:46:25 pgpool-1 pgpool: SIOCSIFADDR: Operation not permitted
    Oct 25 08:46:25 pgpool-1 pgpool: SIOCSIFFLAGS: Operation not permitted
    Oct 25 08:46:25 pgpool-1 pgpool: SIOCSIFNETMASK: Operation not permitted
    Oct 25 08:46:25 pgpool-1 pgpool[1648]: [18-1] 2017-10-25 08:46:25: pid 1648: LOG:  failed to acquire the delegate IP address
    Oct 25 08:46:25 pgpool-1 pgpool[1648]: [18-2] 2017-10-25 08:46:25: pid 1648: DETAIL:  'if_up_cmd' failed
    Oct 25 08:46:25 pgpool-1 pgpool[1648]: [19-1] 2017-10-25 08:46:25: pid 1648: WARNING:  watchdog escalation failed to acquire delegate IP

Я использую Ubuntu 14.04 с версией pgpool2 3.6.6-1 и сторожевой версией 5.31-1.

И я настроил на pgpool.conf настройки виртуального IP, как это.

# - Virtual IP control Setting -
delegate_IP = '172.16.0.201'
if_cmd_path = '/sbin'
if_up_cmd = 'ifconfig eth0:0 inet $_IP_$ netmask 255.255.0.0'
if_down_cmd = 'ifconfig eth0:0 down'
arping_path = '/usr/sbin'
arping_cmd = 'arping -U $_IP_$ -w 1'

Любое предложение для этого? Спасибо за любую помощь.

2 ответа

Похоже, что пользователь, который запускает его, не имеет разрешения на использование ifconfig. Вы выполнили эти шаги из учебника?

настройка setuid

В сторожевом процессе корневая привилегия необходима для управления виртуальным IP. Вы можете запустить pgpool-II от имени пользователя root. Однако в этом руководстве Apache должен запустить pgpool как пользователь apache и контролировать виртуальный IP, потому что мы используем pgpoolAdmin. Для этого мы устанавливаем if_config и arping. Также мы не хотим, чтобы какой-либо пользователь, кроме apache, обращался к командам по соображениям безопасности. Выполните следующие команды для каждого из osspc19 и osspc20 (требуется привилегия root).

Во-первых, создайте каталог для хранения ipconfig и arping, который установлен setuid. Путь указывается в ifconif_path и arping_path; в этом уроке это /home/apache/sbin. Затем предоставьте привилегию на выполнение только пользователю apache.

$ su -
# mkdir -p /home/apache/sbin
# chown apache:apache /home/apache/sbin
# chmod 700 /home/apache/sbin

Затем скопируйте оригинальный каталог ifconfig и arping в каталог, а затем установите для них setuid.

# cp /sbin/ifconfig /home/apache/sbin
# cp /use/sbin/arping /home/apache/sbin
# chmod 4755 /home/apache/sbin/ifconfig
# chmod 4755 /home/apache/sbin/arping

Обратите внимание, что объяснение выше должно использоваться только в учебных целях. В реальном мире вам лучше создавать программы-оболочки setuid для выполнения ifconfig и arping. Это оставлено для вашего упражнения.

(Примечание: этот ответ может помочь в случае, если вы запускаете серверы Pgpool-II с Watchdog в контейнерах Docker)

Сегодня я попытался настроить серверы Pgpool-II с помощью Watchdog в контейнерах Docker, и я получил почти ту же ошибку (хотя я установил бит SUID и даже попытался запустить Pgpool-II от имени пользователя root):

SIOCSIFADDR: Operation not permitted
SIOCSIFFLAGS: Operation not permitted
SIOCSIFNETMASK: Operation not permitted
pid 88: LOG:  failed to acquire the delegate IP address
pid 88: DETAIL:  'if_up_cmd' failed
pid 88: WARNING:  watchdog escalation failed to acquire delegate IP

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

Затем я запустил свои контейнеры Pgpool-II Docker в привилегированном режиме, как показано ниже:

pgpool1:
    privileged: true
    image: postdock/pgpool:latest-pgpool36
    ...

Ошибка исчезла, и виртуальный IP-адрес настроен правильно.

Моя проблема решается следующим способом.

Создайте каталог для хранения ipconfig и arping. Затем предоставьте привилегию на выполнение только пользователю без полномочий root.

$mkdir /var/lib/pgsql/sbin
$chown postgres:postgres /var/lib/pgsql/sbin
$cp /sbin/ip /var/lib/pgsql/sbin
$cp /sbin/arping /var/lib/pgsql/sbin

Запустите visudo, который безопасно редактирует файл sudoers:

$visudo

Затем добавьте такую ​​запись в файл sudoers:

postgres ALL = NOPASSWD: /var/lib/pgsql/sbin/ip *, /var/lib/pgsql/sbin/arping *

Затем создайте файлы bash (ipadd.sh,ipdel.sh,arping.sh) для запуска команд ip и arping с помощью sudo.

$cat /var/lib/pgsql/sbin/ipadd.sh
#!/bin/bash
sudo /var/lib/pgsql/sbin/ip addr add $1/24 dev eth1 label eth1:0

$cat /var/lib/pgsql/sbin/ipdel.sh
#!/bin/bash
sudo /var/lib/pgsql/sbin/ip addr del $1/24 dev eth1

$cat /var/lib/pgsql/sbin/arping.sh
#!/bin/bash
sudo /var/lib/pgsql/sbin/arping -U $1 -w 1 -I eth1

$chmod 755 /var/lib/pgsql/sbin/*
$chown postgres:postgres /var/lib/pgsql/sbin/*    

Добавьте такую ​​запись в pgpool.conf:

delegate_IP = '10.10.10.62'
if_up_cmd = 'ipadd.sh $_IP_$'
if_down_cmd = 'ipdel.sh $_IP_$'
arping_cmd = 'arping.sh $_IP_$'
if_cmd_path = '/var/lib/pgsql/sbin'
arping_path = '/var/lib/pgsql/sbin'

Затем перезапустите службу pgpool. Игнорируйте предупреждение, которое вы можете увидеть следующим образом.

ВНИМАНИЕ: проверка установленного бита if_up_cmd
ДЕТАЛИ: ifup[/var/lib/pgsql/sbin/ipadd.sh] не имеет установленного бита
ВНИМАНИЕ: проверка установленного бита if_down_cmd
ДЕТАЛИ: ifdown[/var/lib/pgsql/sbin/ipdel.sh] не имеет установленного бита
ВНИМАНИЕ: проверка бита setuid команды arping
ПОДРОБНЕЕ: arping[/var/lib/pgsql/sbin/arping.sh] не имеет бит setuid

Остановитесь и проверьте один из двух сервисов pgpool.

Другие вопросы по тегам