公司已经部署一套OpenStack环境,计算虚拟化采用的是KVM,存储采用cinder对接传统SAN存储,网络使用的是OvS。控制节点3台,计算节点10台,网络节点和控制节点合一。如何通过OpenStack中计算和网络的配置,来实现磁盘/网络的QoS?
磁盘控制可以在cinder或者nova模块中进行:
1)在cinder模块中
一。首先创建一个带限速功能的类型
二。把创建的类型赋给磁盘
如果是已经存在的磁盘:
1.从虚拟机分离磁盘
2.# cinder retype $VOLUME_ID $VOLUME_TYPE_ID
3.给虚拟机挂载磁盘
如果是要新创建磁盘:
1.# cinder create --name $VOLUME_NAME --volume-type $VOLUME_TYPE_ID
2.给虚拟机挂载磁盘
说明:
consumer的合法值为front-end、back-end、both。front-end表示使用前端控制(hypervisor控制,会在libvirt xml文件中定义), 而back-end表示使用后端控制(cinder drivers,需要driver支持),both表示前后端同时进行QoS控制。
libvirt中disk中配置:
<iotune>
<read_iops_sec>2000</read_iops_sec>
<write_iops_sec>1000</write_iops_sec>
</iotune>
2)在nova模块中
<disk type='network' device='disk'>
<driver name='qemu' type='raw' cache='writeback' discard='unmap'/>
<source protocol='rbd' name='images/1a956ba7-25fe-49f1-9513-7adb8928036c'>
<host name='192.168.107.50' port='6789'/>
<host name='192.168.107.51' port='6789'/>
<host name='192.168.107.52' port='6789'/>
<host name='192.168.107.53' port='6789'/>
</source>
<target dev='vda' bus='virtio'/>
<iotune>
<read_bytes_sec>20480</read_bytes_sec>
<write_bytes_sec>10240</write_bytes_sec>
</iotune>
<boot order='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
</disk>
<disk type='network' device='disk'>
<driver name='qemu' type='raw' cache='writeback' discard='unmap'/>
<source protocol='rbd' name='images/1a956ba7-25fe-49f1-9513-7adb8928036c'>
<host name='192.168.107.50' port='6789'/>
<host name='192.168.107.51' port='6789'/>
<host name='192.168.107.52' port='6789'/>
<host name='192.168.107.53' port='6789'/>
</source>
<target dev='vda' bus='virtio'/>
<iotune>
<read_iops_sec>20480</read_iops_sec>
<write_iops_sec>10240</write_iops_sec>
</iotune>
<boot order='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
</disk>
控制网络QoS在nova中
<interface type='bridge'>
<mac address='fa:16:3e:8f:6a:c9'/>
<source bridge='brq5233ef6c-62'/>
<bandwidth>
<inbound average='2048'/>
<outbound average='1024'/>
</bandwidth>
<target dev='tap9573c869-24'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>