我尝试在ubuntu服务器上设置一个pgpool服务器,并遵循以下链接:pgpool-II Tutorial [ Watchdog ]。
但是当我启动pgpool服务时,委托的IP无法启动。
我在syslog上的日志文件中看到过这样的错误。
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。
我已经在像这样的虚拟IP设置上配置了pgpool.conf。
# - 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'
有什么建议吗?感谢您的任何帮助。
看起来运行它的用户没有使用ifconfig的权限。你有从教程中关注those steps吗?
setuid配置
在监视程序进程中,需要root权限来控制虚拟IP。你可以以root用户身份启动pgpool-II。但是在本教程中,Apache需要启动pgpool作为apache用户并控制虚拟IP,因为我们使用的是pgpoolAdmin。为此,我们setuid 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。这留给你锻炼。
(注意:如果您在Docker容器中使用Watchdog运行Pgpool-II服务器,这个答案可能会有所帮助)
我今天尝试在Docker容器中使用Watchdog设置Pgpool-II服务器,我得到了几乎相同的错误(虽然我做了set the SUID bit甚至尝试以root用户身份运行Pgpool-II):
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设置正确。