首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL -无法在pgpool 2上启动委派ip地址

PostgreSQL -无法在pgpool 2上启动委派ip地址
EN

Stack Overflow用户
提问于 2017-10-25 17:23:23
回答 3查看 3.7K关注 0票数 3

我试着在ubuntu服务器上设置一个pgpool服务器,并点击这个链接:pgpool-II Tutorial [ Watchdog ]

但是当我想启动pgpool服务时,委派的IP并没有启动。

我在syslog的日志文件中看到了一些类似这样的错误。

代码语言:javascript
复制
    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

我使用ubuntu14.04和pgpool2版本3.6.6-1,以及watchdog版本5.31-1。

我已经在pgpool.conf上的虚拟IP设置中进行了如下配置。

代码语言:javascript
复制
# - 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'

对此有什么建议吗?谢谢你的帮助。

EN

回答 3

Stack Overflow用户

发布于 2017-10-25 17:43:49

看起来运行它的用户没有使用ifconfig的权限。你学习教程中的those steps了吗?

setuid配置

在watchdog进程中,需要root权限才能控制虚拟IP。您可以以root用户的身份启动pgpool-II。然而,在本教程中,Apache需要以apache用户身份启动pgpool并控制虚拟IP,因为我们使用的是pgpoolAdmin。为此,我们设置了if_config和arping。此外,出于安全原因,我们不希望apache以外的任何用户访问命令。在每个osspc19和osspc20上执行以下命令(需要根权限)。

首先,创建一个包含ipconfig和arping的目录,该目录设置为setuid。路径在ifconif_path和arping_path中指定;在本教程中,路径为/home/apache/sbin。然后,只将execute权限授予apache用户。

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

接下来,将原始的ifconfig和arping复制到目录中,然后将setuid设置为these.cp /sbin/ifconfig /home/apache/sbin # cp /use/sbin/arping /home/apache/sbin #chmod4755 /home/apache/sbin/ifconfig #chmod4755 /home/apache/sbin/arping注意,上面解释的内容仅用于教程目的。在现实世界中,你最好创建setuid包装器程序来执行ifconfig和arping。这是留给你练习的。

票数 0
EN

Stack Overflow用户

发布于 2017-12-20 00:32:49

(注意:如果您在Docker容器中使用Watchdog运行Pgpool-II服务器,此答案可能会有所帮助)

今天我尝试在Docker容器中设置带有Watchdog的Pgpool-II服务器,我得到了几乎相同的错误(尽管我使用了set the SUID bit,甚至尝试以根用户身份运行Pgpool-II ):

代码语言:javascript
复制
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容器,如下所示:

代码语言:javascript
复制
pgpool1:
    privileged: true
    image: postdock/pgpool:latest-pgpool36
    ...

错误消失,虚拟IP设置正确。

票数 0
EN

Stack Overflow用户

发布于 2019-06-11 15:04:19

我的问题是通过以下方法解决的。

创建一个包含ipconfig和arping的目录。然后,只将execute权限授予非root用户。

代码语言:javascript
复制
$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文件:

代码语言:javascript
复制
$visudo

然后在sudoers文件中添加如下条目:

代码语言:javascript
复制
postgres ALL = NOPASSWD: /var/lib/pgsql/sbin/ip *, /var/lib/pgsql/sbin/arping *

接下来,创建bash文件(ipadd.sh、ipdel.sh、arping.sh)以使用sudo运行ip和arping命令。

代码语言:javascript
复制
$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中添加如下条目:

代码语言:javascript
复制
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的setuid位

详细信息: ifup/var/lib/pgsql/sbin/ipadd.sh没有setuid位

警告:正在检查if_down_cmd的setuid位

详细信息: ifdown/var/lib/pgsql/sbin/ipdel.sh没有setuid位

警告:正在检查arping命令的setuid位

详细信息: arping/var/lib/pgsql/sbin/arping.sh没有setuid位

停止并检查两个pgpool服务中的一个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46928633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档