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
sh deactiveservice.sh    
ifconfig $my_interface down      
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更改对方的文件信号,对方通过定期判断信号状态自行重起等等。

非常简单,原理也非常清晰,肯定有很多没想到的,在实践中慢慢完善吧。










本文转自 bingyizy 51CTO博客,原文链接:http://blog.51cto.com/bingyi/905021,如需转载请自行联系原作者
目录
相关文章
|
25天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
78 1
|
28天前
|
Linux Shell Python
Linux执行Python脚本
Linux执行Python脚本
27 1
|
30天前
|
存储 负载均衡 索引
linux7安装elasticsearch-7.4.0集群配置
linux7安装elasticsearch-7.4.0集群配置
113 0
|
2月前
|
存储 安全 Linux
|
3月前
|
Shell Linux Perl
将 Linux 系统中 UID 大于等于 1000 的普通用户都删除shell脚本
将 Linux 系统中 UID 大于等于 1000 的普通用户都删除shell脚本
42 1
|
3月前
|
Linux Shell
Linux文件解压脚本实现
Linux文件解压脚本实现
26 0
|
3月前
|
Linux Shell Perl
Linux脚本实现文件系统使用率大于90%报警
Linux脚本实现文件系统使用率大于90%报警
30 0
|
3月前
|
Shell Linux
linux shell脚本判断当前登录用户是否为root
linux shell脚本判断当前登录用户是否为root
52 1
|
4天前
|
Linux Shell Android开发
自动化脚本之GPIO/LED相关适用于Android/Linux
自动化脚本之GPIO/LED相关适用于Android/Linux
13 0
|
24天前
|
Ubuntu Unix Linux
【Linux/Ubuntu】Linux/Ubuntu运行python脚本
【Linux/Ubuntu】Linux/Ubuntu运行python脚本