免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6025 | 回复: 9
打印 上一主题 下一主题

rhcs floating IP 的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-21 14:34 |只看该作者 |倒序浏览
有2台HP DL580,均安装了RHEL5.1及其自带的rhcs相关rpm,
分配的资源有:
floating1: ip:10.82.114.4
floating2: ip:10.30.7.185
script1: 默认的vsftpd脚本
script2: my_sample脚本  (这个脚本是起一个简单的perl script,去create 一个 port,bind到floating ip 1上面,然后listen等连接,用于演示问题)

在cluster 管理界面创建2个service
service1:scrpit1,floating ip1,floating ip2
service2:script2, floating ip1
不同时enable,第一次enable service1,vsftpd服务正常起来,能够通过floating IP连接,实验成功。
diable了service1,enable service2,发现bind不到floating ip,报错退出。

对比两个service的输出的/var/log/messages消息,发现起vsftpd服务的时候,avahi-daemon会现Register 两个floating ip到相应的interface,而起sample服务的时候,则没有做这个动作,导致my_sample脚本调用的时候,floating IP是不存在的,后面的bind肯定是失败的了,实验了mysqld,tomcat的服务,也是因为没有Register floating IP造成失败。

问题是:为什只有vsftpd服务的时候,rhcs回去让avahi-daemon register floating IP?
反复对比了cluster.conf文件,看不出哪里不一样的。

论坛徽章:
0
2 [报告]
发表于 2008-11-21 14:50 |只看该作者

回复 #1 PinkOrient 的帖子

补充1:
/etc/cluster/cluster.conf

<?xml version="1.0"?>
<cluster config_version="32" name="eadb_cluster">
        <quorumd interval="2" label="quodisk" min_score="1" tko="10" votes="3">
                <heuristic interval="2" program="ping 10.82.114.1 -c1 -t1" score="1"/>
        </quorumd>
        <fence_daemon post_fail_delay="0" post_join_delay="3"/>
        <clusternodes>
                <clusternode name="eadb01.smartone.com" nodeid="1" votes="1">
                        <fence>
                                <method name="1">
                                        <device name="eadb01_ilo"/>
                                </method>
                        </fence>
                </clusternode>
                <clusternode name="eadb02.smartone.com" nodeid="2" votes="1">
                        <fence>
                                <method name="1">
                                        <device name="eadb02_ilo"/>
                                </method>
                        </fence>
                </clusternode>
        </clusternodes>
        <cman/>
        <fencedevices>
                <fencedevice agent="fence_ilo" hostname="192.168.0.10" login="Administrator" name="eadb01_ilo" passwd="password"/>
                <fencedevice agent="fence_ilo" hostname="192.168.0.11" login="Administrator" name="eadb02_ilo" passwd="password"/>
        </fencedevices>
        <rm>
                <failoverdomains>
                        <failoverdomain name="eadb_fd" ordered="0" restricted="0">
                                <failoverdomainnode name="eadb01.smartone.com" priority="1"/>
                                <failoverdomainnode name="eadb02.smartone.com" priority="1"/>
                        </failoverdomain>
                        <failoverdomain name="eadb_service" ordered="0" restricted="0">
                                <failoverdomainnode name="eadb01.smartone.com" priority="1"/>
                                <failoverdomainnode name="eadb02.smartone.com" priority="1"/>
                        </failoverdomain>
                </failoverdomains>
                <resources>
                        <ip address="10.82.114.4" monitor_link="1"/>
                        <script file="/etc/rc.d/init.d/vsftpd" name="vsftpd"/>
                        <clusterfs device="/dev/VolGroup00/LogVol00" force_unmount="1" fsid="53287" fstype="gfs" mountpoint="/gfs1" name="gfs_db_space" options=""/>
                        <clusterfs device="/dev/VolGroup01/LogVol01" force_unmount="1" fsid="1552" fstype="gfs" mountpoint="/gfs2" name="gfs_eadb_space" options=""/>
                        <mysql config_file="/etc/my.cnf" listen_address="0.0.0.0" mysql_options="" name="mysql_eadb" shutdown_wait="0"/>
                        <script file="/etc/init.d/tomcat_eadb" name="tomcat_eadb"/>
                        <tomcat-5 catalina_base="eadbmgr" catalina_options="/gfs2/eadb/jakarta-tomcat-5.0.30/conf" config_file="eadb_tomcat" name="/gfs2/eadb/jakarta-tomcat-5.0.30/conf/Catalina" shutdown_wait="" tomcat_user=""/>
                        <script file="/etc/init.d/tomcat5" name="tomcat"/>
                        <ip address="10.30.7.185" monitor_link="1"/>
                        <script file="/etc/init.d/my_sample" name="my_sample"/>
                </resources>
                <service autostart="1" domain="eadb_fd" name="vsftpd">
                        <script ref="vsftpd"/>
                        <ip ref="10.82.114.4"/>
                        <ip ref="10.30.7.185"/>
                </service>
                <service autostart="1" domain="eadb_service" exclusive="1" name="eadb">
                        <ip ref="10.82.114.4"/>
                        <clusterfs ref="gfs_db_space"/>
                        <clusterfs ref="gfs_eadb_space"/>
                        <mysql ref="mysql_eadb"/>
                        <script ref="tomcat_eadb"/>
                        <ip ref="10.30.7.185"/>
                </service>
                <service autostart="1" domain="eadb_service" name="tc">
                        <ip ref="10.82.114.4"/>
                        <script ref="tomcat"/>
                </service>
                <service autostart="1" exclusive="1" name="mysql">
                        <ip ref="10.82.114.4"/>
                        <ip ref="10.30.7.185"/>
                        <clusterfs ref="gfs_db_space"/>
                        <mysql ref="mysql_eadb"/>
                </service>
                <service autostart="1" domain="eadb_fd" name="sample" recovery="restart">
                        <ip ref="10.82.114.4"/>
                        <script ref="my_sample"/>
                </service>
        </rm>
</cluster>
==================
补充2:
my_sample service脚本调用的 perl script, eadb_sm.pl

#!/usr/bin/perl
use Socket;


# make the socket
socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
# so we can restart our server quickly
setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1);
# build up my socket address
$ip="10.82.114.4";
$port=9999;
#$my_addr = sockaddr_in($port, INADDR_ANY);
$my_addr = sockaddr_in($port, inet_aton($ip));
bind(SERVER, $my_addr)
        or die "Couldn't bind to port $server_port : $!\n";
# establish a queue for incoming connections
listen(SERVER, SOMAXCONN)
        or die "Couldn't listen on port $server_port : $!\n";
# accept and process connections
        while (accept(CLIENT, SERVER)) {
# do something with CLIENT
                while(1) {
                        print stderr "Someone connected\n";
                        $bs = sysread(CLIENT, $buff, 204;
                        if ($bs) {
                                ($l, $s) = unpack("na*", $buff);
                                print stderr "Received: $l bytes, content:\n $s\n";

                                $tmp = "Received!!!";
                                $tosend = pack("na*", length($tmp), $tmp);
                                $bs = syswrite(CLIENT, $tosend);
                                if ($bs) {
                                        print stderr "Sent: $tmp\n";
                                        print stderr "=======================================\n";
                                } else {
                                        print stderr "failed to send, exit";
                                }
                                last;
                        } else {
                                #print stderr "Nothing comes sleep for a while\n";
                                #sleep(1);
                                next;
                        }
                }
                close(CLIENT);
                print stderr "Disconnected\n";
        }
close(SERVER);
==================
补充3:
/var/log/messages信息
起vsftpd之前有注册floating ip,起另外一个没有
=====================
Nov 20 17:26:52 eadb01 clurgmgrd[1577]: <notice> Starting disabled service service:vsftpd
Nov 20 17:26:52 eadb01 avahi-daemon[7970]: Registering new address record for 10.82.114.4 on bond0.
Nov 20 17:26:53 eadb01 avahi-daemon[7970]: Registering new address record for 10.30.7.185 on bond1.
Nov 20 17:26:55 eadb01 clurgmgrd[1577]: <notice> Service service:vsftpd started
Nov 20 17:26:57 eadb01 snmpd[5659]: Connection from UDP: [127.0.0.1]:33631
Nov 20 17:27:28 eadb01 last message repeated 3 times
Nov 20 17:27:45 eadb01 last message repeated 2 times
Nov 20 17:28:00 eadb01 snmpd[5659]: Connection from UDP: [127.0.0.1]:33632
Nov 20 17:28:00 eadb01 snmpd[5659]: Received SNMP packet(s) from UDP: [127.0.0.1]:33632
Nov 20 17:28:10 eadb01 clurgmgrd[1577]: <notice> Stopping service service:vsftpd
Nov 20 17:28:11 eadb01 avahi-daemon[7970]: Withdrawing address record for 10.30.7.185 on bond1.
Nov 20 17:28:15 eadb01 snmpd[5659]: Connection from UDP: [127.0.0.1]:33632
Nov 20 17:28:16 eadb01 snmpd[5659]: Connection from UDP: [127.0.0.1]:33632
Nov 20 17:28:21 eadb01 avahi-daemon[7970]: Withdrawing address record for 10.82.114.4 on bond0.
Nov 20 17:28:31 eadb01 clurgmgrd[1577]: <notice> Service service:vsftpd is disabled
Nov 20 17:28:31 eadb01 snmpd[5659]: Connection from UDP: [127.0.0.1]:33632
Nov 20 17:28:35 eadb01 clurgmgrd[1577]: <notice> Starting disabled service service:sample
Nov 20 17:28:35 eadb01 clurgmgrd[1577]: <notice> Service service:sample started
Nov 20 17:28:43 eadb01 clurgmgrd: [1577]: <err> script:my_sample: status of /etc/init.d/my_sample failed (returned 2)
Nov 20 17:28:43 eadb01 clurgmgrd[1577]: <notice> status on script "my_sample" returned 1 (generic error)
Nov 20 17:28:43 eadb01 clurgmgrd[1577]: <notice> Stopping service service:sample
Nov 20 17:28:43 eadb01 clurgmgrd[1577]: <notice> Service service:sample is recovering
Nov 20 17:28:44 eadb01 clurgmgrd[1577]: <notice> Service service:sample is now running on member 2
Nov 20 17:28:46 eadb01 snmpd[5659]: Connection from UDP: [127.0.0.1]:33632
Nov 20 17:29:17 eadb01 last message repeated 3 times
Nov 20 17:29:33 eadb01 last message repeated 2 times
Nov 20 17:29:43 eadb01 clurgmgrd[1577]: <notice> Stopping service service:sample
Nov 20 17:29:43 eadb01 clurgmgrd[1577]: <notice> Service service:sample is disabled
Nov 20 17:29:48 eadb01 snmpd[5659]: Connection from UDP: [127.0.0.1]:33632
Nov 20 17:29:49 eadb01 snmpd[5659]: Connection from UDP: [127.0.0.1]:33632
Nov 20 17:30:04 eadb01 snmpd[5659]: Connection from UDP: [127.0.0.1]:33634
Nov 20 17:30:04 eadb01 snmpd[5659]: Received SNMP packet(s) from UDP: [127.0.0.1]:33634
Nov 20 17:30:05 eadb01 clurgmgrd[1577]: <notice> Starting disabled service service:sample
Nov 20 17:30:05 eadb01 clurgmgrd[1577]: <notice> Service service:sample started
Nov 20 17:30:13 eadb01 clurgmgrd: [1577]: <err> script:my_sample: status of /etc/init.d/my_sample failed (returned 2)
Nov 20 17:30:13 eadb01 clurgmgrd[1577]: <notice> status on script "my_sample" returned 1 (generic error)
Nov 20 17:30:13 eadb01 clurgmgrd[1577]: <notice> Stopping service service:sample
Nov 20 17:30:13 eadb01 clurgmgrd[1577]: <notice> Service service:sample is recovering
Nov 20 17:30:14 eadb01 clurgmgrd[1577]: <notice> Service service:sample is now running on member 2
Nov 20 17:30:19 eadb01 snmpd[5659]: Connection from UDP: [127.0.0.1]:33634
Nov 20 17:30:20 eadb01 snmpd[5659]: Connection from UDP: [127.0.0.1]:33634
Nov 20 17:30:27 eadb01 clurgmgrd[1577]: <notice> Stopping service service:sample
Nov 20 17:30:27 eadb01 clurgmgrd[1577]: <notice> Service service:sample is stopped
Nov 20 17:30:27 eadb01 clurgmgrd[1577]: <notice> Starting stopped service service:sample
Nov 20 17:30:27 eadb01 clurgmgrd[1577]: <notice> Service service:sample started
Nov 20 17:30:30 eadb01 clurgmgrd[1577]: <notice> Stopping service service:sample
Nov 20 17:30:30 eadb01 clurgmgrd[1577]: <notice> Service service:sample is disabled

论坛徽章:
0
3 [报告]
发表于 2008-11-21 20:20 |只看该作者

回复 #1 PinkOrient 的帖子

从你的实现目的上分析要考虑资源组
status on script "my_sample" returned 1 (generic error)
这个说明脚步本身存在问题,启动失败
同时你要主机fw的规则是否禁止了数据包的传送

论坛徽章:
0
4 [报告]
发表于 2008-11-22 00:37 |只看该作者

回复 #3 kns1024wh 的帖子

多谢回复,请再浪费点时间看看我的/var/log/messages.

脚本在rhcs外面用service my_sample start/stop/status 测试是OK的,当然这时候bind的IP指定的是一个static的IP。
如果我在rhcs里面指定bind IP到0.0.0.0的话,也是跑的没问题的,但是这个时候通过floating IP connect不到我的sample服务。

你这里指出来的出错,是因为我让服务bind到floating IP上,而rhcs在起我的script之前,却没有通过avahi-daemon去register floating IP到interface上,所以进程被start之后,bind 失败,自然是die掉了,接着rhcs通过status去monitor进程,自然是看到进程不到,就报出这个错了。

我想问的就是,为什么只有vsftpd这个service的时候,rhcs回去通过avahi-daemon吧floating IP做register,而其他的service却没有做这一步,造成bind floating IP失败?

论坛徽章:
0
5 [报告]
发表于 2008-11-22 00:38 |只看该作者

回复 #3 kns1024wh 的帖子

多谢回复,请再浪费点时间看看我的/var/log/messages.

脚本在rhcs外面用service my_sample start/stop/status 测试是OK的,当然这时候bind的IP指定的是一个static的IP。
如果我在rhcs里面指定bind IP到0.0.0.0的话,也是跑的没问题的,但是这个时候通过floating IP connect不到我的sample服务。

你这里指出来的出错,是因为我让服务bind到floating IP上,而rhcs在起我的script之前,却没有通过avahi-daemon去register floating IP到interface上,所以进程被start之后,bind 失败,自然是die掉了,接着rhcs通过status去monitor进程,自然是看到进程不到,就报出这个错了。

我想问的就是,为什么只有vsftpd这个service的时候,rhcs回去通过avahi-daemon吧floating IP做register,而其他的service却没有做这一步,造成bind floating IP失败?

论坛徽章:
0
6 [报告]
发表于 2008-11-22 20:38 |只看该作者
有人帮忙解释一下rhcs的float IP的原理以及如何配置吗?

未解决,顶一下不要沉了。

论坛徽章:
0
7 [报告]
发表于 2008-11-24 21:50 |只看该作者
再次顶起。。。。。

昨天用两台vmware做试验,情况依然如此,也是只有vsftpd的那个service会有register floating IP的动作,
后来想了个办法,在vsftpd的service的基础上,加上我要的服务的script,比如httpd,居然可以了,
非常奇怪,难道rhcs一定要带着vsftpd才能玩?百思不得其解。

论坛徽章:
0
8 [报告]
发表于 2008-11-25 23:24 |只看该作者
这次搞定了,有同事帮我找到showrun之前发的经验,然后经过试验,解决了。

总结的经验就是,加到Service的resource应该是分层次的,之前的误区在于,把

IP 和 scripts这些resource当做相同层次的,都用“Add a Shared Resource to this service",

正确的做法应该是先用这个按钮添加script,然后选中scripts,点击”Attach a  Shared/Private Resource to the selection",

把script要用到的其他resource Attach到脚本上面,呈树状关系。




这样rhcs startup这个service的时候,会从树叶开始把resource分配好或者运行好

Nov 21 08:05:05 node0 clurgmgrd[2755]: <notice> Starting disabled service service:httpd
Nov 21 08:05:10 node0 avahi-daemon[2604]: Registering new address record for 192.168.0.80 on eth0.
Nov 21 08:05:12 node0 avahi-daemon[2604]: Registering new address record for 192.168.0.15 on eth0.
Nov 21 08:05:13 node0 clurgmgrd[2755]: <notice> Service service:httpd started
Nov 21 08:05:32 node0 clurgmgrd[2755]: <notice> Stopping service service:httpd
Nov 21 08:05:32 node0 avahi-daemon[2604]: Withdrawing address record for 192.168.0.15 on eth0.
Nov 21 08:05:43 node0 avahi-daemon[2604]: Withdrawing address record for 192.168.0.80 on eth0.
Nov 21 08:05:56 node0 clurgmgrd[2755]: <notice> Service service:httpd is disabled

我的理解和showrun的相反,他的例子是把floating IP作为第一个加入service的resource,然后在上面attach上
gfs和script,但是我把script attache在floating IP下的时候发现rhcs并没有register 这个IP,反之则OK了。

[ 本帖最后由 PinkOrient 于 2008-11-25 23:30 编辑 ]

rhcs.jpg (95.76 KB, 下载次数: 17)

rhcs.jpg

论坛徽章:
0
9 [报告]
发表于 2008-11-25 23:29 |只看该作者
附上 cluster.conf 文件和测试结果
配置了4个service做试验
httpd             可以正常工作,rhcs register了2个floating IP,然后运行script
httpd2           可以正常工作
httpd3           不能正常工作,没有register floating IP
httpd4           不能正常工作,没有register floating IP
=========================

<?xml version="1.0"?>
<cluster alias="new_cluster" config_version="40" name="new_cluster">
        <fence_daemon post_fail_delay="0" post_join_delay="3"/>
        <clusternodes>
                <clusternode name="node0" nodeid="1" votes="1">
                        <fence/>
                </clusternode>
                <clusternode name="node1" nodeid="2" votes="1">
                        <fence/>
                </clusternode>
        </clusternodes>
        <cman expected_votes="1" two_node="1"/>
        <fencedevices>
                <fencedevice agent="fence_manual" name="mf"/>
        </fencedevices>
        <rm>
                <failoverdomains>
                        <failoverdomain name="ftpd" ordered="1" restricted="0">
                                <failoverdomainnode name="node0" priority="1"/>
                                <failoverdomainnode name="node1" priority="2"/>
                        </failoverdomain>
                </failoverdomains>
                <resources>
                        <ip address="192.168.0.15" monitor_link="1"/>
                        <script file="/etc/init.d/httpd" name="httpd"/>
                        <ip address="192.168.0.80" monitor_link="1"/>
                </resources>
                <service autostart="1" domain="ftpd" exclusive="1" name="httpd" recovery="relocate">
                        <script ref="httpd">
                                <ip ref="192.168.0.80"/>
                                <ip ref="192.168.0.15"/>
                        </script>
                </service>
                <service autostart="1" domain="ftpd" name="httpd2" recovery="restart">
                        <script ref="httpd">
                                <ip address="192.168.0.200" monitor_link="1"/>
                        </script>
                </service>
                <service autostart="1" domain="ftpd" name="httpd3" recovery="restart">
                        <ip ref="192.168.0.80"/>
                        <script ref="httpd"/>
                </service>
                <service autostart="1" name="httpd4">
                        <ip ref="192.168.0.15">
                                <script ref="httpd"/>
                        </ip>
                </service>
        </rm>
</cluster>

论坛徽章:
0
10 [报告]
发表于 2010-11-19 08:58 |只看该作者
你的script没有status的输出
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP