【cinder限速】

为了减缓来自实例的数据访问速度的减慢,openstack block storage支持对卷数据复制带宽的速率限制,请修改cinder后端配置文件将文件卷复制带宽限制为最高100MB/s

# The upper limit of bandwidth of volume copy. 0 => unlimited (integer value)
#volume_copy_bps_limit = 0
volume_copy_bps_limit = 100000000
#默认是字节每秒,这里从b开始算,这里添加单位无法启动。

然后重启服务即可,注意在计算节点上。

systemctl restart openstack-cinder-volume*

backend_allow_tenant_qos = True
#用于开启租户QoS,即在使用Cinder存储服务时,可以为不同的租户分配不同的服务质量(QoS),从而为不同的业务应用提供适当的服务质量保障。
#若没有开启此选项,则无法使用租户QoS功能。

【dashboard调优】

安装dashboard服务后,将dashboard中的Djingo数据修改为存储在文件中(此种修改解决了All-in-one快照在其他云平台dashboard不能访问的问题)

[root@controller ~]# vim /etc/openstack-dashboard/local_settings
#编辑配置
#搜索SESSION_ENGINE
#SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
#将其注释,更改为数据存储在文件中。
#重启memcached,httpd即可。

【glance最大存储】

在openstack平台上,请修改glance后端配置文件,将用户的镜像存储配额限制为200GB

[root@controller ~]# vim /etc/glance/glance-api.conf
#user_storage_quota = 0
user_storage_quota = 200GB
#将其修改为用户镜像存储配置限制为200GB
#这里的用是指租户。

然后重启服务即可。

systemct restart openstack-glance*

【虚拟机磁盘性能优化】

修改块设备I/O调度器默认值为none,在虚拟机当中相当于能直接访问宿主机磁盘。

[root@test ~]# cat /sys/block/vda/queue/scheduler
[root@test ~]# echo 'none' > /sys/block/vda/queue/scheduler

【虚拟机网络优化】

openstack使用的虚拟主机的网络都使用半虚拟化类型(设置在资源节点即可)

vim /etc/nova/nova.conf
# Use virtio for bridge interfaces with KVM/QEMU (boolean value)
use_virtio_for_bridges=true

【虚拟机cpu优化】

想要优化kvm,从cpu方面就需要通过调整kvm的NUMA对应关系进行优化。

首先,查看kvm虚拟机的cpu信息

[root@localhost work-dir]# virsh vcpuinfo vm2
VCPU:           0
CPU:            1
状态:       running
CPU 时间:   0.6s
CPU关系:      yyyy

VCPU:           1
CPU:            2
状态:       running
CPU 时间:   0.0s
CPU关系:      yyyy

上面的信息来看,这个虚拟机的cpu是双核的,cpu:代表着是跑在了物理机的cpu1和cpu2上,使用时间是0.6s,一个0.0s,yyyy是使用物理cpu内部的逻辑核,一个y就代表一个cpu的逻辑核。这里宿主机的逻辑核有4个。需要减少跨cpu的交互使用,从而提升虚拟机性能。

然后设置vm2的所有虚拟cpu都使用同一个宿主机的逻辑cpu

virsh vcpupin vm2 虚拟cpu号  逻辑cpu号
例如:
[root@localhost work-dir]# virsh vcpupin vm2 0 1

[root@localhost work-dir]# virsh vcpupin vm2 1 1

[root@localhost work-dir]# virsh vcpuinfo vm2
VCPU:           0
CPU:            1
状态:       running
CPU 时间:   39.6s
CPU关系:      -y--

VCPU:           1
CPU:            1
状态:       running
CPU 时间:   24.1s
CPU关系:      -y--

【nova调优详解】

#超售比
ram_allocation_ratio = 1.0
#默认是1.5,内存分配超售比

disk_allocation_ratio = 1.2
#磁盘超售比例,默认是1:1倍

cpu_allocation_ratio = 4.0
#cpu超售比,建议超售4倍,vcpu可以比宿主机内核多4倍
###################################
#预留量
vcpu_pin_set = 4-%
#%是物理机的cpu内核总数来决定的,比如上面这个
#预留4个cup防止虚拟机跟组主机抢cpu资源

reserved_host_memory_mb = 4096
#预留的内存量,这部分内存不能被虚拟机所使用,单位是m

reserved_host_disk_mb = 10240
#磁盘预留量,这部分空间不能被虚拟机所使用,单位是m
###################################
#服务下线时间
service_down_time=120
服务下线时间阈值,单位是秒,如果一个节点上的nova服务超过这个时间没有上报数据库

【openstack内存优化】

关闭系统的内存共享,打开透明大页。

计算节点但可以配置cpu与内存的超配比例,但是一旦使用大页内存,内存便不能再进行超配。因为使用大页内存时,虚拟机内存页必须与主机内存页——映射,并且主机操作系统能通过swap分区分配大页内存,这也排除了内存超配的可能,大页内存的时候,意味着需要支持内存作为专用资源的虚拟机类型。

#关闭系统内存共享
[root@compute ~]# cat /sys/kernel/mm/ksm/run
0
#这里run是设置ksm属性的状态,这里是0视为关闭。
#而pages_shared,ksm正在使用的不可交换的内核页面数量。
[root@compute ~]# cat /sys/kernel/mm/ksm/pages_sharing
0
#关闭透明大页。
[root@compute ~]# echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
[root@compute ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
#上面时物理机的路径,虚拟机的略有不同。 
#enabled是决定是否启用透明大页,而defrag是用于指定是否开启内存碎片整理
always madvise [never]
[root@compute ~]# echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
[root@compute ~]# cat /sys/kernel/mm/transparent_hugepage/enabled

【保留实例状态】

服务器意外断电,恢复供电后openstack虚拟机处于关闭状态,修改配置文件使openstack集群断电恢复后,实例重启为原先状态。修改资源节点。

#修改nova配置
vim /etc/nova/nova.conf
resume_guests_state_on_host_boot=true
#重启nova-compute服务。

【防止syn洪水攻击】

修改controller节点的相关配置文件,并开启SYN cookie,防止SYN洪水攻击

#开启SYN Cookies
[root@compute ~]# sysctl -a | grep _syn
fs.xfs.inherit_sync = 1
net.ipv4.tcp_max_syn_backlog = 512
net.ipv4.tcp_syn_retries = 6
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syncookies = 1
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.ens33.stable_secret"
sysctl: reading key "net.ipv6.conf.ens34.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
#查看_syn默认相关配置
[root@compute ~]# echo 'net.ipv4.tcp_syncookies = 1' >> /etc/sysctl.conf
[root@compute ~]# sysctl -p
net.ipv4.tcp_syncookies = 1
#虽然syn默认开启,但是需要添加配置文件,最后生效。
#开启syn可以防范少量的洪水攻击,0表示关闭。

【解决虚拟机排队】

太多虚拟机同时启动出现排队现象,导致虚拟机启动超时,从而获取不到ip地址而报错失败,通过调优设置解决问题。

编辑配置文件/etc/nova/nova.conf

vif_plugging_is_fatal=true   
#将其修改为false

这里将vif_plugging_is_fatal设置为False时,关闭计算机节点的neutron-openvswitch-agent服务,虚拟机可以正常启动,但是端口为down,虚拟机也拿不到ip地址,启动ovs-agent后port状态立刻变为active,虚拟机可以拿到ip。

systemctl restart openstack-nova*

【自动清理镜像缓存】

在openstack平台的一台计算节点创建虚拟机,若是第一次在该节点创建此虚拟机,会先将镜像文件复制到该计算节点目录/var/lib/nova/instances/_base,长期下来,该目录会占用比较大的磁盘空间而需要清理,可以通过修改nova的配置文件来自动清理该缓存目录,即在该节点没有使用其镜像启动的云主机,那么这个镜像在过一定的时间后就会被自动删除

[root@compute ~]# vim /etc/nova/nova.conf
#remove_unused_base_images=true
#remove_unused_original_minimum_age_seconds=86400
#image_cache_manager_interval=2400
#修改以上参数
remove_unused_base_images=True
remove_unused_original_minimum_age_seconds=3
image_cache_manager_interval=5

remove_unused_base_images用于开启自动清理镜像缓存。

image_cache_manager_interval是为了缩短测试时间才需要设置,默认40分钟才检查一次

remove_unused_original_minimum_age_seconds也是为了缩短测试时间,默认是超过247个消失的无用base镜像才会被删除。

注意:三个选项都是在资源节点修改。

【linux脏数据回写时间】

inux用cache/buffer缓存数据,有回刷任务在适当时候把脏数据回刷到存储介质中,对不同的场景对触发回刷的需求也不一样,对io回刷触发时机的选择,是io性能优化的一个重要方法。

#通过sysctl -p来进行修改,在/etc/sysctl.conf中写入参数
vm.dirty_expire_centisecs = 3000
#然后sysctl -p生效即可
#注意单位为1/100 s

【僵死连接占用资源】

使用linux服务器的使用,TCP协议规定,对于已经建立的连接,网络双方要进行四次挥手才能成功断开连接,如果缺少了其中的某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放,因为服务器程序同时管理大量连接,所以很有必要保证无用的连接完全断开,否则大量僵死的连接会浪费许多服务器资源,创建一台centos7.9云主机,修改相应的配置文件,分别开启SYN Cookies;允许将TIME-WAIT sockets重新用于新的TCP连接;开启TCP连接中TIME-WAIT sockets的快速回收;修改系统默认的TIMEOUT时间为30

#开启SYN Cookies
[root@compute ~]# sysctl -a | grep _syn
fs.xfs.inherit_sync = 1
net.ipv4.tcp_max_syn_backlog = 512
net.ipv4.tcp_syn_retries = 6
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syncookies = 1
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.ens33.stable_secret"
sysctl: reading key "net.ipv6.conf.ens34.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
#查看_syn默认相关配置
[root@compute ~]# echo 'net.ipv4.tcp_syncookies = 1' >> /etc/sysctl.conf
[root@compute ~]# sysctl -p
net.ipv4.tcp_syncookies = 1
#虽然syn默认开启,但是需要添加配置文件,最后生效。

设置TIME-WAIT

[root@compute ~]# sysctl -a | grep net.ipv4.tcp_tw_
sysctl: reading key "net.ipv6.conf.all.stable_secret"
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
#查看默认配置
#net.ipv4.tcp_tw_reuse =1    表示开启重用,允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭。
#net.ipv4.tcp_tw_recycle = 1    #表示开启TCP连接中TIME-WAIT sockets快速回收,默认为0,表示关闭。
[root@compute ~]# sysctl -a | grep net.ipv4.tcp_fin
sysctl: reading key "net.ipv6.conf.all.stable_secret"
net.ipv4.tcp_fin_timeout = 60
#查看默认配置
#表示系统默认的TIMEOUT时间

将上面的参数写入sysctl.conf,然后sysctl -p生效即可。

【修改最大句柄数】

Linux服务器最大并发时,往往需要预先调优linux参数,默认情况下linux最大文件句柄数为1024个,当前你的服务器在大并发达到极限时,就会报出“too many files“,创建一台云主机,修改相关配置,将控制节点的最大文件句柄数永久修改为65535

#调优linux参数设置最大句柄数
ulimit -n 655355
#上面是临时生效的句柄数。
[root@compute ~]# vim /etc/security/limits.conf
*                soft    nofile          65535
*                hard    nofile          65535
#添加上面内容

【设置rabbitmq最大连接数】

分别通过用户级别、系统级别、配置文件来设置RabbitMQ服务的最大连接数

#用户级别
[root@compute ~]# vim /etc/security/limits.conf
#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4
rabbitmq        soft    nofile          10240
rabbitmq        hard    nofile          10240

#系统级别
[root@compute ~]# vim /etc/sysctl.d/99-sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
fs.file-max=10240
[root@compute ~]# sysctl -p /etc/sysctl.d/99-sysctl.conf
fs.file-max = 10240

#配置文件
[root@controller ~]# vim /usr/lib/systemd/system/rabbitmq-server.service
#在[service]下添加
LimitNOFILE=10240
[root@controller ~]# systemctl daemon-reload

[root@controller ~]# systemctl restart rabbitmq-server
systemctl stat[root@controller ~]# systemctl status rabbitmq-server
● rabbitmq-server.service - RabbitMQ broker
   Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: disabled)
   Active: active (running) since 一 2022-10-31 22:30:30 CST; 3s ago
  Process: 25778 ExecStop=/bin/sh -c while ps -p $MAINPID >/dev/null 2>&1; do sleep 1; done (code=exited, status=0/SUCCESS)
  Process: 25643 ExecStop=/usr/lib/rabbitmq/bin/rabbitmqctl stop (code=exited, status=0/SUCCESS)
 Main PID: 25787 (beam.smp)
   Status: "Initialized"
   CGroup: /system.slice/rabbitmq-server.service
           ├─25787 /usr/lib64/erlang/erts-8.3.5.3/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stb...           ├─25998 erl_child_setup 10240
           ├─26014 inet_gethost 4
           └─26015 inet_gethost 4

10月 31 22:30:28 controller systemd[1]: Starting RabbitMQ broker...
10月 31 22:30:29 controller rabbitmq-server[25787]: RabbitMQ 3.6.16. Copyright (C) 2007-2018 Pivo...c.
10月 31 22:30:29 controller rabbitmq-server[25787]: ##  ##      Licensed under the MPL.  See http...m/
10月 31 22:30:29 controller rabbitmq-server[25787]: ##  ##
10月 31 22:30:29 controller rabbitmq-server[25787]: ##########  Logs: /var/log/rabbitmq/rabbit@co...og
10月 31 22:30:29 controller rabbitmq-server[25787]: ######  ##        /var/log/rabbitmq/rabbit@co...og
10月 31 22:30:29 controller rabbitmq-server[25787]: ##########
10月 31 22:30:29 controller rabbitmq-server[25787]: Starting broker...
10月 31 22:30:30 controller systemd[1]: Started RabbitMQ broker.
10月 31 22:30:30 controller rabbitmq-server[25787]: completed with 0 plugins.
Hint: Some lines were ellipsized, use -l to show in full.

【数据库优化】

vim /etc/my.cnf
thread_concurrency = 64
#CPU 核数 * 2
max_connections=1500
#最大连接(用户)数。每个连接 MySQL 的用户均算
作一个连接
max_connect_errors=30
#最大失败连接限制
bulk_insert_buffer_size = 32M
#批量插入数据缓存大小
query_cache_type=1
#查询缓存 (0 = off、1 = on、2 = demand)
query_cache_size = 64M
#指定 mysql 查询缓冲区大小
max_allowed_packet = 128M
#通信缓冲大小
read_buffer_size = 8M
#顺序读取数据缓冲区使用内存
read_rnd_buffer_size = 32M
#随机读取数据缓冲区使用内存
innodb_buffer_pool_size=4G
#设置innodb表的索引,数据,插入数据时的缓冲为4G
innodb_log_buffer_size=64M
#设置数据库日志缓冲。
innodb_log_file_size=256M
#设置redo log(物理日志)文件大小。
 innodb_log_files_in_group=2
 #设置redo log(物理日志)文件组为2
#优化配置在mysqld下

可以通过检查数据库配置信息来获取要修改的值。

show variables;    #检查数据库配置信息。
show variables like 'innodb%';    #使用like筛选固定的信息,%和*相当。
#可以根据要求的调优来专门查找信息然后配置进入my.cnf配置文件。

【memcached缓存修改】

[root@controller ~]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"     #memcached缓存大小
OPTIONS="-l 127.0.0.1,::1,controller"
[root@controller ~]# systemctl restart memcached