• 使用tcp方式连接libvirtd


    Libvirt是一个软件集合,便于使用者管理虚拟机和其他虚拟化功能,比如存储和网络接口管理等等。这些软件包括一个API库、一个daemon(libvirtd)和一个命令行工具(virsh)。Libvirt的主要目标是:提供一种单一的方式管理多种不同的虚拟化提供方式和hypervisor。

    只要远程服务器运行了libvirtd,libvirt的客户端就可以连接到服务器。

    使用最简单的SSH方式,只要拥有SSH连接到服务器的权限,就可以无需配置:

    qemu+ssh://root@example.com/system

    例如: qemu+ssh://root@172.16.0.12/system ,本机SSH连接到172.16.0.12时,要使用证书登录,否则每次连接都需要输入SSH用户名和密码。

    TCP方式:

    qemu+tcp://example.com/system

    例如:qemu+tcp://172.16.0.15/system,服务端只需要做简单配置即可:

    vim /etc/libvirt/libvirtd.conf:

    listen_tls = 0          #禁用tls登录
    listen_tcp = 1           #启用tcp方式登录
    tcp_port = "16509"       #tcp端口16509
    listen_addr = "0.0.0.0"
    unix_sock_group = "libvirtd"
    unix_sock_rw_perms = "0770"
    auth_unix_ro = "none"
    auth_unix_rw = "none"
    auth_tcp = "none"         #TCP不使用认证
    max_clients = 1024        #最大总的连接客户数1024
    min_workers = 50          #libvirtd启动时,初始的工作线程数目
    max_workers = 200       #同上,最大数目
    max_requests = 1000      #最大同时支持的RPC调用,必须大于等于max_workers
    max_client_requests = 200   #每个客户端支持的最大连接数

    同时修改libvirt-bin的配置文件:

    vim /etc/default/libvirt-bin:

    # Start libvirtd to handle qemu/kvm:
    start_libvirtd="yes"

    # options passed to libvirtd, add "-l" to listen on tcp
    libvirtd_opts="-d -l --config /etc/libvirt/libvirtd.conf"

    昨晚以上修改后,执行service libvirt-bin restart即可。 netstat -anpt就能看到libvirtd监听在TCP 16509端口。

    下面附上一段python连接libvirtd的代码,并包含如何计算CPU使用率:

     1 import libvirt as _libvirt
     2 import time
     3 
     4 
     5 class libvirt_client(object):
     6     def __init__(self,uri):
     7         self.ip = uri
     8         self.uri = 'qemu+tcp://%s/system' % uri
     9         self.connect()
    10     
    11     def connect(self):
    12         self.conn = _libvirt.open(self.uri)
    13     
    14     def check(self,uuid_string):
    15         result = dict()
    16         time_sleep = 3
    17         dom = self.conn.lookupByUUIDString(uuid_string)
    18         infos_first = dom.info()
    19         start_cputime = infos_first[4]
    20         start_time = time.time()
    21         time.sleep(time_sleep)
    22         infos_second = dom.info()
    23         end_cputime = infos_second[4]
    24         end_time = time.time()
    25         cputime = (end_cputime - start_cputime)
    26         cores = infos_second[3]
    27         cpu_usage = 100 * cputime / (time_sleep*cores*1000000000)
    28         print cpu_usage
    29 
    30 
    31 virt = libvirt_client('172.16.0.209')
    32 virt.check('ef809edd-2168-4007-8319-3d2acbc49aff')

    再附上一个列出服务器上所有运行着的实例的UUID的函数:

     1 #!/usr/bin/python
     2 import sys
     3 
     4 try:
     5     import libvirt as _libvirt
     6 except (ImportError,ImportWarning) as e:
     7     print "Can not find python-libvirt, in ubuntu just run \"sudo apt-get install python-libvirt\"."
     8     print e
     9     sys.exit(1)
    10 
    11 
    12 def list_uuids(host):
    13     dom_ids = []
    14     uri = 'qemu+tcp://%s/system' % host
    15     try:
    16         conn = _libvirt.open(uri)
    17     except Exception,e:
    18         print 'libvirt error: can not connect to remote libvirtd'
    19         raise e
    20     domain_ids = conn.listDomainsID()
    21     for domain_id in domain_ids:
    22         dom = conn.lookupByID(domain_id)
    23         dom_ids.append(dom.UUIDString())
    24     print dom_ids
    25 
    26 list_uuids('172.16.0.209')

    下一篇介绍使用SASL认证的方式,连接libvirtd.

  • 相关阅读:
    flex
    当前不会命中断点 源代码与原始版本不一致
    c setjmp longjmp
    VS 快捷键设置
    Lua C API 遍历 table
    lua class
    复习 C++ 中类的函数指针
    apache ab
    rabbitmq
    协程 coroutine
  • 原文地址:https://www.cnblogs.com/huazi/p/2607420.html
Copyright © 2020-2023  润新知