openstack 命令自动补全:
openstack complete > /etc/bash_completion.d/openstack && bash
Linux 系统调优
修改脏数据可用内存百分比为60,默认为30
###sysctl -a 显示所有的内核参数
###sysctl -p 加载内核参数配置,永久有效
[root@controller ~]# sysctl -a | grep dirty
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 30
vm.dirty_writeback_centisecs = 500
echo 'vm.dirty_ratio = 60' >> /etc/sysctl.conf
sysctl -p
修改文件句柄数
Linux 服务器大并发时,往往需要预先调优 Linux 参数。默认情况下,Linux 最大文件 句柄数为 1024 个。当你的服务器在大并发达到极限时,就会报出“too many open files”。 创建一台云主机,修改相关配置,将控制节点的最大文件句柄数永久修改为 65535。
###临时生效
[root@controller ~]# ulimit -n 65535
###永久生效
[root@controller ~]# cat >> /etc/security/limits.conf <<EOF
* soft nofile 65535
* hard nofile 65535
EOF
防止 SYN 攻击
修改 controller 节点的相关配置文件,开启 SYN cookie,防止 SYN 洪水攻击
###默认的SYN相关配置
[root@controller ~]# sysctl -a | grep _syn
net.ipv4.tcp_max_syn_backlog = 512
net.ipv4.tcp_syn_retries = 6
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syncookies = 1
###参数释义
tcp_max_syn_backlog是SYN队列的长度,加大SYN队列长度可以容纳更多等待连接的网络连接数。
tcp_syncookies是一个开关,是否打开SYN Cookie 功能,该功能可以防止部分SYN攻击。
tcp_synack_retries和tcp_syn_retries定义SYN 的重试连接次数,
将默认的参数减小来控制SYN连接次数的尽量少。
###虽然默认是开启的,但是需要把配置添加到如下文件中
[root@controller ~]# echo 'net.ipv4.tcp_syncookies = 1' >> /etc/sysctl.conf
###生效配置
[root@controller ~]# sysctl -p
配置controller节点禁止其他节点可以Ping它
[root@controller ~]# sysctl -a |grep icmp_echo
net.ipv4.icmp_echo_ignore_all = 0
[root@controller ~]# vim /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_all = 1
[root@controller ~]# sysctl -p
net.ipv4.icmp_echo_ignore_all = 1
###验证
[root@controller ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
1
内核优化
在使用 Linux 服务器的时候,TCP 协议规定,对于已经建立的连接,网络双方要进行四 次挥手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身 占用的资源不会被释放。因为服务器程序要同时管理大量连接,所以很有必要保证无用的连 接完全断开,否则大量僵死的连接会浪费许多服务器资源。创建一台 CentOS7.9 云主机,修 改相应的配置文件,分别开启 SYN Cookies;允许将 TIME-WAIT sockets 重新用于新的 TCP 连接;开启 TCP 连接中 TIME-WAIT sockets 的快速回收;修改系統默认的 TIMEOUT 时间 为 30。
net.ipv4.tcp_syncookies = 1
###表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYNxxx,
默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1
###表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1
###表示TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_fin_timeout = 30
###表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
数据库调优
将memcache缓存修改为128
###修改配置文件将缓存CACHESIZE修改为128
[root@controller ~]# vim /etc/sysconfig/memcached
CACHESIZE=128
###重启服务
[root@controller ~]# systemctl restart memcached
修改/etc/my.cnf 文件,完成下列要求:
1.设置数据库支持大小写;
2.设置数据库缓存 innodb 表的索引,数据,插入数据时的缓冲为 4G;
3.设置数据库的 log buffer 为 64MB;
4.设置数据库的 redo log 大小为 256MB;
5.设置数据库的 redo log 文件组为 2。
###可以快速定位参数
[root@controller ~]# mysql -uroot -p000000
MariaDB [(none)]> show variables like 'innodb_log%';
[root@controller ~]# vim /etc/my.cnf
###数据库支持大小写
lower_case_table_names =1
###数据库缓存
innodb_buffer_pool_size = 4G
###数据库的log buffer即redo日志缓冲
innodb_log_buffer_size = 64MB
###设置数据库的redo log即redo日志大小
innodb_log_file_size = 256MB
###数据库的redo log文件组即redo日志的个数配置
innodb_log_files_in_group = 2
###重启服务
[root@controller ~]# systemctl restart mariadb
Keystone 服务
创建一个tom用户 密码为000000 email为admin@123.com
[root@controller ~]# source /etc/keystone/admin-openrch.sh
[root@controller ~]# openstack user create --domain demo --password 000000 \
> --email admin@123.com tom
###查看users
[root@controller ~]# openstack user list
列出一个token
[root@controller ~]# openstack token issue
项目管理
在keystone中创建shop项目添加描述为“hello shop”,完成后使用open stack命令禁用该项目,最后使用openstack命令查看该项目
###创建项目
openstack project create --description "hello shop" --domain demo shop
###禁用
openstack project set --disable shop
###查看
openstack project show shop
用户管理
使用nova命令查看admin租户的当前配额值,将admin租户的实例配额值提升到13
###查看
nova quota-class-show admin
+----------------------+-------+
| Quota | Limit |
+----------------------+-------+
| instances | 10 |
| cores | 20 |
| ram | 51200 |
| metadata_items | 128 |
| key_pairs | 100 |
| server_groups | 10 |
| server_group_members | 10 |
+----------------------+-------+
###修改
nova quota-class-update admin --instances 13
###查看
nova quota-class-show admin
+----------------------+-------+
| Quota | Limit |
+----------------------+-------+
| instances | 13 |
| cores | 20 |
| ram | 51200 |
| metadata_items | 128 |
| key_pairs | 100 |
| server_groups | 10 |
| server_group_members | 10 |
+----------------------+-------+
glance镜像服务
将提供 的 cirros-0.3.4-x86_64-disk.img 镜像(该镜像在 HTTP 服务中,可自行下载)上传至平台, 命名为 cirros,并设置最小启动需要的硬盘为 10G,最小启动需要的内存为 1G。
###下载镜像
[root@controller ~]# curl -O http://10.18.4.100/cirros-0.3.4-x86_64-disk.img
or
[root@controller ~]# wget http://10.18.4.100/cirros-0.3.4-x86_64-disk.img
###创建符合要求的镜像
[root@controller ~]# openstack image create --min-disk 10 --min-ram 1024 \
> --file cirros-0.3.3-x86_64-disk.img cirros
###验证
[root@controller ~]# openstack image list
OpenStack 开放镜像权限
使 用 OpenStack 私 有 云 平 台 , 在 OpenStack 平台的 admin 项 目 中 使 用 cirros-0.3.4-x86_64-disk.img 镜像文件创建名为 glance-cirros 的镜像,通过 OpenStack 命令将 glance-cirros 镜像指定 demo 项目进行共享使用。
[root@controller ~]# openstack image create --shared --project demo \
> --file cirros-0.3.4-x86_64-disk.img glance-cirros
[root@controller ~]# glance member-create [镜像id] [域名id]
[root@controller ~]# glance member-update [镜像id] [域名id] accepted
后端配置文件管理
进入到 glance 后端存储目录中,使用 qemu 命令查看任意的一个镜像信息。 使用 du 命令查看 nova 主配置文件大小。
[root@controller ~]# cd /var/lib/glance/image && ls
qemu-img info xxxxxxxx
[root@controller ~]# du -sh /etc/nova/nova.conf
后端配置文件管理
请修改glance后端配置文件,将项目的映像存储限制为10G,完成后重启glance服务
bc计算出10G
1024^3*10
10737418240
vim /etc/glance/glance-api.conf (/user_storage)
user_storage_quota = 10737418240
systemctl restart openstack-glance-*
OpenStack Glance 镜像管理
使用自行搭建的 OpenStack 平台。在 HTTP 服务中存在一个镜像为 CentOS7.5-compress.qcow2 的镜像,请使用 qemu 相关命令,对该镜像进行压缩,压缩后的 镜像命名为 chinaskill-js-compress.qcow2 并存放在/root 目录下。
[root@controller ~]# qemu-img convert -c -O qcow2 centos7_33.qcow2 compress_newdisk.qcow2
###解释
-c 压缩
-O qcow2 输出格式为 qcow2
centos7_33.qcow2被压缩文件路径
compress_newdisk.qcow2压缩完成后文件路径
使用qemu-img相关命令,查询Gmirror1镜像的compat版本,然后将Gmirror1镜像的campat版本修改为0.10(该操作是为了适配某些低版本的云平台)
[root@controller ~]# cd /var/lib/glance/images/
###修改campat版本
[root@controller ~]# qemu-img amend -f qcow2 -o compat=0.10 [镜像id]
###查看镜像信息
[root@controller ~]# qemu-img info [镜像id]
某OpenStack云平台有两个租户,A租户与B租户,分别属于两个部门,该公司对镜像的管理比较严格, 镜像都由管理员进行上传和权限管理。通过管理员上传该镜像,并使用相关命令开放镜像权限给A租 户,B租户不可见。
[root@controller ~]# glance member-create 1fa9cbfe-392f-437e-ad18-f00987415b15 \
> df58511d2c914690b48e89f1e512ae6b
###镜像ID 1fa9cbfe-392f-437e-ad18-f00987415b15
###用户A ID df58511d2c914690b48e89f1e512ae6b
[root@openstack ~]# glance member-update 1fa9cbfe-392f-437e-ad18-f00987415b15
df58511d2c914690b48e89f1e512ae6b accepted
改 glance 存储后端
使用赛项提供的 OpenStack 私有云平台,创建一台云主机(镜像使用 CentOS7.5,flavor 使用带临时 磁盘 50G 的),配置该主机为 nfs 的 server 端,将该云主机中的/mnt/test 目录进 行共享(目录不存 在可自行创建)。然后配置 controller 节点为 nfs 的 client 端,要求将/mnt/test 目录作为 glance 后端 存储的挂载目录。配置完成后提交 controller 控制节点的用户名、密码 和 IP 地址到答题框。
###创建一台云主机,创建成功如下
###安装nfs rpcbind软件包
[root@localhost ~]# yum install -y nfs-utils rpcbind
[root@localhost ~]# mkdir /mnt/test
[root@localhost ~]# vim /etc/exports
/mnt/test *(rw)
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# systemctl start nfs
[A[root@localhost ~]# systemctl enable nfs
[root@localhost ~]# showmount -e 192.168.10.4
Export list for 192.168.10.4:
/mnt/test *
###控制节点操作
[root@controller ~]# mount -t nfs 192.168.10.4:/mnt/test \
> /var/lib/glance/images/
[root@controller ~]# chown -R glance:glance /var/lib/glance/
[root@controller ~]# ls -ld /var/lib/glance/
drwxr-xr-x. 3 glance glance 20 Nov 10 10:54 /var/lib/glance/
### mount查看一下效果
[root@controller ~]# mount
192.168.10.4:/mnt/test on /var/lib/glance/images type nfs4
(rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,po
rt=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.10.130,local_lock=none,a
ddr=192.168.10.4)
glance对接cinder
在自行搭建的 OpenStack平台中修改相关参数,使 glance 可以使用 cinder作为后端存储, 将镜像存储于 cinder 卷中。使用 cirros-0.3.4-x86_64-disk.img 文件创建 cirros-image 镜像存储 于 cirros-cinder 卷中,通过 cirros-image 镜像使用 cinder 卷启动盘的方式进行创建虚拟机。
###修改/etc/glance/glance-api.conf
###为了允许镜像服务使用cinder作为后端存储,在stores=file,http,swift中增加cinder
[root@controller ~]# vim /etc/glance/glance-api.conf
[glance_store]
stores = file,http,swift,cinder
default_store = cinder
filesystem_store_datadir = /var/lib/glance/images/
###为了能够解析locations信息,需要将show_multiple_locations修改为True
#show_multiple_locations = false
###取消注释改为True
###修改/etc/cinder/cinder.conf
allowed_direct_url_schemes 修改为 cinder
image_upload_use_cinder_backend 设置为 True
image_upload_use_internal_tenant = True
###重启glance cinder 服务
###创建镜像查看locations项是否为cinder
将swift存储作为镜像服务的后端存储
[root@controller ~]# vim /etc/glance/glance-api.conf
[glance_store]
stores = glance.store.swift.Store
default_store = swift
swift_store_region = RegionOne
swift_store_endpoint_type = internalURl
swift_store_container = glance
swift_store_large_object_size = 5120
swift_store_large_object_chunk_size = 200
swift_store_create_contaienr_on_put = True
swift_store_multi_tenant = True
swift_store_admin_tenants = service
swift_store_auth_address = http://container:5000/v3.0/
swift_store_user = glance
swift_store_key = 000000
nova计算服务
使用nova命令创建一个名为t,id为5,内存为2048M,磁盘容量为10GB,vCPU数量为2的云主机类型。
[root@controller ~]# nova flavor-create t 5 2048 10 2
or
[root@controller ~]# openstack flavor create --id 5 --ram 2048 --disk 10 --vcpus 2 t
修改 nova 相关配置文件,解决因等待时间过长而导致虚拟机启动超时从而获取不 到 IP 地址而报错失败的问题。
###查找关键字
[root@controller ~]# cat /etc/nova/nova.conf |grep vif_plugging_is_fatal
vif_plugging_is_fatal=false
###重启
[root@controller ~]# systemctl restart openstack-nova*
OpenStack Nova 清除缓存
在 OpenStack 平台的一台计算节点创建虚拟机,若是第一次在该节点创建次虚拟机,会 先将镜像文件复制到该计算节点目录/var/lib/nova/instances/_base。长期下来,该目录会占用 比较大的磁盘空间而要清理。可以通过修改 nova 的配置文件来自动清理该缓存目录,即在 该节点没有使用某镜像启动的云主机,那么这个镜像在过一定的时间后会被自动删除。
###修改/etc/nova/nova.conf
计算节点
###允许删除不再使用的、旧的image文件,以节省计算节点硬盘空间
remove_unused_base_images = True
###如无instance使用,则原image文件在1天之后会被删除
remove_unused_original_minimum_age_seconds = 86400
###如无instance使用,resize过的image文件(cow格式)在1小时之后会被删除
remove_unused_resized_minimum_age_seconds = 3600
###镜像文件的存储路径,该目录是相对于state_path的路径名
image_cache_subdirectory_name = _base
###重启nova服务
动态调整云主机类型
[root@controller ~]# vim /etc/nova/nova.conf
allow_resize_to_same_hosts=True
scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,
ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,
ServerGroupAffinityFilter
[root@controller ~]# systemctl restart openstack-nova-* libvirtd
云主机保存快照
给云主机做快照并保存在本机 /root/目录下
openstack server image create VM1 --name VM1-image-1
openstack image save --file /root/VM1-image-1.qcow2 VM1-image-1
在openstack私有云平台上,将云主机VM1保存为qcow2格式的快照并保存到controller节 点/root/cloudsave目录下,保存名字为csccvm.qcow2。
[root@controller ~]# mkdir cloudsave
[root@controller ~]# nova image-create VM1 vm1
[root@controller ~]# openstack image list
+--------------------------------------+--------+--------+
| ID | Name | Status |
+--------------------------------------+--------+--------+
| 1cd8a7ee-26d3-4af9-a7d8-15d88cdfa1f5 | cirros | active |
| d672affc-fefb-4af3-b185-96c009193045 | vm1 | active |
+--------------------------------------+--------+--------+
[root@controller ~]# openstack image save vm1 --file
/root/cloudsave/csccvm.qcow2
[root@controller ~]# ll cloudsave/
total 21568
-rw-r--r-- 1 root root 22085632 Aug 8 04:11 csccvm.qcow2
修改云主机内存
使用OpenStack私有云平台,找到virsh中ID为10的云主机(若不存在请自行创建)。在云主机所在的物 理节点,进入virsh交互式界面,使用virsh命令,将memory虚拟机的内存调整为5242880KB大小
[root@controller ~]# openstack server create --image cirros --flavor Fmin --network ext VM2
###计算节点操作
[root@compute ~]# virsh list --all
[root@compute ~]# virsh shutdown instance-00000002
###编辑
[root@compute ~]# virsh edit instance-00000002
[root@compute ~]# virsh start instance-00000002
冷迁移
###拷贝虚拟机到新的计算节点
[root@computer01 ~]# scp -r e866c977-eb01-460e-bf12-5208d54600f5/ \
> 192.168.176.64:/var/lib/nova/instances/
###修改文件属性
[root@computer02 ~]# chown -R nova.nova e866c977-eb01-460e-bf12-5208d54600f5/
###更新数据库
[root@node1 ~]# use nova;
update instances set host='controller', node='controller', launched_on='controller'
where uuid='c47aea85-6a9b-4d94-b1fd-aac2268c9913';
###启动虚拟机
neutron网络服务
创建外部网络ext-net和子网ext-subnet 创建内网int-net和子网int-subnet,创建路由router-1(并连通内外网)
###创建外部网络
[root@controller ~]# openstack network create --external --enable ext-net
###创建子网
[root@controller ~]# openstack subnet create --network ext-net --subnet-range 192.168.x.0/24 \
> --allocation-pool start=192.168.x.100,end=192.168.x.200 --gateway 192.168.x.1 ext-subnet
###创建内部网络
[root@controller ~]# openstack network create --internal --enable int-net
###创建子网
[root@controller ~]# openstack subnet create --network int-net --subnet-range 10.10.x.0/24 \
> --allocation-pool start=10.10.x.100,end=10.10.x.200 --gateway 10.10.x.1 int-subnet
###创建路由
[root@controller ~]# openstack router create router-1
[root@controller ~]# openstack router add subnet router-1 ext-subnet
[root@controller ~]# openstack router add subnet router-1 int-subnet
安全组管理
创建名为“group_web”的安全组,该安全组描述为“Custom security group”,用openstack命令为安全组添加icmp规则和ssh规则允许任意IP地址访问
###创建安全组
openstack security group create --description "Custom security group" group_web
###添加80访问
openstack security group rule create --ingress --ethertype IPv4 --protocol tcp \
> --dst-port 80:80 group_web
###添加22访问
openstack security group rule create --ingress --ethertype IPv4 --protocol tcp \
> --dst-port 22:22 group_web
###添加icmp规则
openstack security group rule create --ingress --protocol icmp group_web
dashboard服务
修改nova配置文件使之能通过公网IP范文dashboard首页
[root@controller ~]# vim /etc/nova/nova.conf
###修改为master公网IP
novncproxy_base_url=http://123.123.123.123:6080/vnc_auto.html
###重启服务生效配置
[root@controller ~]# systemctl restart httpd
将 Dashboard 中的 Django 数据修改为存储在文件中
(此种修改解决了 ALL-in-one 快照在其 他云平台 Dashboard 不能访问的问题)
[root@controller ~]# cat /etc/openstack-dashboard/local_settings |grep django
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
###默认存在cache里,改为file
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
###重启服务生效配置
[root@controller ~]# systemctl restart httpd
请使用 curl 指令获取 dashboard 首页信息
[root@controller ~]# curl -i http://192.168.44.10/dashboard
云平台安全策略提升
###下载所需软件
[root@controller ~]# yum isntall -y mod_wsgi mod_ssl
[root@controller ~]# vim /etc/httpd/conf.d/ssl.conf
SSLProtocol all -SSLv2 -SSLv3 删除-SSLv3 (75行)
[root@controller ~]# vim /etc/openstack-dashboard/local_settings
CSRF_COOKIE_SECURE = Ture (49行)
SESSION_COOKIE_SECURE = Ture
USE_SSL = Ture
SESSION_COOKIE_HTTPONLY = Ture
swift服务
使用命令创建一个名叫 examcontainer 的容器,将 cirros-0.3.4-x86_64-disk.img 镜像上传到 examcontainer 容器中,并 设置分段存放,每一段大小为 10M。
[root@controller ~]# openstack container create examcontainer
[root@controller ~]# openstack container list
[root@controller ~]# swift post examcontainer
[root@controller ~]# swift list
###下载镜像
[root@controller ~]# curl -O http://10.18.4.46/cirros-0.3.4-x86_64-disk.img
###swfit切片上传cirros
###-S 上载不大于<size>(字节)的段中的文件,然后创建一个“清单”文件,
该文件将下载所有段,就像它是原始文件一样。
[root@controller ~]# swift upload examcontainer -S 10485760 cirros-0.3.4-x86_64-disk.img
[root@controller ~]# swift stat examcontainer
cinder服务
请在计算节点,对块存储进行扩容操作, 即在计算节点再分出一个 5G 的分区,加入到 cinder 块存储的后端存储中去。
###创建物理卷
[root@compute ~]# pvcreate /dev/vdb4
###扩展cinder-volume卷组
[root@compute ~]# vgextend cinder-volumes /dev/vdb4
###验证
[root@compute ~]# vgdisplay
创建名为lvm的卷类型,创建该类型规格键值对,要求lvm卷类型对应cinder后端驱动lvm所管理的存储资源,名字lvm_test,大小1G的云硬盘并查询该云硬盘的详细信息 并附加到云主机上
[root@controller ~]# cinder type-create lvm
[root@controller ~]# cinder type-key lvm set volume_backend_name=LVM
[root@controller ~]# cinder create --volume-type lvm --name lvm_test 1
[root@controller ~]# openstack server add volume server-1 lvm_test
Manila 服务
创建 default_share_type 共享类型(不使用驱动程序支持),接着创建一个大小为 2G 的共享存储名为 share01 并开放 share01 目录对 OpenStack 管理网段使用权限。
###创建不适用驱动程序支持的default_share_type共享类型
[root@controller ~]# manila type-create default_share_type False
###创建共享卷
[root@controller ~]# manila create NFS 2 --name share01
###开放share01目录对OpenStack管理网段使用权限
[root@controller ~]# manila access-allow share01 ip 10.18.4.0/24 --access-level rw
###验证
[root@controller ~]# manila type-list
[root@controller ~]# manila list
Barbican 服务
使用 openstack 命令创建一个名为 secret01 的密钥
###创建密钥
[root@controller ~]# openstack secret store --name secret01 --payload secretkey
Cloudkitty 服务
启用 hashmap 评级 模块,接着创建 volume_thresholds 组,创建服务匹配规则 volume.size,并设置每 GB 的价 格为 0.01。接下来对应大量数据设置应用折扣,在组 volume_thresholds 中创建阈值,设置 若超过 50GB 的阈值,应用 2%的折扣(0.98)。
###启用hashmap
[root@controller ~]# openstack rating module enable hashmap
###创建hashmap service
[root@controller ~]# openstack rating hashmap service create volume.size
+-------------+--------------------------------------+
| Name | Service ID |
+-------------+--------------------------------------+
| volume.size | 09da4a8b-b849-4715-a8e3-7cd12dfcf46e |
+-------------+--------------------------------------+
###创建hashmap service group
[root@controller ~]# openstack rating hashmap group create volume_thresholds
openstack rating hashmap group create volume_thresholds
+-------------------+--------------------------------------+
| Name | Group ID |
+-------------------+--------------------------------------+
| volume_thresholds | 8b3dfe73-5efb-46ab-a93b-dc9519063ed6 |
+-------------------+--------------------------------------+
###创建volume单价
[root@controller ~]# openstack rating hashmap mapping create \
> -s 09da4a8b-b849-4715-a8e3-7cd12dfcf46e -g 8b3dfe73-5efb-46ab-a93b-dc9519063ed6 \
> -t flat 0.01
###创建service rule
[root@controller ~]# openstack rating hashmap threshold create \
> -s 09da4a8b-b849-4715-a8e3-7cd12dfcf46e -g 8b3dfe73-5efb-46ab-a93b-dc9519063ed6 \
> -t rate 50 0.98
OpenStack 平台内存优化
搭建完 OpenStack 平台后,关闭系统的内存共享,打开透明大页。
###关闭系统的内存共享
[root@controller ~]# echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
###验证
[root@controller ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
OpenStack 消息队列调优
OpenStack 各服务内部通信都是通过 RPC 来交互,各 agent 都需要去连接 RabbitMQ; 随着各服务 agent 增多,MQ 的连接数会随之增多,最终可能会到达上限,成为瓶颈。使用 自行搭建的OpenStack私有云平台,分别通过用户级别、系统级别、配置文件来设置RabbitMQ 服务的最大连接数为 10240。
### 1)用户级别的配置
###limits.conf 用于对用户资源进行限制,如进程数/文件数等等
[root@controller ~]# vim /etc/security/limits.conf
* soft nofile 10240
* hard nofile 10240
###退出登陆以下 才可以生效
[root@controller ~]# logout
###检验是否生效
[root@controller ~]# ulimit -n #检验配置是否生效
10240
### 2)系统级别的配置
###系统级别主要配置 sysctl.conf 这个文件
[root@controller ~]# vi /etc/sysctl.conf
fs.file-max=10240
[root@controller ~]# sysctl -p #执行这个生效
fs.file-max = 10240
###配置RabbitMQ的配置文件
[root@controller ~]# vim /usr/lib/systemd/system/rabbitmq-server.service
###在service模块下添加即可
LimitNOFILE=10240
###重启服务生效
[root@controller ~]# systemctl restart rabbitmq-server
###检验命令
[root@controller ~]# rabbitmqctl status
[{total_limit,10140}, ###返回这个表示成功了
{total_used,9},
{sockets_limit,9124},
{sockets_used,7}]},
kvm调优
在自行搭建的 OpenStack 私有云平台或赛项提供的 all-in-one 平台上,修改相关配置文 件,启用-device virtio-net-pci in kvm
[root@controller ~]# vim /etc/nova/nova.conf
[libvirt]
libvirt_use_virtio_for_bridges=true
[root@controller ~]# systemctl restart openstack-nova*
OpenStack Heat 运维
###列出heat版本
[root@controller bin]# openstack orchestration template version list
heat_template_version.2018-03-02 | hot |
heat_template_version.queens
###列出资源类型
[root@controller bin]# openstack orchestration resource type list
###资源详细属性格式
[root@controller bin]# openstack orchestration resource type \
> show OS::Nova::Flavor | grep -vE "^ " ###四个空格
创建container(容器)
在自行搭建的 OpenStack 私 有 云 平 台 上 , 在 /root 目录下编写 Heat 模 板 create_container.yaml,要求执行 yaml 文件可以创建名为 heat-swift 的容器。
[root@controller ~]# cat create_container.yaml
heat_template_version: 2014-10-16
resources:
container:
type: OS::Swift::Container
properties:
name: heat-swift
创建flavor(云主机类型)
heat_template_version: 2014-10-16
description: create flavor
resources:
flavor:
type: OS::Nova::Flavor
properties:
name: m1.flavor
flavorid: 1234
ram: 1024
disk: 20
vcpus: 1
创建net(网络)
heat_template_version: 2014-10-16
description: Generated template
resources:
network_1:
type: OS::Neutron::Net
properties:
admin_state_up: true
name: Heat-Network
shared: false
subnet_1:
type: OS::Neutron::Subnet
properties:
allocation_pools:
- end: 10.20.2.100
start: 10.20.2.10
cidr: 10.20.2.0/24
enable_dhcp: true
host_routes: []
ip_version: 4
name: Heat-Subnet
network_id:
get_resource: network_1
创建user(用户)
heat_template_version: 2014-10-16
description: create user
resources:
users:
type: OS::Keystone::User
properties:
name: heat-user
default_project: admin
domain: demo
password: 123456
roles: [{"role":admin,"project":admin}]
创建image(镜像)
heat_template_version: queens
description: create image
resources:
images:
type: OS::Glance::Image
properties:
name: test
min_disk: 20 #题目应该会有要求
min_ram: 2048
disk_format: qcow2
container_format: bare
location: http://192.168.100.10/cirros-0.5.1-x86_64-disk.img #题目应该会给出一个url链接
创建server(云主机)
heat_template_version: queens
description: create server
resources:
servers:
type: OS::Nova::Server
properties:
name: vm1
image: cirros
flavor: test
networks: [{"uuid":d546239c-53f1-4a6f-a116-872727a04d86}]
创建cinder(卷)
heat_template_version: queens
description: create cinder
resources:
cinder:
type: OS::Cinder::Volume
properties:
name: cinder1
volume_type: lvm
size: 10
python程序对接openstack api
openstack image create *** --debug ###调用整个创建过程
再找到POST 和data行找到地址和创建内容
难写死了,建议用python软件写好,再复制进去
安装python3
1、yum install -y python3
2、pip3 install certifi-2019.11.28-py2.py3-none-any.whl
3、pip3 install urllib3-1.25.11-py3-none-any.whl
4、pip3 install idna-2.8-py2.py3-none-any.whl
5、pip3 install chardet-3.0.4-py2.py3-none-any.whl
6、pip3 install requests-2.24.0-py2.py3-none-any.whl
创建flavor(云主机类型)
import requests
import json
osurl = "http://192.168.100.10"
body={
"auth":{
"identity":{
"methods":["password"],
"password":{
"user":{
"id":"d618c8ee2d234997889b62ee18562ee0",
"password":"000000"
}
}
},
"scope":{
"project":{
"id":"5e7709cbbd7c4c0e8733c3f7360d1d38"
}
}
}
}
headers = {}
def get_token():
url = osurl+":5000/v3/auth/tokens"
re = requests.post(url,headers=headers,data=json.dumps(body)).headers["X-Subject-Token"]
return re
def flavor_create():
url = osurl+":8774/v2.1/flavors"
headers["X-Auth-Token"] = get_token()
body = {
"flavor":{
"name": "centos7",
"id": 302,
"vcpus": 2,
"ram": 2048,
"disk": 40,
}
}
re = requests.post(url,data=json.dumps(body),headers=headers).json()
print(re)
return re
flavor_create()
创建server(云主机)
import requests
import json
osurl = "http://192.168.100.10"
body={
"auth":{
"identity":{
"methods":["password"],
"password":{
"user":{
"id":"d618c8ee2d234997889b62ee18562ee0",
"password":"000000"
}
}
},
"scope":{
"project":{
"id":"5e7709cbbd7c4c0e8733c3f7360d1d38"
}
}
}
}
headers = {}
def get_token():
url = osurl+":5000/v3/auth/tokens"
re = requests.post(url,headers=headers,data=json.dumps(body)).headers["X-Subject-Token"]
return re
def server_create():
url = osurl+"::8774/v2.1/servers"
headers["X-Auth-Token"] = get_token()
body={
"server":{
"name": "psysewe",
"imageRef": "sdi3jnbf-nce8sm3slfk-cm8w3",
"flavorRef": "sduifwj8-dnuvwi8-dnde83",
"networks": [{"uuid": "bssiksju-sjejr3-sqksjj"}]
}
}
re = requests.post(url,headers=headers,json=body).json()
print(re)
return re
server_create()
创建user(用户)
def create_user():
url = osurl+":35357/v3/users"
headers["X-Auth-Token"] = get_tokens()
body={
"user":{
"name": "centos7",
"domain_id": "c71306cc8e9b40c093e6961d18ff85c6",
"password": "000000"
}
}
re = requests.post(url,headers=headers,json=body).json()
print(re)
return re
create_user()
创建project(项目)
def create_project():
url = osurl+":35357/v3/projects"
headers["X-Auth-Token"] = get_tokens()
body={
"project":{
"name": "centos7",
"domain_id": "c71306cc8e9b40c093e6961d18ff85c6"
}
}
re = requests.post(url,headers=headers,json=body).json()
print(re)
return re
create_project()
创建volume(卷)
def flavor_create():
default_project = {}
domain = {}
url = osurl+":8776/v2/138470dc0251402aa02fd286d373b4bd/volumes"
headers["X-Auth-Token"] = get_token()
body={
"volume":{
"name": "psysewe",
"size": "1",
"type": "lvm"
}
}
re = requests.post(url,headers=headers,json=body).json()
print(re)
return re
flavor_create()
Redis 一主二从三哨兵模式
使用提供的 OpenStack 私有云平台,申请三台 CentOS7.9 系统的云主机,使用提供的 http 源,在三个节点自行安装 Redis 服务并启动,配置 Redis 的访问需要密码,密码设置为 123456。然后将这三个 Redis 节点配置为 Redis 的一主二从三哨兵架构,即一个 Redis 主节 点,两个从节点,三个节点均为哨兵节点。
###通过iaas源直接下载redis或通过编译安装make|make install
主节点
###修改配置文件/etc/redis.conf
bind 127.0.0.1 ### 修改为 bing 0.0.0.0 或注释
requirepass 123456 ### 添加 通过搜索password可得
protected-mode no ### 关闭保护模式(只有同一个服务器才能连接)
从节点
###修改/etc/redis.conf加入集群
replicaof <masterip> <masterport>
slaveof <masterip> <masterport>
###指定master
replicaof redis-1 6379
slaveof redis-1 6379
###master密码
masterauth 123456
protected-mode no
###重启redis服务
通过yum安装:
systemctl restart redis
源码安装:
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start
###检测
[root@redis-1 redis-7.0.5]# redis-cli
127.0.0.1:6379> AUTH 123456 ###认证
OK
127.0.0.1:6379> info replication ###查看信息
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.1.20,port=6379,state=online,offset=294,lag=1
slave1:ip=192.168.1.30,port=6379,state=online,offset=294,lag=1
master_failover_state:no-failover
master_replid:40b9e01fc3ef428ab7ab182b69d93f01ccfdfb87
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:294
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:294
127.0.0.1:6379>
###开启哨兵模式
yum:
/etc/redis-sentinel.conf
源码安装:
在包里有模板文件sentinel.conf将其拷贝值/etc/下
protected-mode no
bind 0.0.0.0
sentinel monitor mymaster 192.168.1.10 6379 2
sentinel auth-pass mymaster 123456
###在没有启动哨兵服务时,文件中没有myid可以复制给其他主机使用
systemctl start redis-sentinel
redis-sentinel /etc/sentinel.conf
###查看
[root@redis-1 etc]# redis-cli -p 26379
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.1.10:6379,slaves=2,sentinels=3
Redis 服务调优-AOF
使用上一题安装的 Redis 服务。在 Redis 中,AOF 配置为以三种不同的方式在磁盘上执 行 write 或者 fsync。假设当前 Redis 压力过大,请配置 Redis 不执行 fsync。除此之外,避免 AOF 文件过大,Redis 会进行 AOF 重写,生成缩小的 AOF 文件。请修改配置,让 AOF 重 写时,不进行 fsync 操作。
# 持久化技术:redis是运行在内存上的服务,一旦断电或重启,内存上的数据就会被删除,为了防止数据丢失,
redis提供了一种安全策略--持久化
# 持久化就是把redis产生的数据或操作进行快照保存到磁盘上
分类:RDB 一段时间内全量保存数据 redis datebase
AOF 一段时间内增量保存数据 append only file
修改/etc/redis.conf文件
```
[root@controller ~]# vi /etc/redis.conf
appendonly yes ###改为yes 开启AOF
appendfsync no ###将原来的everysec修改为no,表示不执行fsync
no-appendfsync-on-rewrite yes ###将原来的no改为yes,表示进行aof重写不执行fsync
```
Raid管理
在OpenStack私有云平台,创建一台云主机,并创建一个40G大小的cinder块存储,将块存储连接到云主机,然后在云主机上对云硬盘进行操作。要求分出4个大小为5G的分区,使用这4个分区,创建名为/dev/md5、raid级别为5的磁盘阵列加一个热备盘(使用最后一个分区作为热备盘)
[root@node ~]# yum install -y mdadm gdisk
[root@node ~]# lsblk
gdisk /dev/sdb
Command (? for help): n
Partition number (1-128, default 1): ###默认,直接回车
First sector (34-2047, default = 34) or {+-}size{KMGTP}: ###默认直接回车
Last sector (34-2047, default = 2047) or {+-}size{KMGTP}: +10G ###{单位KMGTP}
Hex code or GUID (L to show codes, Enter = 8300): fd00 ###不清楚L命令查看 raid代码 fd00
wq 保存
查看
[root@node ~]# lsblk
[root@node ~]# mdadm -C -v /dev/md5 -l 5 -n 4 /dev/sdb{1,2,3,4} -x 1 /dev/sdb5
Continue creating array? y ###y确定
/dev/md0 raid路径位置
-v 显示创建过程
-C 创建
-c 块设备大小 默认64 一般64、256、512
-l 指定raid类型
-n {指定raid个数} {具体盘符}
-x 备份盘个数(即热备盘)
-a 通知mdadm是否创建设备文件 默认yes
lsblk 查看
mdadm -D /dev/md5 查看raid详情
cat /proc/mdstat 系统磁盘阵列情况
mdadm --stop dev/md5 停用raid
ansible
常用模块使用方法
###查找模块使用方法ansible-doc 模块名
默认为command模块 不能交互不能使用一些符号
shell模块
可以使用一些符号|>
script模块
应为不能交互,可使用此模块将本地编写的脚本导入目标主机执行执行完后删除
ansible all -m script -a "./install.sh"
file模块
可以创建删除文件,目录,连接,修改权限
创建文件
ansible all -m file -a "path=/root/txt state=touch"
创建目录
ansible all -m file -a "path=/root/dir state=directory"
修改属主属组权限
ansible all -m file -a "path=/root/txt owner=sshd group=sshd mode=0777"
删除
ansible all -m file -a "path=/root/txt state=absent"
创建连接
ansible all -m file -a "src=/etc/hosts path=/tmp/hosts.txt state=link"
copy模块
将本地文件或目录复制到目标主机指定目录下
ansible all -m -a "src=/root/.ssh/id_rsa dest=/root/.ssh/"
同通过content直接定义文件内容 \n 回车
ansible all -m copy -a "content='hello world\n dest=~/'"
fetch模块
将目标主机指定目录复制到本地
ansible all -m fetch -m "src=/etc/hosts dest=~/"
lineinfile模块
修改目标主机指定文件单行内容默认在最后一行添加
ansible all -m lineinfile -a "path=hosts line='192.168.XX'"
replace模块
可更换文件中指定内容
ansible all -m replace -a "path=/etc/hosts regxep=master replace=node"
user模块
创建删除修改用户
ansible all -m user -a "name=wsq password={{'000000'|password_hash('sha512')}}"
ansible all -m user - a "name=wsq state=absent remove=true"
yum_repository模块
创建修改yum源配置文件
ansible all -m yum_repository -a "name=centos baseurl=http://192.XXXX
gpgcheck=no descripton=hello"
[centos]
name=hello
baseurl=http://
gpgcheck=0
yum模块
安装卸载升级软件包
ansible all -m yum -a "name=vsftpd state=present"
ansible all -m yum -a "name=vsftpd state=latest"
ansible all -m yum -a "name=vsftpd state=absent"
service模块
启动关闭重启服务
ansible all -m service -a "name=httpd state=started"
ansible all -m service -a "name=httpd state=stoped"
ansible all -m service -a "name=httpd state=restarted"
ansible all -m service -a "name=httpd enabled=yes"
sudo提权
echo "wsq ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers