中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]自动切换IP,让双机热备软件“下岗”的批处理。
作者:
标题: [求助]自动切换IP,让双机热备软件“下岗”的批处理。 上一主题 | 下一主题
fanpuyu
新手上路





积分 10
发帖 4
注册 2008-3-12
状态 离线
『楼 主』:  [求助]自动切换IP,让双机热备软件“下岗”的批处理。

大致情况是这样的,单位里原来有一有套双机热备+磁盘阵列系统,但是自从阵列出了问题后,那一套双机热备也不能使用了,干脆一不做二不休,只好抛弃那所谓的双机热备、自动切换设备了,准备使用DOS批处理来实现两台机器的自动切换IP功能!数据同步偶用了SyncBackSE来实现!呵呵!

设备:
主力服务器的IP地址是(简称S1):192.168.0.1
备用服务器的IP地址是(简称S2):192.168.0.2

实现目标:
一、在S2上运行批处理文件,如果S1出现网络故障或者死机、蓝屏等三分钟时间无法访问的时候,S2自动切换成S1的IP地址,继续工作!
二、当然如果能够等待S1工作正常后S2再自动改为原IP地址!就更好了!如果这一项无法实现就请帮忙把一给帮忙编写一下!感谢......

实现过程:
主要利用网络工具的:ping

白话文:
就是S2在3分钟内ping不通S1时,自动切换成S1的IP,等可以ping通S1了,最好是可以再切换回原来的IP地址!呵呵!

现在偶已经把切换IP的批处理做好了,但是具体如何进行ping,在三分钟内ping不通与通后如何实现自动切换却不知道如何来做了,请大家帮帮忙给编写一下!
感谢中。。。。。。。。。。。。。。



:)


在S2里切换IP的批处理文件:
@ echo off
rem 设置变量
set Nic=本地连接
rem
set Addr=192.168.0.1
set Mask=255.255.255.0
set Gway=192.168.0.254
set Dns1=192.168.0.254
set Dns2=202.102.224.68
rem

echo ------------------------------------------------------
echo 正在进行IP设置,请稍等

rem
echo. IP地址 = %Addr%
echo. 子网掩码 = %Mask%
netsh interface ip set address name=%Nic% source=static addr=%Addr% mask=%Mask% >nul
echo. 网关 = %Gway%
netsh interface ip set address name=%Nic% gateway=%Gway% gwmetric=1 >nul
echo. 首选DNS = %Dns1%
netsh interface ip set dns name=%Nic% source=static addr=%Dns1% register=PRIMARY >nul
echo. 备用DNS = %Dns2%
netsh interface ip add dns name=%Nic% addr=%Dns2% index=2 >nul

echo ------------------------------------------------------
echo IP设置完成!

rem pause >nul
[ Last edited by fanpuyu on 2008-3-12 at 02:11 PM ]

2008-3-12 11:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fanpuyu
新手上路





积分 10
发帖 4
注册 2008-3-12
状态 离线
『第 2 楼』:  

补充一下:
ping不通应该为:Request timed out.   超时3分钟!

延时Reply from 192.168.0.1: bytes=32 time=3000ms TTL=128
或者2分钟内Request timed out. 则不要进行IP地址的切换!
呵呵,因为要考虑到并发与服务器本身的一切BUG等问题!

2008-3-12 12:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 3 楼』:  

很有意思的构思

其它都还好说
麻烦的是如何S1网络中断恢复后
检查与排除与S2的IP冲突

因为网络中断的形式是多种
包括进程阻塞、系统宕机、连接断开
这种中断可能导致程序重启
也可能不会导致程序重启
从而使程序的判断流程产生分歧

有了些想法
正在完善……

2008-3-12 14:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fanpuyu
新手上路





积分 10
发帖 4
注册 2008-3-12
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by qzwqzw at 2008-3-12 02:52 PM:
很有意思的构思

其它都还好说
麻烦的是如何S1网络中断恢复后
检查与排除与S2的IP冲突

因为网络中断的形式是多种
包括进程阻塞、系统宕机、 ...

如果S1确实在三分钟以上都无法连接,而过了十分钟左右又突然正常运行的话,那偶只好去机房内进行查看了!
呵呵,这种可能性不是没有,但感觉会很少!

在单位的这个数据库的WEB页面里有主机名称的,如果S1挂掉,切换到了S2,那客户端的WEB页里就会出现SERVER02的主机名称,而不是SERVER01!

2008-3-12 14:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fanpuyu
新手上路





积分 10
发帖 4
注册 2008-3-12
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by qzwqzw at 2008-3-12 02:52 PM:
很有意思的构思

其它都还好说
麻烦的是如何S1网络中断恢复后
检查与排除与S2的IP冲突

因为网络中断的形式是多种
包括进程阻塞、系统宕机、 ...

网友:lvyanan 兄的提示

这个问题挺麻烦,S2检测S1好办些,但S1恢复时其IP一定会与S2当前使用的IP产生冲突,其后果是造成双方中的一方掉线,甚至有可能双方同时掉线,此后的处理就相当难了,要想实现自动处理,其难度可想而知。有一个思路不知正确否,LZ可以在两台主机上各自运行一个批处理,S2通过ping192.168.0.1来监视S1,当3分钟ping不通S1,S2就自动将IP改为192.168.0.1来运行,同样S1恢复后,开机后使用192.168.0.3上网,并且ping192.168.0.1,如果ping得通就待命,ping不通就自动改为192.168.0.1来运行,这样似乎逻辑上说得过去些。


我的回复:
其实感觉也可以这样,S2运行的批处理中不包括恢复原192.168.0.2的命令。如果S1挂掉了,就让S2当主机,那等到S1恢复时就让它成为恢复后的S2来运行!

那这样就需要两个批处理,同时在两台机器里运行!!


感谢。。。。。。。。。。。

2008-3-12 15:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ztg2008
新手上路





积分 2
发帖 1
注册 2008-3-12
状态 离线
『第 6 楼』:  

学习哟

2008-3-12 15:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
karl
新手上路





积分 3
发帖 4
注册 2007-10-12
状态 离线
『第 7 楼』:  

使用netsh命令不需这么复杂。
用netsh -c interface dump > s1.txt 得到s1的TCP/IP设置
用netsh -f s1.txt重置s2的TCP/IP
如果有ROUTER的话重定向会有延迟。

2008-3-12 16:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 8 楼』:  

这是模型代码,!!未经测试!!

本程序需要先在主机上运行
待确认正常后再在备机上运行

若保证系统启动时自动运行本程序
则可以实现大多数情况下的自动IP切换
个别极端情况例外
@echo off

:SwitchToStandby - 将自身切换为备机
:: 此处填写设置备机IP(192.168.0.2)的代码

:MonitorStandby - 监测备机网络,不通则间隔约1分钟再监测,否则转向监测主机
ping -n 1 192.168.0.2 | find "TTL=" >nul || ping -n 1 -w 60000 1.1.1.1 > nul & goto :MonitorStandby

:MonitorPrimary - 监测主机网络,通则间隔约1分钟再监测,否则转向确认主机
ping -n 1 192.168.0.1 | find "TTL=" >nul && ping -n 1 -w 60000 1.1.1.1 > nul & goto :MonitorPrimary

:VerifyPrimary - 监测备机网络,不通则转向监测备机,否则等待3分钟再确认主机,通则转向监测主机,否则转向备机切换
ping -n 1 192.168.0.2 | find "TTL=" >nul || goto :MonitorMe
ping -n 1 -w 180000 1.1.1.1 > nul & ping -n 1 192.168.0.1 | find "TTL=" >nul && goto :MonitorPrimary

:SwitchToPrimary - 切换备机为主机
:: 此处填写设置主机IP(192.168.0.1)的代码

:MonitorMe - 监测自身网络,通则间隔约1分钟再监测,否则转向确认自身
ping -n 1 192.168.0.1 | find "TTL=" >nul && ping -n 1 -w 60000 1.1.1.1 > nul & goto :MonitorMe

:VerifyMe - 等待3分钟后确认自身网络,通则间隔约1分钟再转向监测,否则转向主机切换
ping -n 1 -w 180000 1.1.1.1 > nul & ping -n 1 192.168.0.1 | find "TTL=" >nul && goto :MonitorMe
goto :SwitchToStandby
[ Last edited by qzwqzw on 2008-3-12 at 05:43 PM ]

2008-3-12 17:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: