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.