你创建的OpenStack高性能虚拟机能实现“零损耗”么?




导读

    

       使用默认参数创建的虚拟机,虚拟机的VCPU在物理CPU不同核心之间动态调度,另外,由于Linux还可能会将软中断,内存交换等进程调度到虚拟机正在使用的物理核心上,这些因素导致这些虚拟机相对于物理机的计算性能可能会产生较大的抖动,不能满足一些对计算SLA要求很严格的业务,比如,很多金融业务就要求99.999%的请求处理时间延时不得高于1毫秒。


高性能虚拟机


为了减少 Linux 和 Hypervisor 对虚拟机的影响,让虚拟机的性能接近物理机,一般可以采用如下优化手段:


  • CPU 绑核(pin):将虚拟 CPU 和物理 CPU 逐一绑定起来,这样不同虚拟机的VCPU各自运行在不同的物理核心上,不会相互影响。


  • CPU隔离(isolate):将虚拟机使用的物理 CPU 从 Linux 隔离出来,Linux Kernel 不再调度任何应用甚至是任何系统进程到这些 CPU 上,尽量让这些CPU 100%为虚拟机使用。


  • CPU拓扑(Topology): CPU 分配尽量不要跨 NUMA ,如果必须要跨NUMA,将 NUMA 拓扑结构呈现给 Guest OS ,同时也把 SMT 拓扑结构呈现给 Guest OS 。


OpenStack 环境


OpenStack Mitaka:Mitaka 现在运行的很好, 新版本的 Cell 机制甚至会导致一些不可预料的结果,我们一直没有冒险去做升级投入。


CentOS 7.3:OpenStack Mitaka 在 CentOS 7.4 的 repo 里面已经找不到了,应该是停止支持了,由于担心一些不必要的包依赖问题,我们继续使用 CentOS 7.3 。


QEMU: CentOS 7默认的qemu 1.5版本非常老,会导致compute节点的resource_tracker不能上报numa_topology到controller节点,导致NUMATopologyFilter无法调度,所以必须升级到2.6。

升级qemu到2.6

计算节点配置


使用numactl查看下主机的numa拓扑结构,比如下面的输出说明 cpu 0-3 在一个numa node上,而 cpu 4-7 在另一个 numa node 上:

numactl --hardware


比如,我们希望将2,3, 6,7隔离出来,专门给虚拟机用,尽量让Linux不要将任何用户进程和系统进程调度到这些cpu上。


首先,编辑/etc/nova/nova.conf, 配置这台主机能用来创建VM的cpu为2,3,6,7:


vcpu_pin_set=2,3,6,7


然后,编辑/boot/grub/grub.conf:

grub.conf

isolcpus: 不要将任何应用和系统进程(softirq, swap.。。)调度到指定的CPU上;


nohzfull: 指定的CPU上没有时钟中断;


rcunocbs: 不要在指定的CPU上调度执行rcb callbacks;


最后,重启主机生效。


控制节点配置


修改/etc/nova/nova.conf, 将调度过滤器NUMATopologyFilter加入到scheduler_default_filters:


scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,CoreFilter,NUMATopologyFilter


然后,重启nova-scheduler服务


systemctl restart openstack-nova-scheduler.service


创建支持cpu pin的flavor:


openstack flavor set m1.large --property hw:cpu_policy=dedicated --property hw:cpu_thread_policy=require


CPU-POLICY :

shared: (默认)VCPU会在PCPU上任意漂移;

dedicated: VCPU会绑定在指定的PCPU上;

CPU-THREAD-POLICY :

prefer: (默认) VCPU会优先选择同一核心上的超线程。

isolate: VCPU会选用不同核心的超线程。

require: VCPU优先选择同一核心上的超线程,如果主机的BIOS超线程没有开启,就会报告失败。

除了hw:cpu_policy和hw:cpu_thread_policy,这里还可以定义hw:numa_nodes,hw:numa_cpus.N,hw:numa_mem.N等NUMA策略。

用指定的flavor创建虚拟机:

openstack server create --image cirros --nic net-id=provider-net --flavor m1.large instance-001


验证


在计算节点上使用virsh dumpxml domID观察虚拟机,输出的xml应该包括类似下面的内容:

virsh dumpxml

转载自云谷计算


阅读推荐:

公开课|Kubernetes与容器云实践,10.19晚八点开趴!

1分钟投票,赢 OpenStack 悉尼峰会限量T恤


活动推荐:



本社区拥有多个国内最活跃的开源云计算讨论微信群,长期分享优质文章与PPT资料,进群请加管理员微信yookee1983,并注明“加群”。

投稿邮箱:openstackcn@sina.cn

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenStack实现keepalived的虚拟IP,需要进行以下配置: 1. 安装keepalived软件包:在每个集群节点中安装keepalived软件包。 2. 配置keepalived:在每个集群节点中配置keepalived,包括虚拟IP地址、优先级、监控端口等。 3. 配置虚拟IP地址:在OpenStack中配置虚拟IP地址,使其与keepalived中配置的虚拟IP地址相同。 4. 配置集群节点IP地址:在OpenStack中配置每个集群节点的IP地址,使其与keepalived中配置的IP地址相同。 以下是一个示例配置文件: ``` vrrp_script chk_haproxy { script "/usr/bin/killall -0 haproxy" interval 2 weight 2 } vrrp_instance haproxy_vip { interface eth0 virtual_router_id 50 priority 100 advert_int 1 authentication { auth_type PASS auth_pass mypassword } virtual_ipaddress { 10.0.0.100/24 } track_script { chk_haproxy } } ``` 在上述示例中,配置了一个名为haproxy_vip的vrrp_instance,其虚拟路由器ID为50,虚拟IP地址为10.0.0.100/24,优先级为100,使用密码验证。同时,还配置了一个名为chk_haproxy的vrrp_script,用于监控Haproxy进程是否正常运行。如果haproxy进程不正常,就会引发故障转移,将虚拟IP地址切换到另一个节点上。 在OpenStack中,还需要配置每个节点的IP地址和虚拟IP地址。可以使用Neutron服务来配置这些网络设置。例如,可以使用以下命令创建一个名为my-network的网络: ``` $ openstack network create my-network ``` 然后,可以使用以下命令创建一个名为my-subnet的子网,并将其分配给my-network: ``` $ openstack subnet create --network my-network --subnet-range 10.0.0.0/24 my-subnet ``` 接下来,可以使用以下命令创建一个名为my-router的路由器,并将其连接到my-subnet: ``` $ openstack router create my-router $ openstack router add subnet my-router my-subnet ``` 最后,在每个节点上使用以下命令配置IP地址: ``` $ sudo ip addr add 10.0.0.101/24 dev eth0 ``` 在完成上述配置后,就可以使用keepalived来实现虚拟IP地址的故障转移了。如果其中一个节点故障,keepalived会自动将虚拟IP地址切换到另一个节点上,确保服务的高可用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值