我正在配置 pgpool 实例以获得 postgresql 服务的 HA。我正在遵循此配置。
我找到了一个命令并在控制台中手动运行它:
arping_cmd = 'arping -U $_IP_$ -w 1'
但它不起作用,然后我想找到类似的行为,因为我使用的是 ubuntu 12.04。我该怎么做?
变量 $_IP_$
被配置中的ip值替换了,主要问题是命令arping
。
答案1
在终端中运行 arping 命令时,我得到以下输出:
$ arping -U 192.168.13.1 -w -1
arping: device (option -I) is required.
Usage: arping [-fqbDUAV] [-c count] [-w timeout] [-I device] [-s source] destination
-f : quit on first reply
-q : be quiet
-b : keep broadcasting, don't go unicast
-D : duplicate address detection mode
-U : Unsolicited ARP mode, update your neighbours
-A : ARP answer mode, update your neighbours
-V : print version and exit
-c count : how many packets to send
-w timeout : how long to wait for a reply
-I device : which ethernet device to use
-s source : source ip address
destination : ask for what ip address
解决方案位于运行命令后的第一行。使用 -I 和 -s 修复您的问题。-I 指定执行 arping 的接口,-s 指定执行 arping 的源。我知道这很糟糕,但请更新您的命令,使其如下所示:
arping_cmd = 'arping -U $_IP_$ -w 1 -I ethX -s SOURCE_IP'
其中 ethx 是您的以太网,SOURCE_IP 是您要从中进行 arping 的 IP。
希望这有帮助,干杯
答案2
我在 Fedora 上遇到了类似的问题:
$ arping 192.168.1.162
arping: Suitable device could not be determined. Please, use option -I.
...
我的解决方案是:
$ arping $ip_addr -I $(ip route get $ip_addr | cut -d\ -f 3 |xargs)
其中 ip_addr 包含要 ping 的 IP。
将其分解:
ip route get 192.168.1.162
将返回内核针对指定 IP 使用的路由和接口:
192.168.1.162 dev eth1 src 192.168.1.1
然后使用:
cut -d\ -f 3
用分隔符 '\ ' (转义空格)拆分字符串并返回第 3 个子字符串:
eth1
然后使用 xargs 删除界面周围的所有空格。
希望它会有所帮助。
答案3
我得到了与提交者相同的错误,说“-U”不是一个有效的选项:
root@pgpool-2:/var/log# arping -U 192.168.13.1 -w -1
arping: invalid option -- 'U'
ARPing 2.11, by Thomas Habets <[email protected]>
usage: arping [ -0aAbdDeFpqrRuv ] [ -w <us> ] [ -S <host/ip> ]
[ -T <host/ip ] [ -s <MAC> ] [ -t <MAC> ] [ -c <count> ]
[ -i <interface> ] <host/ip/MAC | -B>
For complete usage info, use --help or check the manpage.
我在 Ubuntu 14.04 上,手册页中没有提到“-U”:
root@pgpool-2:/var/log# man arping | grep '\-U'
root@pgpool-2:/var/log#
我把我的改成这样:
arping_cmd = 'arping -v $_IP_$ -w 1 -c 100'
基本上来说:
- -U 不存在,因此删除它
- 添加 -v 以获取详细输出,这可能会有所帮助
- 添加 -c 100 以便它最终完成...否则它会永远运行