zoukankan      html  css  js  c++  java
  • 比较核心的技术了 虚拟ip的一种实现方式(手工添加和C#添加)

        虚拟IP技术在高可用领域像数据库SQLSERVER、web服务器等场景下使用很多,很疑惑它是怎么实现的,偶然,发现了一种方式可以实现虚拟ip。它的原理在于同一个物理网卡,是可以拥有多个ip地址的,至于虚拟网卡,也可用通过该方式拥有多个ip。下面,就拿安装vmware后的虚拟网卡做例子,该网络连接已具有192.168.32.1的ip,尝试添加一个192.168.32.6的虚拟ip地址,介绍这两种方式。

       第一种,手工添加

       1、打开控制面板,在想要添加虚拟ip的网络连接上右键,选择属性。在打开的属性窗口中选中“此连接使用下列项目”中的“Internet 协议版本 4 (TCP/IPv4)”。

        

        2、点击“属性”按钮,进入“Internet 协议版本 4(TCP/IPv4)属性”窗口,可以看到,该网络连接设置了固定的ip地址为192.168.32.1。

        3、点击“高级”按钮,进入“高级TCP/IP设置”窗口。

        4、点击在IP地址栏中的添加按钮,弹出添加IP地址的窗口,输入192.168.32.6即可,子网掩码自动生成。

        5、点击添加按钮后,一步一步点击确定按钮,最后,尝试ping一下该虚拟ip地址。能ping通,则成功了。

     第二种, C#添加虚拟IP

        采用编程方式,可以自动添加和移除该虚拟IP地址,所谓的虚拟IP地址的转移就是这么来实现的。当拥有虚拟IP的机器故障时,在故障机器上尝试删除该虚拟IP并在健康机器上重新添加该虚拟IP。具体的实现就相当复杂了,下面,就列出添加虚拟IP的代码,供参考。

        需要在该项目上引用“System.Management”程序集。

    using System;
    using System.Management;
    
    namespace ProJKY{
    
        public class AddVirtualIpAddress {
            public void Test() {
                ManagementClass findAdapters =
                                new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection adapters = findAdapters.GetInstances();
    
                foreach (ManagementObject adapter in adapters) {
                    // 查找符合条件的网卡
                    if ((string)adapter["ServiceName"] != "VMware Virtual Ethernet Adapter for VMnet8")
                        continue;
    
                    string[] ip = new string[] { "192.168.32.1","192.168.32.6"};
                    string[] mask = new string[] { "255.255.255.0","255.255.255.0"};
    
                    try{
                        ManagementBaseObject newIP = adapter.GetMethodParameters("EnableStatic");
    
                        newIP["IPAddress"] = ip;
                        newIP["SubnetMask"] = mask;
    
                        ManagementBaseObject setIP = adapter.InvokeMethod("EnableStatic", newIP, null);
    
                        UInt32 result = (UInt32)(setIP["returnValue"]);
                    }
                    catch (Exception) {
                        throw;
                    }
                }
            }
        }
    }

    需要删除一个虚拟IP的话,在string[] ip 中去掉虚拟IP和对应的子网掩码就ok了。经测试,和手工添加的效果一样,能ping通。

  • 相关阅读:
    HDU4366 Successor 线段树+预处理
    POJ2823 Sliding Window 单调队列
    HDU寻找最大值 递推求连续区间
    UVA846 Steps 二分查找
    HDU3415 Max Sum of MaxKsubsequence 单调队列
    HDU时间挑战 树状数组
    UVA10168 Summation of Four Primes 哥德巴赫猜想
    UESTC我要长高 DP优化
    HDUChess 递推
    HDU4362 Dragon Ball DP+优化
  • 原文地址:https://www.cnblogs.com/ProJKY/p/VirtualIPAddressImp.html
Copyright © 2011-2022 走看看