使用tcp方式连接libvirtd

来源:互联网 发布:知乎 大鹏 装修 编辑:程序博客网 时间:2024/05/22 15:00

使用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使用率:

import libvirt as _libvirt import time   class libvirt_client(object):     def __init__(self,uri):         self.ip = uri         self.uri = 'qemu+tcp://%s/system' % uri         self.connect()          def connect(self):         self.conn = _libvirt.open(self.uri)          def check(self,uuid_string):         result = dict()         time_sleep = 3         dom = self.conn.lookupByUUIDString(uuid_string)         infos_first = dom.info()         start_cputime = infos_first[4]         start_time = time.time()         time.sleep(time_sleep)         infos_second = dom.info()         end_cputime = infos_second[4]         end_time = time.time()         cputime = (end_cputime - start_cputime)         cores = infos_second[3]         cpu_usage = 100 * cputime / (time_sleep*cores*1000000000)         print cpu_usage   virt = libvirt_client('172.16.0.209') virt.check('ef809edd-2168-4007-8319-3d2acbc49aff')

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

#!/usr/bin/python import sys  try:     import libvirt as _libvirt except (ImportError,ImportWarning) as e:     print "Can not find python-libvirt, in ubuntu just run \"sudo apt-get install python-libvirt\"."     print e     sys.exit(1)   def list_uuids(host):     dom_ids = []     uri = 'qemu+tcp://%s/system' % host     try:         conn = _libvirt.open(uri)     except Exception,e:         print 'libvirt error: can not connect to remote libvirtd'         raise e     domain_ids = conn.listDomainsID()     for domain_id in domain_ids:         dom = conn.lookupByID(domain_id)         dom_ids.append(dom.UUIDString())     print dom_ids  list_uuids('172.16.0.209')


原创粉丝点击