cheng029 发表于 2012-6-29 22:27:16

Linux纯脚本故障转移集群

以前搞过微软的Cluster--MSCS(Exchagne2003),感觉原理非常简单,最近在做一个Oracle DG的项目,平台是Linux,总想模仿MSCS写个自动切换的脚本,搞了半天,搞出来了分享一下。   目的:实现主节点在物理失效的情况下的从节点的服务自动接管,集群资源为IP地址和Oracle数据库服务。
   思路:集群用的IP地址进行定期的健康检查,当发现IP地址失效时夺取该IP地址并启动本节点对应的服务。
   脚本:
   config.sh
quorum_ip=172.17.100.254
cluster_ip=172.17.100.50
error_count=3
my_interface=eth1:1
net_mask=255.255.255.0
logfile=/var/log/cluster.log   clustercheck.sh
source config.sh
#echo $cluster_ip
res=`ping $cluster_ip -c $error_count|grep Unreachable|wc -l`
#echo $res
if [ $res -eq $error_count ];
then
echo "Cluster IP resource is not active!"    >>$logfile
echo "Check if this node is online:"      >>$logfile
qres=`ping $quorum_ip -c $error_count|grep Unreachable|wc -l`
if [ $qres -eq $error_count ];
then
echo "This node is offline!"            >>$logfile
ifconfig $my_interface down
sh deactiveservice.sh         
else
echo "Active this node! `date`"            >>$logfile   
ifconfig $my_interface $cluster_ip netmask $net_mask
sh activeservice.sh
exit 0
fi
else
echo "Cluster IP resource is active! `date`"    >>$logfile
actres=`arp -a |grep $cluster_ip|wc -l`
if [ $actres -eq 0 ];
then
echo "This node is the active node!"      >>$logfile
fi
fi说明:其实逻辑很简单,此脚本适用的环境也比较简单,此脚本检查的只是IP地址的有效性,并没有对Oracle监听进行更进一步的检查,所以适用的环境仅仅是IP地址失效的情况,包括主机实效导致的IP地址实效、网络失效导致的IP地址失效。通过 ping $cluster_ip -c的命令检查集群IP地址的活跃性,如果活跃则认为集群健康,如果不活跃则去检查第三方节点以验证本节点是否脱网,如果未脱网则将集群IP绑定到本节点的服务网络适配器上,然后通过activeservice.sh 脚本启动集群提供的相应服务,当然也可以进行NFS、ISCSI的连接和mount,实现共享磁盘的切换;如果未脱网则删除自己的集群IP绑定,执行deactiveservice.sh停止服务,释放其它集群资源。当然,如果每个节点都支持IPMI等管理指令,可以在启动服务后给被接管的节点发送一个重新启动的命令,使对方自动重起获得新生。当然也可以在通过其它机制完成重起操作,比如通过使用NFS更改对方的文件信号,对方通过定期判断信号状态自行重起等等。非常简单,原理也非常清晰,肯定有很多没想到的,在实践中慢慢完善吧。

aa0660 发表于 2013-3-13 15:01:38

学习了,不错,讲的太有道理了

ck1987 发表于 2013-5-16 00:43:04

解释就系掩饰,掩饰等于无出色,无出色不如回家休息!!!

古城堡 发表于 2013-5-16 16:37:39

月经不仅仅是女人的痛苦,也是男人的痛苦。

jason0401 发表于 2013-5-17 10:06:21

微机原理闹危机,随机过程随机过,实变函数学十遍,汇编语言不会编!

yl197837 发表于 2013-5-18 01:47:31

男人偷腥时的智商仅次于爱因斯坦!

olga 发表于 2013-5-18 19:55:34

人生自古谁无死,啊个拉屎不用纸!
页: [1]
查看完整版本: Linux纯脚本故障转移集群