如何实现虚拟机重启后IP地址不变

在Windows Azure上创建一个虚拟机,系统会为其分配一个动态的内部地址,即Dynamic IP,简称DIP。DIP地址可方便同一个云服务或同一个虚拟网络内部的虚拟机藉此相互通信。

为了实现虚拟机与外界进行通信,系统还会为虚拟机所在的云服务提供一个公用虚拟地址,即VirtualIP,简称VIP。需要注意的是,这个VIP不是直接设置在虚拟机的NIC上。

在虚拟机内部做配置时,有时需要指定虚拟机的IP地址,根据情况,有时这个IP是DIP,有时是VIP。完成这些配置后,就会存在一个问题,虚拟机一旦被停机,重启以后这些设定好的IP是否能保持不变?

如何保持内部IP不变

这个问题要分情况讨论。第一种情况:如何保持虚拟机的DIP不变。Azure的虚拟机的DIP一般是动态分配的。为了做到虚拟机停机后重启DIP不变,必须把虚拟机置于某个虚拟网络之内。为了展示这个效果,我们先创建了一个虚拟网络win-demo-vnet,并在这个网络中创建了一个子网Subnet-1,起始IP地址是192.168.0.0。下图显示了一个处于该虚拟网络的虚拟机cent-vm-in-vnet:


该虚拟机的VIP和DIP如下图所示。注意,由于子网的头4个IP地址会被Azure征用,所以加入子网的第一个虚拟机的DIP地址是192.168.0.4。


当我们在Windows Azure管理门户中点击“关闭”按钮,准备关闭此虚拟机时,会得到提示如下图:


虚拟机关闭后,可以看到该虚拟机的VIP和DIP的确已被释放。


当我们重新启动该虚拟机后,可以发现该虚拟机的VIP发生了变化,从原先的42.159.24.131变为42.159.25.12。而DIP仍然保持为原先的192.168.0.4。


如何保持公用虚拟IP不变

下面我们讨论一下如何维持VIP不变。这里重申一下,VIP不是直接与虚拟机关联的,而是与虚拟机所在的云服务关联的IP。如果想保持云服务的VIP不变,只需要云服务中仍然有虚拟机没有被关闭和释放(StoppedDeallocated)。这里需要对虚拟机的关闭方式稍作解释。

虚拟机有两种关闭方式:

简单关闭(Stopped):从虚拟机内部来关机,或者通过PowerShell的Stop-AzureVM -StayProvisioned都能实现简单关闭。虚拟机被简单关闭后,其占据的IP资源并没有被释放。因此,这种情况下,虚拟机即使停机仍然会被计费。下图就是一个被简单关闭的虚拟机。


关闭并释放(Stopped Deallocated):在管理门户点击虚拟机的“关闭”按钮,或者使用PowerShell的Stop-AzureVM命令,在关闭虚拟机后还会释放其占据的IP资源。只有关闭且释放了资源的虚拟机才不会被继续计费。

在下图所示的虚拟机列表中,被简单关闭的虚拟机的状态是“已停止”,而那些被释放资源的虚拟机的状态是“已停止(已取消分配)”。


根据这个事实,如果虚拟机的关闭是我们可以主动控制的,那么可以通过简单关闭虚拟机来保持VIP。

但很多时候,虚拟机的关闭不是我们能主动控制的,例如出现硬件故障或软件需要升级。这时系统会自动关闭虚拟机。这种情况下虚拟机不仅被关闭,其占据的IP资源也被释放。此时,我们该如何保持VIP呢?唯一的办法是让云服务中仍然有资源未被释放的虚拟机。

Windows Azure一直提倡的设计原则是,相同负载的虚拟机应该至少有2个,且把它们放置于同一个云服务中的可用性集合里。这样,在绝大多数情况下,当某一个虚拟机被关闭且释放资源后,云服务中仍然会有一个运行的虚拟机。

作为实验,我们向先前的虚拟机cent-vm-in-vnet所在的虚拟网络和云服务中添加一个新的虚拟机cent-vm2-vnet,如下图:


可见,它与cent-vm-in-vnet共享相同的VIP42.159.25.12。下面我们看一下这时如果关闭cent-vm-in-vnet虚拟机会有什么效果。右下图可见,虚拟机关闭后,其DIP被释放,但云服务的VIP仍然保持不变。这正是因为云服务中还有虚拟机cent-vm2-vnet在运行。


当把虚拟机cent-vm-in-vnet重启后,可发现该虚拟机的VIP和DIP重新恢复为42.159.25.12和192.168.0.4。



阅读更多
个人分类: 虚拟机
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

如何实现虚拟机重启后IP地址不变

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭