OpenStack性能优化深度指南:从系统到应用


categories: - OpenStack运维 tags: - OpenStack - 性能优化 - 调优 - KVM - 存储性能


OpenStack性能优化深度指南:从系统到应用

一、性能优化概述

1.1 性能优化层次

OpenStack性能优化涉及多个层次:

层次 优化内容 影响范围
硬件层 CPU、内存、磁盘、网络 全局
系统层 内核参数、文件系统 全局
虚拟化层 KVM配置、NUMA 计算节点
应用层 OpenStack服务配置 单服务
应用层 数据库、缓存 整体性能

1.2 性能基线


# 建立性能基线
# 记录以下指标:
# - API响应时间
# - 虚拟机创建时间
# - 存储IOPS
# - 网络带宽
# - CPU利用率
# - 内存使用率

# 使用benchmark工具
ceilometer meter-list
openstack metric benchmarks

二、计算层优化

2.1 KVM虚拟化优化


# 1. 验证KVM支持
kvm-ok

# 2. 加载KVM模块
modprobe kvm-intel
modprobe kvm

# 3. 启用嵌套虚拟化
# /etc/modprobe.d/kvm-nested.conf
options kvm-intel nested=Y
options kvm-intel enable_shadow_vmcs=1
options kvm-intel enable_apicv=0

2.2 Libvirt优化


# /etc/libvirt/libvirtd.conf

# 性能优化
listen_addr = "0.0.0.0"
unix_sock_group = "libvirtd"
unix_sock_ro_perms = "0777"
unix_sock_rw_perms = "0770"

# 连接优化
max_clients = 1000
max_workers = 50
max_queued = 500

# 存储优化
connection_driver = "qemu"

2.3 Nova计算优化


# /etc/nova/nova.conf

[DEFAULT]
# 资源调度优化
cpu_allocation_ratio = 16.0
ram_allocation_ratio = 1.5
disk_allocation_ratio = 1.0

# 并发优化
max_workers = 16
rpc_response_timeout = 60

[libvirt]
# CPU优化
virt_type = kvm
cpu_mode = host-passthrough

# 内存优化
memory_backing = shared
hugepages_path = /dev/hugepages
hugepages = 1024

# CPU Pinning
cpu_shared_set = 0-7
cpu_exclusive_set = 8-15

# IO优化
disk_cachemodes = writeback
disk_ats = on

2.4 NUMA配置


# 查看NUMA信息
numactl --hardware
lscpu | grep NUMA

# 配置虚拟机NUMA
openstack flavor set m2.large \
  --property hw:numa_nodes=2 \
  --property hw:numa_cpus.0=0,1,2,3 \
  --property hw:numa_cpus.1=4,5,6,7 \
  --property hw:numa_mem.0=4096 \
  --property hw:numa_mem.1=4096

三、网络层优化

3.1 Linux内核网络优化


# /etc/sysctl.conf

# 网络缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 1048576
net.core.wmem_default = 1048576

# TCP优化
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_max_syn_backlog = 65535

# 连接数
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535

3.2 Neutron网络优化


# /etc/neutron/plugins/ml2/openvswitch_agent.ini

[ovs]
# 启用VXLAN隧道
enable_tunneling = True
local_ip = 10.0.0.11
tunnel_types = vxlan

# 性能优化
l2_population = True
arp_responder = True
prevent_arp_spoofing = True

# 流表优化
flow_table_size = 65536

[agent]
# 减少polling间隔
polling_interval = 2

# 启用vhostuser优化
vhostuser_socket_group = libvirtd

3.3 网卡中断优化


# 查看网卡中断
cat /proc/interrupts | grep eth

# 启用RSS
ethtool -L eth0 combined 16

# 绑定CPU
for irq in $(cat /proc/interrupts | grep eth0 | cut -d: -f1); do
    echo $irq > /proc/irq/$irq/smp_affinity_list
done

# 使用irqbalance
systemctl enable irqbalance
systemctl start irqbalance

四、存储层优化

4.1 磁盘IO优化


# 1. 使用deadline调度器
echo deadline > /sys/block/sda/queue/scheduler

# 2. 优化队列深度
echo 512 > /sys/block/sda/queue/nr_requests

# 3. 启用写缓存
echo "write back" > /sys/block/sda/queue/write_cache

# 4. 调整read-ahead
blockdev --setra 4096 /dev/sda

4.2 Ceph存储优化


# /etc/ceph/ceph.conf

[osd]
# IO优化
osd_op_threads = 8
osd_disk_threads = 4
osd_map_cache_size = 512
osd_client_op_timeout = 60

# 写优化
osd_journal_size = 10240
osd_recovery_op_priority = 4
osd_recovery_max_active = 3

# 内存优化
osd_memory_target = 4294967296
osd_memory_gc_fraction = 0.7

4.3 LVM优化


# 创建LVM卷组时指定stripe
vgcreate --stripes 4 --stripesize 256 cinder-volumes /dev/sdb /dev/sdc /dev/sdd /dev/sde

# 配置LVM缓存
# 提高IO性能
lvcache --cachesize 10G --cachemode rw vg/lv

五、数据库层优化

5.1 MySQL优化


# /etc/mysql/mariadb.conf.d/openstack.cnf

[mysqld]
# 连接优化
max_connections = 1000
wait_timeout = 600
max_allowed_packet = 256M

# 缓存优化
innodb_buffer_pool_size = 8G
innodb_buffer_pool_instances = 8
innodb_log_file_size = 1G
innodb_log_buffer_size = 64M

# 查询优化
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_file_per_table = ON

# 线程优化
thread_cache_size = 64
thread_pool_size = 32

5.2 RabbitMQ优化


# /etc/rabbitmq/rabbitmq.conf

# 连接优化
{loopback_users, []},
{vm_memory_high_watermark, 0.6},
{vm_memory_calculation_strategy, rss},

# 队列优化
{default_passive, true},
{default_exchange_type, topic},

# 网络优化
{tcp_listen_options, [
    {backlog, 1000},
    {nodelay, true}
]},

# 集群优化
{cluster_nodes, {[rabbit@controller1, rabbit@controller2, rabbit@controller3], disc}}.

六、应用层优化

6.1 API性能优化


# /etc/nova/nova.conf

[api]
# API并发
api_workers = 16

# 认证缓存
auth_strategy = keystone
cache = true

# 限制配置
osapi_max_limit = 1000
default_limit = 100

# /etc/neutron/neutron.conf

[DEFAULT]
api_workers = 16
rpc_workers = 16

6.2 缓存优化


# /etc/nova/nova.conf

[cache]
enabled = true
backend = oslo_cache.memcache_pool
memcache_servers = controller1:11211,controller2:11211

# 缓存时间
config_refresh_time = 60
metadata_cache_timeout = 300

# /etc/keystone/keystone.conf

[cache]
backend = oslo_cache.memcache_pool
memcache_servers = controller1:11211,controller2:11211

七、监控与调优

7.1 性能监控指标


# CPU监控
mpstat -P ALL 1

# 内存监控
free -h
vmstat 1

# IO监控
iostat -x 1
iotop -o

# 网络监控
sar -n DEV 1
iftop -i eth0

# 综合监控
htop
glances

7.2 性能测试


# API性能测试
time for i in {1..100}; do openstack server list; done

# 虚拟机创建性能
time openstack server create --flavor m1.small --image cirros test-vm

# 网络性能测试
iperf3 -c  -P 4 -t 60

# 存储性能测试
fio --name=test --ioengine=libaio --direct=1 --rw=randread --bs=4k --size=1G --numjobs=4 --runtime=60

八、总结

本文深入介绍了OpenStack性能优化的完整方案。

核心要点:

下篇预告: 《OpenStack最佳实践总结》

发表回复

后才能评论