CentOS7安装测试kvm虚拟机时遇到的问题总结笔记
1、当在ovs网桥内添加虚拟接口时,出现ovs-vsctl: Error detected while setting up ‘xxx’: could not open network device xxx (No such device).
//网桥内添加port出现错误
[root@localhost ~]# ovs-vsctl add-port eth2 kvm02-eth2
ovs-vsctl: Error detected while setting up 'kvm02-eth2': could not open network device kvm02-eth2 (No such device). See ovs-vswitchd log for details.
//查看网桥内的port信息,可以看到接口状态报错
[root@localhost ~]# ovs-vsctl show
Bridge "eth1"
Port "kvm02-eth1"
Interface "kvm02-eth1"
error: "could not open network device kvm02-eth1 (No such device)"
//设置port的type属性为internal
[root@localhost ~]# ovs-vsctl set Interface kvm02-eth1 type=internal
2、某一执行文件或命令提示:Permission denied,原因是当前用户执行权限不够,只需chmod命令添加相应权限即可,添加后再尝试,success。
[root@localhost ~]# ./clearline 5001
-bash: ./clearline: Permission denied
[root@localhost ~]# chmod 777 clearline
[root@localhost ~]# ./clearline 5001
killing 9223
killing 11882
socat reset success!
3、创建新的虚拟机时,出现error: internal error Network is already in use by interface kvm01-br0
这个问题表示新创建的虚机的上网口ip地址与服务器的default.xml中的IP地址冲突了,比较直接的解决办法是先卸载之前创建出的虚拟机,再重新创建新的虚拟机。
[root@localhost vfw]# virsh undefine kvm01
[root@localhost vfw]# virsh undefine kvm02
//创建新的虚机
[root@localhost vfw]# ./hsvfw install ../kvm/tmpimg/1..qcow2 vm02 dhcp-host -n 5 -c 2 -e 4096
//创建vm08
./hsvfw install ../kvm/tmpimg/SG6000-R8P2_INTG-VM-ARM-V6-r0118.qcow2 vm08 kvm08 -n 5 -c 8 -e 16384
5、ovs网桥绑定虚拟机接口,将物理接口与虚拟机接口添加进同一个网桥下,即可实现流量链路互通。一个物理口可对应多个虚拟机的接口,即多个虚拟机的其中一个接口可以共用一个物理口,但只能一一对应,不能将同一个虚拟机的多个接口放入同一个ovs网桥内。
[root@localhost vfw]# ovs-vsctl add-br br50
[root@localhost vfw]# ovs-vsctl del-br br50 //创建与删除网桥
[root@localhost vfw]# ovs-vsctl add-port eth1 kvm01-eth1 //添加接口kvm01-eth1到eth1网桥内
[root@localhost vfw]# ovs-vsctl del-port eth1 kvm01-eth1 //从eth1网桥删除接口kvm01-eth1
4、性能调优方式之一,虚拟机绑核将虚拟机的每一个vcpu绑定在服务器上的物理CPU上,由该CPU处理相应的线程(例如IO线程),可以减少由于cpu调度导致的多余资源开销,从而提升虚拟机性能(以华为鲲鹏920服务器为例)。
1)使用numactl -H查看服务器上NUMA节点信息,若提示不识别numactl,则使用yum install numactl进行安装;
[root@localhost vfw]# numactl -H
available: 4 nodes (0-3)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
node 0 size: 31922 MB
node 0 free: 24819 MB
node 1 cpus: 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
node 1 size: 32729 MB
node 1 free: 29439 MB
node 2 cpus: 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
node 2 size: 32729 MB
node 2 free: 19470 MB
node 3 cpus: 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
node 3 size: 32711 MB
node 3 free: 18526 MB
node distances:
node 0 1 2 3
0: 10 12 20 22
1: 12 10 22 24
2: 20 22 10 12
3: 22 24 12 10
2)查看qemu主线程所处的numa node,如下所示,qemu主线程运行在node2上;
[root@localhost vfw]# numastat -c qemu-kvm
Per-node process memory usage (in MBs) for PID 122616 (qemu-kvm)
Node 0 Node 1 Node 2 Node 3 Total
------ ------ ------ ------ -----
Huge 0 0 0 0 0
Heap 0 0 48 0 48
Stack 0 0 0 0 0
Private 0 0 4242 20 4262
------- ------ ------ ------ ------ -----
Total 0 0 4290 20 4310
3)虚机绑核尽量将其绑在同一个numa node下,2)中服务器即需要绑定在node2的物理cpu上,将修改写入对应的虚拟机.xml文件内;
[root@localhost vfw]# virsh edit kvm01
将2部分做如下修改即可:
<vcpu placement='static' cpuset='64,66'>2</vcpu>
<cputune>
<vcpupin vcpu='0' cpuset='64'/>
<vcpupin vcpu='1' cpuset='66'/>
<emulatorpin cpuset='64,66'/>
</cputune>
参数说明:
- emulatorpin cpuset=‘64,66’:表示将QEMU主线程绑定到4至7物理CPU上。
- vcpu placement = ‘static’ cpuset=‘64,66’:用于IO线程、worker threads线程仅能使用64和66这2个核,若不配置此参数,虚拟机任务线程会在CPU任意core上浮动,会存在更多的跨NUMA和跨DIE损耗。
- vcpupin用于限制对CPU线程做一对一绑核。若不使用vcpupin绑CPU线程,则线程会在64和66这个2个核之间切换,造成额外开销。
6、当服务器重启之后,操作虚拟机时,出现ovs-vsctl: unix:/usr/local/var/run/openvswitch/db.sock: database connection failed (No such file or directory),执行以下脚本:
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--private-key=db:Open_vSwitch,SSL,private_key \
--certificate=db:Open_vSwitch,SSL,certificate \
--bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
--pidfile --detach
ovs-vsctl --no-wait init
ovs-vswitchd --pidfile --detach
7、当出现交换机到服务器的链路不通时,在虚拟机running的情况下,首先排查ovs网桥下的虚拟机接口是否状态正常,若出现以下error: "could not add network device kvm02-eth4 to ofproto(Device or resource busy),则按照下面的配置进行修改:
1016 ovs-vsctl list-ports eth4
1017 ifconfig enp189s0f3 down
1018 ifconfig enp189s0f3
1019 ifconfig enp189s0f3 up
1020 ifconfig enp189s0f3 4.1.1.150/8
1021 ping 4.1.1.100
1022 ping 4.1.1.1
1024 yum install tcpdump
1025 tcpdump -i enp189s0f3 -vv #线上抓包不保存文件#
1026 tcpdump -i enp189s0f3 -w sss.pcap #抓包并保存.pcap文件#
[root@localhost vfw]# ovs-vsctl show
514f1bf9-2d5b-445f-a824-27b6634e4de8
Bridge "eth4"
Port "kvm02-eth4"
Interface "kvm02-eth4"
error: "could not add network device kvm02-eth4 to ofproto (Device or resource busy)"
Port "kvm04-eth4"
Interface "kvm04-eth4"
error: "could not add network device kvm04-eth4 to ofproto (Device or resource busy)"
若出现以上error回显,则表明创建出来的虚拟机接口不在对应的ovs网桥下,根因是创建虚拟机时,所有虚拟机接口被默认放在br网桥下,如下图所示:
可以看到,所有虚拟机接口都在br网桥下,我们需要将它们全释放出来,使用以下命令:
[root@localhost vfw]# brctl delif kvm01-br1 kvm01-eth1
[root@localhost vfw]# brctl delif kvm01-br2 kvm01-eth2
配置完成后,再ovs-vsctl show可以看到有问题的接口都变为正常状态,如下图所示:
再通过配置服务器IP等操作,ping直连的交换机vlan接口ip地址,ping通则表示问题已经解决。