基础环境配置
1.控制节点主机名为 controller,设置计算节点主机名为 compute;
2.hosts 文件将 IP 地址映射为主机名。
使用提供的用户名密码,登录提供的 OpenStack 私有云平台,在当前租户下,使用 CentOS7.9 镜像,创建两台云主机, 云主机类型使用 4vCPU/12G/100G_50G 类型。当前租户 下默认存在一张网卡,自行创建第二张网卡并连接至 controller 和 compute 节点(第二张 网卡的网段为 10.10.X.0/24,X 为工位号,不需要创建路由)。自行检查安全组策略,以确保网络正常通信与 ssh 连接, 然后按以下要求配置服务器:
(1)设置控制节点主机名为 controller,设置计算节点主机名为 compute;
(2)修改 hosts 文件将 IP 地址映射为主机名;
[root@controller ~]# rm -rf /etc/yum.repos.d/*
[root@controller ~]# vi /etc/hosts
[root@controller ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.150 controller
10.0.0.198 compute
Yum 源配置
使用提供的 http 服务地址,分别设置 controller 节点和 compute 节点的 yum 源文件http.repo。
使用提供的 http 服务地址,在 http 服务下, 存在 centos7.9 和 iaas 的网络 yum 源,
使用该 http 源作为安装 iaas 平台的网络源。分别设置 controller 节点和 compute 节点的yum 源文件 http.repo。完成后提交控制节点的用户名、密码和 IP 地址到答题框。
[root@controller ~]# cat /etc/yum.repos.d/http.repo
[centos]
name=centos
baseurl=http://172.30.26.138/centos
gpgcheck=0
enabled=1
[iaas]
name=iaas
baseurl=http://172.30.26.138/openstack/iaas-repo
gpgcheck=0
enabled=1
配置无秘钥 ssh
配置 controller 节点可以无秘钥访问 compute 节点。
配置 controller 节点可以无秘钥访问 compute 节点,配置完成后,尝试 ssh 连接 compute 节点的 hostname 进行测试。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。
[root@controller ~]# ssh-keygen
[root@controller ~]# ssh-copy-id compute
安装软件包
在控制节点和计算节点上分别安装 openstack-iaas 软件包。
在控制节点和计算节点上分别安装 openstack-iaas 软件包,根据表 2 配置两个节点脚本文件中的基本变量(配置脚本文件为/etc/openstack/openrc.sh)
服务名称 | 变量 | 参数/密码 |
Mysql | root | 000000 |
Keystone | 000000 | |
Glance | 000000 | |
Nova | 000000 | |
Neutron | 000000 | |
Heat | 000000 | |
Zun | 000000 | |
Keystone | DOMAIN_NAME | demo |
Admin | 000000 | |
Rabbit | 000000 | |
Glance | 000000 | |
Nova | 000000 | |
Neutron | 000000 | |
Heat | 000000 | |
Zun | 000000 |
[root@controller ~]# yum install -y openstack-iaas
[root@compute ~]# yum install -y openstack-iaas
[root@controller ~]# vim /etc/openstack/openrc.sh
输入替换指令:%s/#/
输入替换指令:%s/PASS=/PASS=000000
修改一下数据
HOST_IP=10.0.0.150
HOST_NAME=controller
HOST_IP_NODE=10.0.0.198
HOST_PASS_NODE=000000
HOST_NAME_NODE=compute
network_segment_IP=10.0.0.0/24
RABBIT_USER=openstack
DOMAIN_NAME=demo
METADATA_SECRET=000000
INTERFACE_NAME=eth1
Physical_NAME=provider
minvlan=1
maxvlan=1000
BLOCK_DISK=vdb1
OBJECT_DISK=vdb2
STORAGE_LOCAL_NET_IP=10.0.0.198
SHARE_DISK=vdb3
将配置文件传输到compute节点
[root@controller ~]# scp /etc/openstack/openrc.sh compute:/etc/openstack/openrc.sh
安装组建
初始化openstack、MYSQL、Keystone、Glance、Nova、Neutron、Dashboard、Heat、Swift、Cinder
安装前,将 compute分盘
umount /mnt
fdisk /dev/vdb
n 回车 回车 +10G
回车 回车 回车 +10G
回车 回车 回车 +10G
w保存
[root@compute ~]# iaas-pre-host.sh
[root@controller ~]# iaas-pre-host.sh
[root@controller ~]# iaas-install-mysql.sh && iaas-install-keystone.sh && iaas-install-glance.sh && iaas-install-placement.sh && iaas-install-nova-controller.sh
[root@compute ~]# iaas-install-nova-compute.sh
[root@controller ~]# iaas-install-neutron-controller.sh
[root@compute ~]# iaas-install-neutron-compute.sh
[root@controller ~]# iaas-install-dashboard.sh && iaas-install-heat.sh && iaas-install-swift-controller.sh
[root@compute ~]# iaas-install-swift-compute.sh
[root@controller ~]# iaas-install-cinder-controller.sh
[root@compute ~]# iaas-install-cinder-compute.sh
私有云服务搭建
MYSQL
1.设置数据库支持大小写;
2.设置数据库缓存 innodb 表的索引, 数据,插入数据时的缓冲为 4G;
3.设置数据库的 log buffer 为 64MB;
4.设置数据库的 redo log 大小为 256MB;
5.设置数据库的 redo log 文件组为 2。
6.修改Memcached 的相关配置, 将内存占用大小设置为 512MB,调整最大连接数参数为2048;
7.调整 Memcached 的数据摘要算法(hash)为 md5;
[root@controller ~]# vi /etc/my.cnf
lower_case_table_names=1
innodb_buffer_pool_size=4G
innodb_log_buffer_size=64M
innodb_log_file_size=256M
innodb_log_files_in_group=2
[root@controller ~]# vi /etc/sysconfig/memcached
MAXCONN="2048"
CACHESIZE="512"
hash_algorithm=md5
Keystone
在 controller 节点上使用 iaas-install-keystone.sh 脚本安装 Keystone 服务。
然后创建 OpenStack 域 210Demo,其中包含 Engineering 与 Production 项目,在域210Demo 中创建组 Devops,其中需包含以下用户:
1.Robert 用户是 Engineering 项目的用户(member)与管理员(admin), email 地址为: Robert@lab.example.com。
2.George 用 户 是 Engineering 项 目 的 用 户 (member ) , email 地 址 为 :George@lab.example.com。
3.William 用户是 Production 项目的用户(member)与管理员(admin), email 地址为: William@lab.example.com。
4.John 用 户 是 Production 项 目 的 用 户 (member ) , email 地 址 为 :John@lab.example.com。
完成后提交控制节点的用户名、密码和 IP 地址到答题框。
[root@controller ~]# openstack domain create --description "210Demo domain" 210Demo
[root@controller ~]# openstack project create --domain 210Demo --description "Engineering project" Engineering
[root@controller ~]# openstack project create --domain 210Demo --description "Production project" Production
[root@controller ~]# openstack group create --domain 210Demo Devops
[root@controller ~]# openstack user create --project Engineering --email Robert@lab.example.com --domain 210Demo Robert
[root@controller ~]# openstack user create --project Engineering --email George@lab.example.com --domain 210Demo George
[root@controller ~]# openstack user create --project Production --email William@lab.example.com --domain 210Demo William
[root@controller ~]# openstack user create --project Production --email John@lab.example.com --domain 210Demo John
[root@controller ~]# openstack role add --user Robert --project Engineering member
[root@controller ~]# openstack role add --user Robert --project Engineering admin
[root@controller ~]# openstack role add --user George --project Engineering member
[root@controller ~]# openstack role add --user William --project Production member
[root@controller ~]# openstack role add --user William --project Production admin
[root@controller ~]# openstack role add --user John --project Production member
在controller节点上使用iaas-install-keystone.sh脚本安装Keystone服务。安装完成后,使用相关命令,创建用户chinaskill,密码为000000。
[root@controller ~]# openstack user create --password 000000 chinaskill
Glance
在 controller 节点上使用 iaas-install-glance.sh 脚本安装 glance 服务。然后使 用提供的 coreos_production_pxe.vmlinuz 镜像(该镜像为 Ironic Deploy 镜像, 是一个 AWS 内核格式的镜像,在 OpenStack Ironic 裸金属服务时需要用到)上传到 OpenStack 平台中, 命名为 deploy-vmlinuz。完成后提交控制节点的用户名、密码和 IP 地址到答题框。
[root@controller ~]# openstack image create --file coreos_production_pxe.vmlinuz --disk-format aki --container-format aki --public deploy-vmlinuz
在controller节点上使用iaas-install-glance.sh脚本安装glance 服务。使用命令将提供的cirros-0.3.4-x86_64-disk.img镜像(该镜像在HTTP服务中,可自行下载)上传至平台,命名为cirros,并设置最小启动需要的硬盘为10G,最小启动需要的内存为1G。完成后提交控制节点的用户名、密码和IP地址到答题框。
[root@controller ~]# openstack image create --file cirros-0.3.4-x86_64-disk.img --min-disk 10 --min-ram 1024 --disk-format qcow2 --container-format bare cirros
Nova
在controller节点和compute节点上分别使用iaas-install-placement.sh脚本、iaas-install-nova-controller.sh脚本、iaas-install-nova-compute.sh脚本安装Nova服务。安装完成后,请修改nova相关配置文件,解决因等待时间过长而导致虚拟机启动超时从而获取不到IP地址而报错失败的问题。
[root@controller ~]# vi /etc/nova/nova.conf
vif_plugging_is_fatal false
在 controller 节点和 compute 节点上分别使用 iaas-install-placement.sh 脚本、 iaas-install-nova -controller.sh 脚本、iaas-install-nova-compute.sh 脚本安装 Nova 服务。在 OpenStack 中, 修改相关配置文件,修改调度器规则采用缓存调度器,缓存主机信息, 提升调度时间。
vi /etc/nova/nova.conf
driver=caching_scheduler
Doshboard
在controller节点上使用iaas-install-dashboad.sh脚本安装dashboad服务。安装完成后,将Dashboard中的Djingo数据修改为存储在文件中(此种修改解决了ALL-in-one快照在其他云平台Dashboard不能访问的问题)
[root@controller ~]# vi /etc/openstack-dashboard/local_settings
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
在控制节点上安装 Dashboard 服务。安装完成后,将 Dashboard 中的 Django 数据修改为存储在文件中。
在 controller 节点上使用 iaas-install-dashboad.sh 脚本安装 Dashboard 服务。
安装完成后,修改相关配置文件,完成下列两个操作:
1.使得登录 Dashboard 平台的时候不需要输入域名;
2.将 Dashboard 中的 Django 数据修改为存储在文件中。
完成后提交控制节点的用户名、密码和 IP 地址到答题框。
[root@controller ~]# vi /etc/openstack-dashboard/local_settings
ALLOWED_HOSTS = ['*']
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
Swift
在控制节点和计算节点上分别使用iaas-install-swift-controller.sh和iaas-install-swift-compute.sh脚本安装Swift服务。安装完成后,使用命令创建一个名叫examcontainer的容器,将cirros-0.3.4-x86_64-disk.img镜像上传到examcontainer容器中,并设置分段存放,每一段大小为10M。
[root@controller ~]# swift post examcontainer
[root@controller ~]# swift upload examcontainer -S 10000000 cirros-0.3.4-x86_64-disk.img
Cinder
在 控 制 节 点 和 计 算 节 点 分 别 使 用 iaas-install-cinder-controller.sh 、 iaas-install-cinder-compute.sh 脚本安装 Cinder 服务,请在计算节点,对块存储进行扩容操 作,即在计算节点再分出一个 5G 的分区,加入到 cinder 块存储的后端存储中去。
[root@controller ~]# pvcreate /dev/vdb5
[root@controller ~]# vgdisplay
[root@controller ~]# vgextend cinder-volumes /dev/vdb5
[root@controller ~]# vgdisplay
Manila
在控制和计算节点上分别使用iaas-install-manila-controller.sh和iaas-install-manila-compute.sh脚本安装manila服务。安装服务后创建default_share_type共享类型(不使用驱动程序支持),接着创建一个大小为2G的共享存储名为share01并开放share01目录对OpenStack管理网段使用权限。最后提交控制节点的用户名、密码和IP地址到答题框。
[root@controller ~]# manila type-create default_share_type false
[root@controller ~]# manila create NFS 2 --name share01
[root@controller ~]# manila access-allow share01 ip 10.0.0.0/24 --access-level rw
Barbican
使用iaas-install-barbican.sh脚本安装barbican服务,安装服务完毕后,使用openstack命令创建一个名为secret01的密钥,创建完成后提交控制节点的用户名、密码和 IP 地址到答题框。
[root@controller ~]# openstack secret store --name secret01 --payload secretkey
[root@controller ~]# openstack secret list
Cloudkitty
使用iaas-install-cloudkitty.sh脚本安装cloudkitty服务,安装完毕后,启用hashmap评级模块,接着创建volume_thresholds组,创建服务匹配规则volume.size,并设置每GB的价格为0.01。接下来对应大量数据设置应用折扣,在组volume_thresholds中创建阈值,设置若超过50GB的阈值,应用2%的折扣(0.98)。
[root@controller ~]# openstack rating module enable hashmap
[root@controller ~]# openstack rating hashmap service create volume.size
创建hashmap service group
[root@controller ~]# openstack rating hashmap group create volume_thresholds
创建volume单价
[root@controller ~]# openstack rating hashmap mapping create -s 第4步创建的hashmap service的id -g 第5步创建的hashmap service group的id -t flat 0.01
创建service rule
[root@controller ~]# openstack rating hashmap threshold create -s 第4步创建的hashmap service的id -g 第5步创建的hashmap service group的id -t rate 50 0.98
私有云运维
OpenStack 开放镜像权限
使用OpenStack私有云平台,在OpenStack平台的admin项目中使用cirros-0.3.4-x86_64-disk.img镜像文件创建名为glance-cirros的镜像,通过OpenStack命令将glance-cirros镜像指定demo项目进行共享使用。
1.在admin项目中使用cirros-0.3.4-x86_64-disk.img镜像文件创建名为glance-cirros的镜像
[root@controller ~]# openstack image create --file cirros-0.3.4-x86_64-disk.img glance-cirros
2.将glance-cirros镜像指定demo项目
[root@controller ~]# openstack image add project glance-cirros demo
3.共享
[root@controller ~]# openstack image set --share --accept --project demo glance-cirros
OpenStack Nova 清除缓存
在OpenStack平台的一台计算节点创建虚拟机,若是第一次在该节点创建次虚拟机,会先将镜像文件复制到该计算节点目录/var/lib/nova/instances/_base。长期下来,该目录会占用比较大的磁盘空间而要清理。通过修改 nova 的配置文件来实现自动清理该缓存目录。
[root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT remove_unused_base_images true
[root@controller ~]# systemctl restart openstack-nova-compute
OpenStack 平台内存优化
搭建完 OpenStack 平台后,关闭系统的内存共享,打开透明大页。
1在控制节点关闭系统的内存共享
[root@controller ~]# echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
Linux 系统调优-脏数据回写
修改系统配置文件, 要求将回写磁盘的时间临时调整为 60 秒。Linux 系统内存中会存在脏数据,一般系统默认脏数据 30 秒后会回写磁盘,修改系统 配置文件, 要求将回写磁盘的时间临时调整为 60 秒。
[root@controller ~]# cat /proc/sys/vm/dirty_expire_centisecs
[root@controller ~]# cat /proc/sys/vm/dirty_writeback_centisecs
echo 修改为6000 (临时生效)
持续生效方法:
修改sysctl.conf添加 sysctl -p
[root@controller ~]# vi /etc/sysctl.conf
vm.dirty_expire_centisecs =6000
vm.dirty_writeback_centisecs = 6000
sysctl -p
Glance 调优
在 OpenStack 平台中,修改相关配置文件,将子进程数量相应的配置修改成 2。
在 OpenStack 平台中,glance-api 处理请求的子进程数量默认是 0,只有一个主进 程,请修改相关配置文件,将子进程数量相应的配置修改成 2,这样的话有一个主进程加 2个子进程来并发处理请求。完成后提交控制节点的用户名、密码和 IP 地址到答题框。
[root@controller ~]# vi + 787 /etc/glance/glance-api.conf
workers = 2
修改文件句柄数
Linux服务器大并发时,往往需要预先调优Linux参数。默认情况下,Linux最大文件句柄数为1024个。当你的服务器在大并发达到极限时,就会报出“too many open files”。创建一台云主机,修改相关配置,将控制节点的最大文件句柄数永久修改为65535。配置完成后提交controller点的用户名、密码和IP地址到答题框。
[root@controller ~]# vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
OpenStack消息队列调优
OpenStack各服务内部通信都是通过RPC来交互,各agent都需要去连接RabbitMQ;随着各服务agent增多,MQ的连接数会随之增多,最终可能会到达上限,成为瓶颈。使用自行搭建的OpenStack私有云平台,分别通过用户级别、系统级别、配置文件来设置RabbitMQ服务的最大连接数为 10240。
1进行用户级别修改
[root@controller ~]# vi /etc/security/limits.conf
openstack soft nofile 10240
openstack hard nofile 10240
[root@controller ~]# ulimit -n 10240
2进行系统级别修改
[root@controller ~]# vi /etc/sysctl.conf
fs.file-max=10240
[root@controller ~]# sysctl -p
3进行修改RabbitMQ配置
[root@controller ~]# vi /usr/lib/systemd/system/rabbitmq-server.service
LimitNOFILE=10240 #在[Service]下添加一行
重启RabbitMQ服务
[root@controller ~]# systemctl daemon-reload && systemctl restart rabbitmq-server
OpenStack Glance镜像压缩
使用自行搭建的OpenStack平台。在HTTP服务中存在一个镜像为CentOS7.5-compress.qcow2的镜像,请使用qemu相关命令,对该镜像进行压缩,压缩后的镜像命名为chinaskill-js-compress.qcow2并存放在/root 目录下。
[root@controller ~]# qemu-img convert -c -O qcow2 CentOS7.5-compress.qcow2 chinaskill-compress.qcow2
Ceph 集群部署
使用提供的 ceph-14.2.22.tar.gz 软件包,在 OpenStack 平台上创建三台 CentOS7.9 系统的云主机, 使用这三个节点安装 ceph 服务并完成初始化操作,第一个节点为 mon/osd 节点,第二、三个节点为 osd 节点,部署完 ceph 后,创建 vms、images、volumes 三个pool。完成后提交第一个节点的用户名、密码和 IP 地址到答题框。
创建三台机器设置主机名 ceph1 ceph2 ceph3修改hosts文件 配置ssh免密
三个节点分别安装ceph(三个节点都执行)
yum install -y ceph ceph-deploy
进入ceph文件夹进行操作
cd /etc/ceph
三个节点分别创建ceph集群 ceph-deploy new <主节点主机名> (三个节点都执行)
ceph-deploy new ceph1
ceph1创建mon(ceph1执行)
ceph-deploy mon create ceph1
三个节点收集并分发秘钥(三个节点都执行)
ceph-deploy gatherkeys ceph1
ceph1在对应节点分别擦除分区表和内容:
ceph-deploy disk zap ceph1 /dev/vdb
ceph-deploy disk zap ceph2 /dev/vdb
ceph-deploy disk zap ceph3 /dev/vdb
在各个节点上创建OSD(对象存储守护进程):
ceph1执行:
ceph-deploy osd create ceph1 --data /dev/vdb
ceph2执行:
ceph-deploy osd create ceph2 --data /dev/vdb
ceph3执行:
ceph-deploy osd create ceph3 --data /dev/vdb
在ceph1节点创建mgr(管理器)
ceph-deploy mgr create ceph1
在每个节点都修改ceph配置以解决mon is allowing insecure global_id reclaim警告:
ceph config set mon auth_allow_insecure_global_id_reclaim false
检查ceph集群健康状态
[root@ceph1 ceph]# ceph -s
cluster:
id: 5e315643-3f2f-4664-8070-3f49fa336525
health: HEALTH_OK
services:
mon: 1 daemons, quorum ceph1 (age 21m)
mgr: ceph1(active, since 12m)
osd: 3 osds: 3 up (since 13m), 3 in (since 13m)
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 147 GiB / 150 GiB avail
pgs:
创建资源池
[root@ceph1 ceph]# ceph osd pool create vms 6 6
pool 'vms' created
[root@ceph1 ceph]# ceph osd pool create images 6 6
pool 'images' created
[root@ceph1 ceph]# ceph osd pool create volumes 6 6
pool 'volumes' created
查看资源池
ceph osd lspools
Glance 对接 Ceph 存储
修改 OpenStack 平台中 Glance 服务的配置文件, 将 Glance 后端存储改为 Ceph 存储。在自己搭建的 OpenStack 平台中修改 glance 服务的相关配置文件, 将 glance 后端存储改为 ceph 存储。也就是所以的镜像会上传至 ceph 的 images pool 中。通过命令使用cirros-0.3.4-x86_64-disk.img 镜像文件上传至云平台中,镜像命名为 cirros。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。
[root@controller ~]# grep -Ev '^#|^$' /etc/glance/glance-api.conf
[DEFAULT]
show_image_direct_url = True
[glance_store]
stores = rbd
default_store = rbd
rbd_store_chunk_size = 8
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf =/etc/ceph/ceph.conf
[root@controller ~]# systemctl restart openstack-glance-*
[root@controller ~]# openstack image create --disk-format qcow2 --public --file cirros-0.3.4-x86_64-disk.img cirros
[root@controller ~]# rbd ls images
356c1d58-5b28-459a-96f7-bea3a095a786
[root@controller ~]# rbd info images/356c1d58-5b28-459a-96f7-bea3a095a786
rbd image '356c1d58-5b28-459a-96f7-bea3a095a786':
size 13 MiB in 2 objects
order 23 (8 MiB objects)
snapshot_count: 1
id: 106593abc842
block_name_prefix: rbd_data.106593abc842
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Wed Aug 30 04:49:30 2023
access_timestamp: Wed Aug 30 04:49:30 2023
modify_timestamp: Wed Aug 30 04:49:30 2023
Cinder 对接 Ceph 存储
修改 OpenStack 平台中 cinder 服务的配置文件, 将 cinder 后端存储改为 Ceph 存储。
修改 OpenStack 平台中 cinder 服务的相关配置文件,将 cinder 后端存储改为 ceph 存 储。使创建的 cinder 块存储卷在 ceph 的 volumes pool 中。 配置完成后,在 OpenStack 平 台中使用创建卷 cinder-volume1,大小为 1G。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。
[root@controller ~]# ceph auth get-or-create client.cinder mon 'profile rbd' osd 'profile rbd pool=volumes, profile rbd pool=vms, profile rbd pool=images'
[client.cinder]
key = AQBAS+9kkOmVEBAAt2KxcIBufLOAEhdNLVI4IA==
[root@controller ~]# ceph auth get-or-create client.cinder | ssh root@controller sudo tee /etc/ceph/ceph.client.cinder.keyring
[client.cinder]
key = AQBAS+9kkOmVEBAAt2KxcIBufLOAEhdNLVI4IA==
[root@controller ~]# ceph auth get-or-create client.cinder | ssh root@compute sudo tee /etc/ceph/ceph.client.cinder.keyring
[client.cinder]
key = AQBAS+9kkOmVEBAAt2KxcIBufLOAEhdNLVI4IA==
[root@controller ~]# chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
[root@controller ~]# ceph auth get-key client.cinder | ssh root@controller tee /etc/ceph/client.cinder.key
AQBAS+9kkOmVEBAAt2Kxc
[root@controller ~]# ceph auth get-key client.cinder | ssh root@compute tee /etc/ceph/client.cinder.key
AQBAS+9kkOmVEBAAt2KxcIBufLOAEhdNLVI4IA==
[root@compute ~]# uuidgen
2bedcc3d-5c8f-4372-8c3c-37f46026e085
[root@compute ~]# vi /etc/ceph/secret.xml
<secret ephemeral='no' private='no'>
<uuid>7c2abd23-6ab5-454b-998c-5c7ce699f138</uuid>
<usage type='ceph'>
<name>client.cinder secret</name>
</usage>
</secret>
[root@compute ~]# sudo virsh secret-define --file /etc/ceph/secret.xml
Secret 19823e0b-0766-4818-90ea-776ed7c682a8 created
[root@compute ~]# sudo virsh secret-set-value --secret 19823e0b-0766-4818-90ea-776ed7c682a8 --base64 $(cat /etc/ceph/client.cinder.key)
Secret value set
[root@compute ~]# sudo virsh secret-list
UUID Usage
--------------------------------------------------------------------------------
19823e0b-0766-4818-90ea-776ed7c682a8 ceph client.cinder secret
[root@compute ~]# vi /etc/cinder/cinder.conf
[DEFAULT]
...
enabled_backends = ceph
glance_api_version = 2
glance_api_servers = http://controller:9292
#[lvm] #注释掉默认的
#volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
#volume_backend_name = lvm
#volume_group = cinder-volumes
#iscsi_protocol = iscsi
#iscsi_helper = lioadm
[ceph]需要自行添加
volume_driver = cinder.volume.drivers.rbd.RBDDriver
volume_backend_name = ceph
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
#用于cephx的身份验证
rbd_user = cinder
#cinder用户访问ceph集群所使用的Secret UUID
rbd_secret_uuid = 19823e0b-0766-4818-90ea-776ed7c682a8
[root@compute ~]# systemctl restart openstack-cinder-volume
[root@controller ~]# systemctl restart openstack-cinder-api.service openstack-cinder-scheduler.service httpd
[root@controller ~]# openstack volume service list
+------------------+--------------+------+---------+-------+----------------------------+
| Binary | Host | Zone | Status | State | Updated At |
+------------------+--------------+------+---------+-------+----------------------------+
| cinder-scheduler | controller | nova | enabled | up | 2023-08-30T14:04:36.000000 |
| cinder-volume | compute@lvm | nova | enabled | down | 2023-08-30T14:03:51.000000 |
| cinder-volume | compute@ceph | nova | enabled | up | 2023-08-30T14:05:14.000000 |
+------------------+--------------+------+---------+-------+----------------------------+
[root@controller ~]# openstack volume type create --public --property volume_backend_name="ceph" ceph_rbd
+-------------+--------------------------------------+
| Field | Value |
+-------------+--------------------------------------+
| description | None |
| id | 09cd8be4-51ea-4c9f-b6a5-3f8489d1a90f |
| is_public | True |
| name | ceph_rbd |
| properties | volume_backend_name='ceph' |
+-------------+--------------------------------------+
[root@controller ~]# openstack volume create --type ceph_rbd --size 1 ceph_rbd_volume1
+---------------------+--------------------------------------+
| Field | Value |
+---------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| consistencygroup_id | None |
| created_at | 2023-08-30T14:06:02.000000 |
| description | None |
| encrypted | False |
| id | 50ba069a-00f8-4bef-94e0-3589a924b2de |
| migration_status | None |
| multiattach | False |
| name | ceph_rbd_volume1 |
| properties | |
| replication_status | None |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| type | ceph_rbd |
| updated_at | None |
| user_id | 897bd12eb08749bbb2127facfea9d4a1 |
+---------------------+--------------------------------------+
[root@controller ~]# openstack volume list
+--------------------------------------+------------------+-----------+------+-------------+
| ID | Name | Status | Size | Attached to |
+--------------------------------------+------------------+-----------+------+-------------+
| 50ba069a-00f8-4bef-94e0-3589a924b2de | ceph_rbd_volume1 | available | 1 | |
+--------------------------------------+------------------+-----------+------+-------------+
[root@controller ~]# rbd ls volumes
volume-50ba069a-00f8-4bef-94e0-3589a924b2de
[root@controller ~]# rbd info volumes/volume-50ba069a-00f8-4bef-94e0-3589a924b2de
rbd image 'volume-50ba069a-00f8-4bef-94e0-3589a924b2de':
size 1 GiB in 256 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 10ba1d5aa1df
block_name_prefix: rbd_data.10ba1d5aa1df
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Wed Aug 30 14:06:03 2023
access_timestamp: Wed Aug 30 14:06:03 2023
modify_timestamp: Wed Aug 30 14:06:03 2023
Nova 对接 Ceph 存储
修改 OpenStack 平台中 Nova 服务的配置文件,将 Nova 后端存储改为 Ceph 存储。
修改 OpenStack 平台中 nova 服务的相关配置文件,将 nova 后端存储改为 ceph 存储。 使 nova 所创建的虚拟机都存储在 ceph 的 vms pool 中。配置完成后在 OpenStack 平台中使 用命令创建云主机 server1。完成后提交 controller 节点的用户名、密码和 IP 地址到答题框。
[root@compute ~]# mkdir -p /var/run/ceph/guests/ /var/log/qemu/
[root@compute ~]# chown qemu:libvirt /var/run/ceph/guests /var/log/qemu/
[root@compute ~]# vi /etc/ceph/ceph.conf
[root@compute ~]# cat /etc/ceph/ceph.conf
[global]
fsid = 8d253039-7c95-41fe-b80a-3d4676213e05
mon_initial_members = controller
mon_host = 172.29.20.102
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
mon_max_pg_per_osd = 300
rbd cache = true
rbd cache writethrough until flush = true
admin socket = /var/run/ceph/guests/$cluster-$type.$id.$pid.$cctid.asok
log file = /var/log/qemu/qemu-guest-$pid.log
rbd concurrent management ops = 20
[root@compute ~]# systemctl restart ceph*
[root@controller ~]# grep -Ev '^#|^$' /etc/nova/nova.conf
[libvirt]
virt_type = qemu
images_type = rbd
images_rbd_pool = vms
images_rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_user = cinder
rbd_secret_uuid = 7c2abd23-6ab5-454b-998c-5c7ce699f138
disk_cachemodes="network=writeback"
inject_password = false
inject_key = false
inject_partition = -2
live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST"
[root@compute ~]# grep -Ev '^#|^$' /etc/nova/nova.conf
[libvirt]
virt_type = qemu
images_type = rbd
images_rbd_pool = vms
images_rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_user = cinder
rbd_secret_uuid = 7c2abd23-6ab5-454b-998c-5c7ce699f138
disk_cachemodes="network=writeback"
inject_password = false
inject_key = false
inject_partition = -2
live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST"
[root@controller ~]# systemctl restart openstack-nova-*
[root@compute ~]# systemctl restart openstack-nova-compute.service
[root@controller ~]# openstack server add volume test ceph_rbd_volume1
[root@controller ~]# rbd ls vms
dd6e9037-cde2-4917-a62d-defa8821dd0a_disk
[root@controller ~]# rbd info vms/dd6e9037-cde2-4917-a62d-defa8821dd0a_disk
rbd image 'dd6e9037-cde2-4917-a62d-defa8821dd0a_disk':
size 20 GiB in 5120 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 11b399136f08
block_name_prefix: rbd_data.11b399136f08
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Wed Aug 30 14:21:10 2023
access_timestamp: Wed Aug 30 14:21:10 2023
modify_timestamp: Wed Aug 30 14:25:35 2023
glance对接cinder后端存储
在自行搭建的OpenStack平台中修改相关参数,使glance可以使用cinder作为后端存储,将镜像存储于cinder卷中。使用cirros-0.3.4-x86_64-disk.img文件创建 cirros-image 镜像存储于cirros-cinder卷中,通过cirros-image镜像使用cinder卷启动盘的方式进行创建虚拟机。
1.修改glance配置文件/etc/glance/glance-api.conf
[root@controller ~]# openstack-config --set /etc/glance/glance-api.conf DEFAULT show_multiple_locations true
[root@controller ~]# vi + 3349 /etc/glance/glance-api.conf
[glance_store]
#stores = file,http
#demo_store = file
#filesystem_store_datadir = /var/lib/glance/images/
default_store = cinder
stores = cinder
2修改/etc/cinder/cinder.conf
[root@controller ~]# openstack-config --set /etc/cinder/cinder.conf DEFAULT allowed_direct_url_schemes cinder
[root@controller ~]# openstack-config --set /etc/cinder/cinder.conf DEFAULT glance_api_version 2
[root@controller ~]# openstack-config --set /etc/cinder/cinder.conf DEFAULT image_upload_use_cinder_backend true
[root@controller ~]# openstack-config --set /etc/cinder/cinder.conf DEFAULT image_upload_use_internal_tenant true
3重启相应的服务
[root@controller ~]# systemctl restart openstack-cinder-api.service openstack-cinder-scheduler.service httpd
[root@controller ~]# systemctl restart openstack-glance-api.service
4创建cirros-cinder卷
[root@controller ~]# openstack volume create --size 5 cirros-cinder
5使用cirros-0.3.4-x86_64-disk.img文件创建cirros-image镜像存储于cirros-cinder卷中
[root@controller ~]# glance image-create --container-format bare --disk-format qcow2 --file cirros-0.3.4-x86_64-disk.img --name cirros-image --store cinder://cirros-cinder卷的ID
OpenStack Heat运维:创建容器
在自行搭建的OpenStack私有云平台上 , 在/root目录下编写Heat模板create_container.yaml,要求执行yaml文件可以创建名为heat-swift的容器。
[root@controller ~]# vi create_container.yaml
heat_template_version: "2018-08-31"
resources:
Container_1:
type: "OS::Swift::Container"
properties:
name: heat_swift
NFS 对接 Glance 后端存储
使用 OpenStack 私有云平台,创建一台云主机,安装 NFS 服务, 然后对接 Glance 后端
存储。
使用赛项提供的 OpenStack 私有云平台, 创建一台云主机(镜像使用 CentOS7.9,flavor 使用带临时磁盘 50G 的) ,配置该主机为 nfs 的 server 端,将该云主机中的 50G 磁盘通过/mnt/test 目录进行共享(目录不存在可自行创建) 。然后配置 controller 节点 为 nfs 的 client 端,要求将/mnt/test 目录作为 glance 后端存储的挂载目录。配置完成
后提交 controller 控制节点的用户名、密码和 IP 地址到答题框。
nfs-server:
[root@nfs-server ~]# mkdir /mnt/test
[root@nfs-server ~]# vi /etc/exports
/mnt/test *(rw,sync,no_root_squash)
[root@nfs-server ~]# systemctl enable nfs-server
[root@nfs-server ~]# systemctl start nfs-server
[root@controller ~]# mount nfs-server-ip:/mnt/test /var/lib/glance/images
[root@controller ~]# df -Th
OpenStack Heat运维:创建硬盘
在自行搭建的OpenStack私有云平台上,在/root目录下编写Heat模板heat_cinder.yaml,要求执行yaml文件可以创建名为heat-cinder,大小为2G的云硬盘。
heat_template_version: 2016-04-08
resources:
cinder_volume:
type: OS::Cinder::Volume
properties:
name: heat-cinder
size: 2
OpenStack Heat运维:创建用户
编写 Heat 模板 create_user.yaml,创建名为 heat-user 的用户。
使用自己搭建的OpenStack私有云平台, 使用heat编写摸板(heat_template_version: 2016-04-08)创建名为”chinaskills”的 domain,在此 domain 下创建名为 beijing_group 的 租 户 , 在 此 租 户 下 创 建 名 为 cloud 的 用 户 , 将 此 文 件 命 名 及 保 存 在 /root/user_create.yml,完成后提交 controller 点的用户名、密码和 IP 地址到答题框。
[root@controller ~]# vi create_user.yaml
heat_template_version: "2016-04-08"
resources:
domain:
type: OS::Keystone::Domain
properties:
name: "chinaskills"
project:
type: OS::Keystone::Project
properties:
name: "beijing_group"
domain: { get_resource: domain}
user:
type: OS::Keystone::User
properties:
name: "cloud"
password: "000000"
domain: { get_resource: domain}
default_project: { get_resource: project}
OpenStack Nova优化
OpenStack平台若意外断电,在电力系统恢复后,OpenStack平台可以自启动,但是运行的云主机需要管理员手动开启,在OpenStack平台中配置虚拟机自启动,当宿主机启动后,把虚拟机恢复到之前的状态,如果虚拟机之前是关机,则宿主机启动后,虚拟机也是关机状态;如果虚拟机之前是开机状态,则宿主机启动后,虚拟机还是开机状态中运行的虚拟机。配置完成后提交改动节点的用户名、密码和IP地址到答题框。
[root@controller ~]# vi /etc/nova/nova.conf
resume_guests_state_on_host_boot=true
OpenStack Nova清除缓存
在OpenStack平台的一台计算节点创建虚拟机,若是第一次在该节点创建次虚拟机,会先将镜像文件复制到该计算节点目录/var/lib/nova/instances/_base。长期下来,该目录会占用比较大的磁盘空间而要清理。可以通过修改nova的配置文件来自动清理该缓存目录,即在该节点没有使用某镜像启动的云主机,那么这个镜像在过一定的时间后会被自动删除。
[root@controller ~]# vi /etc/nova/nova.conf
remove_unused_base_images=true
KVM 优化
在 OpenStack 平台上修改相关配置文件, 启用-device virtio-net-pci in kvm。
在自行搭建的 OpenStack 私有云平台或赛项提供的 all-in-one 平台上,修改相关配置 文件, 启用-device virtio-net-pci in kvm,配置完成后提交控制节点的用户名、密码和IP 地址到答题框。
[root@controller ~]# vi /etc/nova/nova.conf
libvirt_use_virtio_for_bridges=true
Redis主从
使用提供的OpenStack私有云平台,申请三台CentOS7.9系统的云主机,使用提供的http源,在三个节点自行安装Redis服务并启动,配置Redis的访问需要密码,密码设置为123456。然后将这三个Redis节点配置为Redis的一主二从三哨兵架构,即一个Redis主节点,两个从节点,三个节点均为哨兵节点
主节点:
修改redis.conf
搜索requirepass 设置密码为123456
搜索protected-mode 设置为no
搜索bind 改为0.0.0.0
设置开机自启动
从节点:
修改redis.conf
搜索protected-mode 设置为no
搜索bind 改为0.0.0.0
搜索slave 改为主节点ip和端口6379
搜索masterauth 改为主节点密码
设置开机自启动
vi /etc/redis.conf
主机配置:
# 所有ip均可访问,第61行
bind 0.0.0.0
# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭设置为no,第80行
protected-mode no
# 启动端口6379,第84行,一般不用设置
port 6379
# redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端),第128行
daemonize yes
# 当master设置了密码保护时,slave服务连接master的密码(主从配置时,必须要设置此密码),第272行
masterauth 123456
# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过auth <password>命令提供密码,默认关闭,第480行
requirepass 123456
从机配置:
bind 0.0.0.0(第61行)
protected-mode no (第80行)
port 6379(第84行,一般不用设置)
daemonize yes(第128行)
# 指定当本机为slave 服务时,设置master服务的IP地址及端口,在redis启动的时候会自动跟master进行数据同步,所以两台从机同样配置。第265行,(主从配置时,必须要设置此密码)
slaveof <主节点IP> 6379(第265行)
masterauth 123456(第272行)
requirepass 123456(第480行)
注意:老版本使用slaveof指定主机的IP和端口,新版本使用replicaof指定主机的IP和端口
启动redis服务
systemctl start redis
检验是否成功
redis-cli -a 123456 info replication
哨兵模式,三台主机编辑/etc/redis-sentinel.conf,启动哨兵模式
vi /etc/redis-sentinel.conf
# 关闭保护模式,可以外部访问。第17行
protected-mode no
# 端口默认为26379。第21行,可以忽略
port 26379
# 设置为后台启动。添加此行
daemonize yes
# 指定主机IP地址和端口(三台配置均为指定主机ip),并且指定当有2台哨兵认为主机宕机,则对主机进行容灾切换。第69行
sentinel monitor mymaster <主节点IP> 6379 2
# 当在Redis实例中开启了requirepass,这里就需要提供密码。第88行
sentinel auth-pass mymaster 123456
# 这里设置了主机多少秒无响应,则认为挂了。此处30秒,第98行,此行可忽略
sentinel down-after-milliseconds mymaster 30000
# 主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。第106行,此行可忽略
snetinel parallel-syncs mymaster 1
# 故障转移的超时时间,这里设置为3分钟。第131行,此行可忽略
sentinel failover-timeout mymaster 180000
启动哨兵模式
redis-sentinel /etc/redis-sentinel.conf
检验是否成功
redis-cli -h 127.0.0.1 -p 26379 INFO Sentinel
OpenStack Glance存储限制
在OpenStack平台上,请修改glance后端配置文件,将用户的镜像存储配额限制为20GB。完成后提交控制节点的用户名、密码和IP地址到答题框
[root@controller ~]# vi /etc/glance/glance-api.conf
image_size_cap = 20GB
user_storage_quota = 20GB
Linux内核优化
在使用Linux服务器的时候,TCP协议规定,对于已经建立的连接,网络双方要进行四次挥手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。因为服务器程序要同时管理大量连接,所以很有必要保证无用的连接完全断开,否则大量僵死的连接会浪费许多服务器资源。使用一台CentOS7.9云主机,修改相应的配置文件,要求如下:
(1)NAT 开启 IP 转发支持;
(2)FIN-WAIT-2 状态的时间设置为 30s;
完成后提交修改节点的用户名、密码和IP地址到答题框。
[root@controller ~]# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.tcp_fin_timeout = 30
配置主机禁 ping
修改 controller 节点的相关配置文件,配置 controller 节点禁止其他节点可以 ping它。
[root@controller ~]# vi /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_all = 1
私有云平台优化:系统网络优化
使用自行创建的 OpenStack 云计算平台,配置控制节点的网络缓存,使得每个 UDP连接(发送、接受)保证能有最小 358 KiB 最大 460 KiB 的 buffer,重启后仍然生效。配置完成后提交 controller 控制节点的用户名、密码和 IP 地址到答题框
vim /etc/sysctl.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.core.rmem_default = 358400
net.core.rmem_max = 460800
net.core.wmem_default = 358400
net.core.wmem_max = 460800