虛擬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通。