赞
踩
【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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。