我无法使用起搏器和corosync使群集工作。 这是我的硬件configuration:
这个networking在防火墙后面。
我有两个通过udp与外部设备通信的资源:
我使用的起搏器命令:
crm configure primitive res1-srv upstart:resource1 \ op monitor interval=10s timeout=120 on-fail="restart" \ meta is-managed="true" failure-timeout=300 migration-threshold=5 allow-migrate=true crm configure primitive res2-srv upstart:resource2 \ op monitor interval=10s timeout=120 on-fail="restart" \ meta is-managed="true" failure-timeout=300 migration-threshold=5 allow-migrate=true
资源1和资源2彼此不相关,并且每个群集(在节点1或节点2上)中每个节点只能有一个活动实例。
我创build了2个浮动IP地址,每个进程一个:
我做了这个使用:
crm configure primitive res1-ipin ocf:heartbeat:IPaddr2 \ params ip="192.168.3.130" cidr_netmask="24" op monitor interval="10s" meta is-managed="true" crm configure primitive res2-ipin ocf:heartbeat:IPaddr2 \ params ip="192.168.3.131" cidr_netmask="24" op monitor interval="10s" meta is-managed="true"
在防火墙上,pipe理员configuration了2条NAT规则:
我为他们每个人做了一个小组:
crm configure group resource1 res1-ipin res1-srv crm configure group resource2 res2-ipin res2-srv
所以我可以有不同的节点中的每个资源。 起搏器pipe理这些资源没有问题。
传入的udp数据包可以正常工作,两种资源都可以轻松处理。
但是,由于源IP地址是节点的静态IP地址,因此传出的udp数据包不会通过防火墙。 这里是一个例子:
他们都被防火墙阻止。 而且我没有权限在防火墙上configuration新规则(我不能要求pipe理员configuration它们,他认为防火墙不允许这样做)。
我尝试使用iptables在每个节点上configurationNAT:
iptables -t nat -A POSTROUTING -p udp --sport 16500 -j SNAT --to-source 192.168.3.130:16500 iptables -t nat -A POSTROUTING -p udp --sport 16501 -j SNAT --to-source 192.168.3.131:16501
当我这样做时,resource1和resource2写在他们的日志上,他们不能发送数据包:
Client ERROR *** Terminal nro:XXX writing 1Operation not permitted
我不知道该怎么办。 我也尝试添加资源ocf:heartbeat:IPsrcaddr,但它崩溃:
IPsrcaddr[6200]: ERROR: command 'ip route replace 192.168.3.0/24 dev eth0 src 192.168.3.130' failed
我知道使用2个浮动IP地址不会有任何好处。
如果有人能指出我做错了什么,我将非常感激。
提前致谢
IPsrcaddr
资源代理应该为此工作。 configurationIPsrcaddr
资源,如下所示:
# crm configure crm(live)configure# primitive res1_srcaddr IPsrcaddr \ params ipaddress=192.168.3.130 crm(live)configure# primitive res2_srcaddr IPsrcaddr \ params ipaddress=192.168.3.131
然后跳到您的编辑器中,并将新的IPsrcaddr资源添加到IPaddr2资源之后的相应组:
crm(live)configure# edit ...snip... group resource1 res1-ipin res1_srcaddr res1-srv group resource2 res2-ipin res2_srcaddr res2-srv ...snip... crm(live)configure# verify crm(live)configure# commit
如果您仍然看到与IPsrcaddr
有关的错误,您可以尝试手动运行该命令,以更好地了解它失败的原因。
您甚至可以尝试修改IPsrcaddr
资源代理以更好地适应您的节点; 这是一个相对简单的资源代理:
# vi /usr/lib/ocf/resource.d/heartbeat/IPsrcaddr
尝试这个。
vi /usr/lib/ocf/resource.d/heartbeat/IPsrcaddr
去掉
NETWORK=`ip route list dev $INTERFACE scope link match $ipaddress|grep -o '^[^ ]*'`
并用其replace
NETWORK=`ip route list dev $INTERFACE scope link match $ipaddress|grep -o '^[^ ]*'|head -1`