双服务器热备系统软件开发

来源:互联网 发布:淘宝店铺名称大全女装 编辑:程序博客网 时间:2024/04/30 06:10
设计思路
依托Windows系统对IP地址冲突的处理原则
1 检查自己是否为FloatIP设置者,如果是,goto 2,如果不是 goto 4
2 开启服务,并检查本机上承载服务是否正常,如果正常 goto 1 ,如果不正常 goto 3
3 关闭服务,清空FloatIP, 设置过期时钟(等会阐述)
4 关闭服务,清空FloatIP .,本检查FloatIP上的承载服务是否正常,如果正常,Goto 1 如果不正常 Goto 5
5 检测过期时钟是否过期,如果没有过期,goto 1 如果过期了 goto 6
6 尝试开启本地服务,检查本机上的承载服务是否正常,如果正常 goto 7 如果不正常 goto 8
7 关闭本地服务,goto 1
8 添加FloatIP给本机,Goto 1
 
 
问题:是否存在A B同时设置上FLoatIP后,都认为自己是FloatIP拥有者
根据相通的交换环境规则,一个IP地址对应唯一的网卡地址,所有RArp解析只能对应唯一的固定的服务器网卡上,即使设置同一个FloatIP,但对于相通的交换环境中,只有一个FloatIP有效,而且一定有一个有效,这种有效环境并且根据先来先到的基础上,其他造成冲突的IP地址解析一律不保存,但会每个一段时间取请求解析绑定。所有上面的问题不会出现的。
所以程序需要每次检查到自己不是主服务的时候,需要清空他的FloatIP,虽然增加了点资源的消耗,但可以快速消除IP地址冲突提示。
 
问题引出,由于可能存在一台主服务刚刚判断自己服务不通了,清空了自己的FloatIP,另外的从服务器还没有来得及设置FloatIP,就会有可能让这个原来的主服务器马上进入设置FloatIP阶段。
 这个问题解决就设置了一个过期时钟,当自己从FloatIP变成从服务器的时候,设置过期时钟,只有当这个过期时钟过期后(2s)后,才会进入设置判断阶段。避免IP变更抖动



需要涉及的api
function GetIpAddrTable(pIpAddrTable: PTMibIPAddrTable;
  pdwSize: PULONG;
  bOrder: BOOL): DWORD;
stdcall; external 'IPHLPAPI.DLL';
function AddIPAddress(Address, IpMask: TInAddr; IfIndex: DWORD; NTEContext, NTEInstance: PULONG): DWORD;
stdcall; external 'IPHLPAPI.DLL';

function DeleteIPAddress(NTEContext: ULONG): DWORD;
stdcall; external 'IPHLPAPI.DLL';

实际使用中,windows 2000 与 windows 2003 中的iphlpapi 对 添加floatip后该floatip的编号 (供删除用的NTEContext)排列方式约有不同


 
原创粉丝点击