一种获取虚拟机主机IP的方法及系统
文献发布时间:2023-06-19 10:05:17
技术领域
本发明涉及云计算技术领域,尤其涉及一种获取虚拟机主机IP的方法及系统。
背景技术
虚拟IP(以下简写为VIP)是网络高可用(以下简写为HA)的一个常用技术,实现HA的方式,一般采用两台主机同时完成一项功能,比如数据库服务主机,平常只有一台主机hostA对外提供服务,另一台主机hostB作为热备,当主机hostA出现故障时,业务访问自动动态切换到另一台热备的主机hostB。
而VIP,就是一个未与主机进行强绑定的IP,平常情况下它配置在主机hostA,它还可以在主备服务器之间来回切换,也就是说对外提供数据库主机hostA除了有一个真实IP外还有一个虚拟IP,使用这两个IP中的任意一个都可以连接到这台主机,所有项目中数据库链接一项配置的都是这个VIP,当主机hostA发生故障无法对外提供服务时,动态将这个VIP切换到备用主机hostB,这样就达到了将网络访问目标切换为备用主机hostB的目的。
在上述的使用场景下,需要有一种有效的方法判断,虚拟IP已经切换到了哪台主机上,以便管理员对提供业务的主机进行跟踪。特别是在云主机环境下,判断VIP切换到了哪台虚拟主机,是一个需要解决的问题。
在云主机环境下,目前比较普遍的方案是利用OpenStack的网络控制组件Neutron,通过获取邻居解析表中的记录,找到VIP对应的物理地址MAC,再通过物理地址MAC逐个对比虚拟主机的网卡MAC信息,以达到判断虚拟主机是否在使用虚拟IP的目的。
例如,若VIP使用的MAC记录与主机hostA网卡MAC相同,则表示主机hostA的网卡正在使用VIP,整体流程示意如下图1所示。其中,Step1中获取的“邻居解析表”数据,是虚拟主机访问外部网络时产生的,若VIP切换虚拟主机后,没有访问外部网络,则可能不存在VIP的数据记录,导致最终无法定位虚拟主机。Step2和Step4需要进行两次遍历查找,在数据多时资源消耗严重,容易引起卡顿现象。
因此,如何解决数据缺失可能性问题,以提高获取虚拟主机IP使用信息的准确度;以及如何简化处理过程,以提高获取虚拟主机IP使用情况的效率,是一项亟待解决的问题。
发明内容
有鉴于此,本发明提供了一种获取虚拟机主机IP的方法,能够解决数据缺失可能性问题,提高了获取虚拟主机IP使用信息的准确度;以及能够简化处理过程,省略两次大量数据的查找运算,提高了获取虚拟主机IP使用情况的效率。
本发明提供了一种获取虚拟机主机IP的方法,包括:
获取虚拟主机表;
基于获取的所述虚拟主机表获取虚拟主机网卡地址信息。
优选地,所述基于获取的所述虚拟主机表获取虚拟主机网卡地址信息,包括:
向开源的云计算管理平台的计算控制组件发送超文本传输协议请求;
所述计算控制组件基于接收到的所述超文本传输协议请求,查找到对应的虚拟主机以及其所在的宿主机;
所述计算控制组件将虚拟主机信息以及事件对象类型发送到运行在宿主机层面的计算服务组件;
所述计算服务组件进行os-interface-address处理;
所述计算服务组件调用所述os-interface-address处理,向宿主机发送guest-network-get-interfaces类型消息;
基于接收到的所述guest-network-get-interfaces类型消息,读取系统网卡IP地址信息。
优选地,所述计算控制组件基于接收到的所述超文本传输协议请求,查找到对应的虚拟主机以及其所在的宿主机,包括:
通过所述计算控制组件的ServersController类对所述超文本传输协议请求进行处理,查找到对应的虚拟主机以及其所在的宿主机。
优选地,所述计算服务组件进行os-interface-address处理,包括:
通过所述计算服务组件的InstanceEvents类进行os-interface-address处理。
一种获取虚拟机主机IP的系统,包括:
第一获取模块,用于获取虚拟主机表;
第二获取模块,用于基于获取的所述虚拟主机表获取虚拟主机网卡地址信息。
优选地,所述第二获取模块具体包括:
发送单元,用于向开源的云计算管理平台的计算控制组件发送超文本传输协议请求;
计算控制组件,用于基于接收到的所述超文本传输协议请求,查找到对应的虚拟主机以及其所在的宿主机;
计算控制组件,还用于将虚拟主机信息以及事件对象类型发送到运行在宿主机层面的计算服务组件;
计算服务组件,用于进行os-interface-address处理;
计算服务组件,还用于调用所述os-interface-address处理,向宿主机发送guest-network-get-interfaces类型消息;
读取单元,用于基于接收到的所述guest-network-get-interfaces类型消息,读取系统网卡IP地址信息。
优选地,所述计算控制组件在执行基于接收到的所述超文本传输协议请求,查找到对应的虚拟主机以及其所在的宿主机时,具体用于:
通过计算控制组件的ServersController类对所述超文本传输协议请求进行处理,查找到对应的虚拟主机以及其所在的宿主机。
优选地,所述计算服务组件在执行进行os-interface-address处理时,具体用于:
通过计算服务组件的InstanceEvents类进行os-interface-address处理。
综上所述,本发明公开了一种获取虚拟机主机IP的方法,当需要获取虚拟机主机IP时,首先获取虚拟主机表,然后基于获取的虚拟主机表获取虚拟主机网卡地址信息。本发明能够解决数据缺失可能性问题,提高了获取虚拟主机IP使用信息的准确度;以及能够简化处理过程,相对于现有技术省略两次大量数据的查找运算,提高了获取虚拟主机IP使用情况的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术公开的一种获取虚拟机主机IP的方法的流程示意图;
图2为本发明公开的一种获取虚拟机主机IP的方法实施例1的方法流程图;
图3为本发明公开的一种获取虚拟机主机IP的方法实施例2的方法流程图;
图4为本发明公开的一种获取虚拟机主机IP的系统实施例1的结构示意图;
图5为本发明公开的一种获取虚拟机主机IP的系统实施例2的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图2所示,为本发明公开的一种获取虚拟机主机IP的方法实施例1的方法流程图,所述方法可以包括以下步骤:
S201、获取虚拟主机表;
当需要获取虚拟机主机IP时,首先获取到虚拟主机表。
S202、基于获取的虚拟主机表获取虚拟主机网卡地址信息。
然后,根据获取到的虚拟主机表获取到虚拟主机网卡地址信息。
综上所述,在上述实施例中,当需要获取虚拟机主机IP时,首先获取虚拟主机表,然后基于获取的虚拟主机表获取虚拟主机网卡地址信息。能够解决数据缺失可能性问题,提高了获取虚拟主机IP使用信息的准确度;以及能够简化处理过程,相对于现有技术省略两次大量数据的查找运算,提高了获取虚拟主机IP使用情况的效率。
如图3所示,为本发明公开的一种获取虚拟机主机IP的方法实施例2的方法流程图,所述方法可以包括以下步骤:
S301、获取虚拟主机表;
当需要获取虚拟机主机IP时,首先获取到虚拟主机表。其中,虚拟主机为使用qemu-kvm的虚拟化方案的虚拟主机,虚拟主机内部安装有qemu-guest-agent软件,虚拟主机的操作系统为Windows/Linux。
S302、向开源的云计算管理平台的计算控制组件发送超文本传输协议请求;
在获取到虚拟主机表后,通过Restful API向openstack(开源的云计算管理平台)的计算控制组件Nova_api发送http(超文本传输协议)请求。
其中,请求方法为:POST;请求路径为:/servers/
S303、计算控制组件基于接收到的超文本传输协议请求,查找到对应的虚拟主机以及其所在的宿主机;
然后,计算控制组件nova_api根据接收到的超文本传输协议请求,查找到对应的虚拟主机以及其所在的宿主机。
具体的,计算控制组件nova_api的ServersController类中实现对应到请求的处理,通过调用_get_instance根据
S304、计算控制组件将虚拟主机信息以及事件对象类型发送到运行在宿主机层面的计算服务组件;
然后,计算控制组件nova_api通过rabbitmq通信方式,将虚拟主机信息以及event类型‘os-interface-address’发送到运行在宿主机层面的计算服务组件nova_compute。
S305、计算服务组件进行os-interface-address处理;
计算服务组件nova_compute实现对应‘os-interface-address’的处理,该处理中调用dirver模块处理。
具体的,计算服务组件nova_compute的InstanceEvents类中实现对应‘os-interface-address’的处理,该处理中调用dirver模块处理。
S306、计算服务组件调用os-interface-address处理,向宿主机发送guest-network-get-interfaces类型消息;
计算服务组件nova_compute的dirver模块中,通过调用libvirt开源库中的interfaceAddresses处理,向运行在宿主机层面的qemu-kvm进程发的‘guest-network-get-interfaces’类型消息,并等待返回数据。
S307、基于接收到的guest-network-get-interfaces类型消息,读取系统网卡IP地址信息。
维护在qemu-kvm进程中的虚拟主机,运行了qemu-guest-agent软件,该软件会周期性获取qemu-kvm中的消息,在接受到‘guest-network-get-interfaces’类型消息后,读取系统网卡IP地址信息,并格式化成字符串信息,返回给qemu-kvm进程。最终数据反向传递至nova_api展示给用户。
为进一步对本发明的技术方案进行详细说明,下面以具体的例子进行说明:
举例假设前提:在基于qemu-kvm的架构下,在计算服务器节点中创建一台linux系统的虚拟主机,该虚拟主机id是AAAAAA-BBBBBB-CCCCCC,该虚拟主机网卡eth0配置了IP地址192.168.0.100/24。
方法举例:
运行计算控制组件Nova_api在控制服务器节点(该节点IP地址为172.18.16.1)并监控系统8774端口,被动等待http请求。
运行消息通信组件rabbitmq在控制服务器节点,负责为Nova_api组件传递消息。
运行计算服务组件Nova_compute在计算服务器节点,接收rabbitmq发送过来的消息,并根据消息内容,进行相应的处理。
用户想要获取虚拟主机AAAAAA-BBBBBB-CCCCCC的IP地址信息,则向控制服务器节点发送http请求。例如:POST http://172.18.16.1:8774/v2.1/servers/AAAAAA-BBBBBB-CCCCCC/action–data{"os-interface-address":null};
等待http请求响应后,则获得虚拟主机AAAAAA-BBBBBB-CCCCCC的IP地址信息数据:
综上所述,本发明能够解决数据缺失可能性问题,提高了获取虚拟主机IP使用信息的准确度;以及能够简化处理过程,相对于现有技术省略两次大量数据的查找运算,提高了获取虚拟主机IP使用情况的效率。
如图4所示,为本发明公开的一种获取虚拟机主机IP的系统实施例1的结构示意图,所述系统可以包括:
第一获取模块401,用于获取虚拟主机表;
当需要获取虚拟机主机IP时,首先获取到虚拟主机表。
第二获取模块402,用于基于获取的虚拟主机表获取虚拟主机网卡地址信息。
然后,根据获取到的虚拟主机表获取到虚拟主机网卡地址信息。
综上所述,在上述实施例中,当需要获取虚拟机主机IP时,首先获取虚拟主机表,然后基于获取的虚拟主机表获取虚拟主机网卡地址信息。能够解决数据缺失可能性问题,提高了获取虚拟主机IP使用信息的准确度;以及能够简化处理过程,相对于现有技术省略两次大量数据的查找运算,提高了获取虚拟主机IP使用情况的效率。
如图5所示,为本发明公开的一种获取虚拟机主机IP的系统实施例2的结构示意图,所述系统可以包括:
第一获取模块501,用于获取虚拟主机表;
当需要获取虚拟机主机IP时,首先获取到虚拟主机表。其中,虚拟主机为使用qemu-kvm的虚拟化方案的虚拟主机,虚拟主机内部安装有qemu-guest-agent软件,虚拟主机的操作系统为Windows/Linux。
发送单元502,用于向开源的云计算管理平台的计算控制组件发送超文本传输协议请求;
在获取到虚拟主机表后,通过Restful API向openstack(开源的云计算管理平台)的计算控制组件Nova_api发送http(超文本传输协议)请求。
其中,请求方法为:POST;请求路径为:/servers/
计算控制组件503,用于基于接收到的超文本传输协议请求,查找到对应的虚拟主机以及其所在的宿主机;
然后,计算控制组件nova_api根据接收到的超文本传输协议请求,查找到对应的虚拟主机以及其所在的宿主机。
计算控制组件503,还用于将虚拟主机信息以及事件对象类型发送到运行在宿主机层面的计算服务组件504;
然后,计算控制组件nova_api通过rabbitmq通信方式,将虚拟主机信息以及event类型‘os-interface-address’发送到运行在宿主机层面的计算服务组件nova_compute。
计算服务组件504,用于进行os-interface-address处理;
计算服务组件nova_compute实现对应‘os-interface-address’的处理,该处理中调用dirver模块处理。
计算服务组件504,还用于调用os-interface-address处理,向宿主机发送guest-network-get-interfaces类型消息;
计算服务组件nova_compute的dirver模块中,通过调用libvirt开源库中的interfaceAddresses处理,向运行在宿主机层面的qemu-kvm进程发的‘guest-network-get-interfaces’类型消息,并等待返回数据。
读取单元505,用于基于接收到的guest-network-get-interfaces类型消息,读取系统网卡IP地址信息。
维护在qemu-kvm进程中的虚拟主机,运行了qemu-guest-agent软件,该软件会周期性获取qemu-kvm中的消息,在接受到‘guest-network-get-interfaces’类型消息后,读取系统网卡IP地址信息,并格式化成字符串信息,返回给qemu-kvm进程。最终数据反向传递至nova_api展示给用户。
综上所述,本发明能够解决数据缺失可能性问题,提高了获取虚拟主机IP使用信息的准确度;以及能够简化处理过程,相对于现有技术省略两次大量数据的查找运算,提高了获取虚拟主机IP使用情况的效率。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
- 一种获取虚拟机主机IP的方法及系统
- 一种虚拟机复用宿主机MAC和IP的方法及系统