使用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.