跳转至

基础-T版-03-存储管理

本地镜像存储空间扩容

如果我们的镜像存储空间不足,可以单独挂载一个磁盘进行使用

推荐大家一定要在写数据少的情况下操作,必须夜里凌晨进行

mkfs.xfs -f /dev/sdb
mount /dev/sdb /mnt/
\cp -arf /var/lib/glance/images/* /mnt/
umount -lf /mnt/
 mount /dev/sdb /var/lib/glance/images/

chown glance.glance /var/lib/glance/images
chmod 750 /var/lib/glance/images

echo "/dev/sdb                                 /var/lib/glance/images  xfs     defaults        0 0" >>/etc/fstab

本地虚拟机存储空间扩容

如果我们的虚拟机存储空间不足,可以单独挂载一个磁盘进行使用

推荐大家一定要在写数据少的情况下操作,必须夜里凌晨进行

mkfs.xfs -f /dev/sdc
mount /dev/sdc /mnt/
\cp -arf /var/lib/nova/instances/* /mnt/
umount -lf /mnt/
mount /dev/sdc /var/lib/nova/instances/
chown nova.nova /var/lib/nova/instances
echo "/dev/sdc                                 /var/lib/nova/instances  xfs     defaults        0 0" >>/etc/fstab

source /root/demo-openrc 
openstack network list
openstack server create --flavor m1.nano --image cirros \
  --nic net-id=8547b120-8083-432f-a5f9-8ea7beeda429 --security-group default \
  --key-name mykey selfservice-instance-disk01


如果无法创建虚拟机,可重启服务即可(一般情况不需要操作)
systemctl restart libvirtd.service openstack-nova-compute.service

本地lvm卷类型

计算节点上的操作
[root@compute1 ~]# vim /etc/cinder/cinder.conf 
[lvm]
volume_backend_name=iSCSI-Storage

systemctl restart openstack-cinder-volume.service 

控制节点上的操作
[root@linux-node1 ~]# cinder type-create lvm
[root@linux-node1 ~]# cinder type-key lvm set volume_backend_name=iSCSI-Storage

NFS做后端存储

安装nfs相关的软件包

yum -y install nfs-utils rpcbind

创建挂载的配置文件

[root@compute1 ~]# vim /etc/cinder/nfs_shares   #设置nfs的挂载地址
192.168.1.215:/data/nfs

配置cinder支持nfs

[root@compute1 ~]# vim /etc/cinder/cinder.conf
[DEFAULT]
volume_driver = cinder.volume.drivers.nfs.NfsDriver    # 配置驱动为NFS
nfs_shares_config = /etc/cinder/nfs_shares               # NFS挂载的配置文件
nfs_mount_point_base = $state_path/mnt                 # 挂载的地址
volume_backend_name = NFS-Storage                      # 配置存储的名称


[DEFAULT]
enabled_backends = lvm,nfs

在最后一行输入
[nfs]
volume_driver = cinder.volume.drivers.nfs.NfsDriver
nfs_shares_config = /etc/cinder/nfs_shares
nfs_mount_point_base = $state_path/mnt
volume_backend_name = NFS-Storage

修改配置文件权限

chown root:cinder /etc/cinder/nfs_shares
ll /etc/cinder/nfs_shares

重新启动cinder服务

systemctl restart openstack-cinder-volume.service 

查看是否挂载成功

[root@compute1 ~]# df -h|grep nfs
192.168.1.214:/data/nfs  500G   32M  500G   1% /var/lib/cinder/mnt/6bf45f3e602ae29000ba4f69c60fc252

查看nfs是否up

source /root/admin-openrc
cinder service-list

我们需要对其进行创建类型,比如LVM的关联到lvm,NFS的关联到NFS存储上。如下配置:

[root@linux-node1 ~]# cinder type-create nfs        #创建nfs的类型

现在将两个类型关联起来

[root@linux-node1 ~]# cinder type-key nfs set volume_backend_name=NFS-Storage
#关联NFS类型

我们可以通过web界面进行创建nfs卷

image-20220518144055590

当然我们可以通过命令进行创建nfs类型的卷

source /root/demo-openrc 
cinder create 10 --name  nfs02 --volume-type  nfs

创建虚拟机

source /root/demo-openrc 
openstack image list
openstack network list
source /root/demo-openrc 
openstack server create --flavor 2C2G --image linux-node-moban \
  --nic net-id=8547b120-8083-432f-a5f9-8ea7beeda429 --security-group default \
  --key-name mykey centos79001

openstack floating ip create provider
openstack server add floating ip centos79001 192.168.57.111

挂载卷

openstack server add volume centos79001 nfs01

分离卷(需要将虚拟机关机)

openstack server remove volume centos79001 nfs01

登录虚拟机进行挂载nfs磁盘

mkfs.xfs -f /dev/vdb
mkdir -p /data
mount /dev/vdb /data/
echo "/dev/sdb                                  /data                   xfs     defaults        0 0" >>/etc/fstab ; cat /etc/fstab |grep data
echo "This is nfs data" > /data/file.txt    

重置cinder卷的状态

source /root/admin-openrc 
cinder reset-state 701c907d-2895-4804-b4a9-486be54bc05a --state available
source /root/demo-openrc 
cinder list

我们也可以对卷进行扩容(需要将虚拟机关机)

source /root/demo-openrc
cinder list
cinder extend 6b1ef075-c2b0-4ff4-9b22-8904b0c1045d 30


echo 1 > /sys/block/vdb/device/rescan
yum -y install cloud-init cloud-utils-growpart
xfs_growfs /dev/vdb
yum -y remove  cloud-init cloud-utils-growpart

我们也可以对卷进行缩容(需要将虚拟机关机) ?

source /root/demo-openrc
cinder list
openstack server remove volume centos79001 nfs01
cinder extend 701c907d-2895-4804-b4a9-486be54bc05a 10
openstack server remove volume centos79001 nfs01
cinder list

检查NFS的文件夹是否有虚拟硬盘文件

[root@linux-bkce-node214 nfs]# cd /data/nfs/
[root@linux-bkce-node214 nfs]# yum -y install qemu-img
[root@linux-bkce-node214 nfs]# qemu-img info volume-b0ec13e8-f300-4824-9a70-79abc786d693
image: volume-b0ec13e8-f300-4824-9a70-79abc786d693
file format: raw
virtual size: 15G (16106127360 bytes)
disk size: 0

将raw格式虚拟磁盘转换为qcow2格式

cd /data/nfs
qemu-img convert -f raw -O qcow2 volume-b0ec13e8-f300-4824-9a70-79abc786d693 volume-b0ec13e8-f300-4824-9a70-79abc786d693.qcow2
chown root.root volume-34b9228c-3d20-4fad-a845-4c6a15a949e9

qemu-img info volume-b0ec13e8-f300-4824-9a70-79abc786d693.qcow2

Ceph对接openstack

OpenStack Train(十二):Openstack 与 Ceph 集群的集成

https://blog.51cto.com/flyfish225/5277996

我们还将展示如何将三个重要的OpenStack用例:Cinder(块存储)、Glance(镜像)和Nova(虚拟机虚拟磁盘)与Ceph集成。

Ceph提供统一的横向扩展存储,使用带有自我修复和智能预测故障功能的商用x86硬件。它已经成为软件定义存储的事实上的标准。因为Ceph是开源的,它使许多供应商能够提供基于Ceph的软件定义存储系统。 Ceph不仅限于Red Hat、Suse、Mirantis、Ubuntu等公司。 SanDisk、富士通、惠普、戴尔、三星等公司现在也提供集成解决方案。甚至还有大规模的社区建造的环境(如CERN),为10000个虚拟机提供存储服务。

Ceph绝不局限于OpenStack,但是这是Ceph开始获得牵引力的地方。看看最新的OpenStack用户调查,Ceph是OpenStack存储的显著领导者。2016年4月OpenStack用户调查报告的第42页显示,Ceph占OpenStack存储的57%,下一个是LVM(本地存储)占28%,NetApp占9%。如果我们不看LVM,Ceph领先其他存储公司48%,令人难以置信。这是为什么?

有好几个原因,我认为以下是最重要的三个:

Ceph是一个横向扩展的统一存储平台。OpenStack最需要的存储能力的两个方面:能够与OpenStack本身一起扩展,并且扩展时不需要考虑是块(Cinder)、文件(Manila)还是对象(Swift)。传统存储供应商需要提供两个或三个不同的存储系统来实现这一点。它们不同样扩展,并且在大多数情况下仅在永无止境的迁移周期中纵向扩展。它们的管理功能从来没有真正实现跨不同的存储用例集成。

Ceph具有成本效益。 Ceph利用Linux作为操作系统,而不是专有的系统。你不仅可以选择找谁购买Ceph,还可以选择从哪里购买硬件。可以是同一供应商也可以是不同的。你可以购买硬件,甚至从单一供应商购买Ceph +硬件的集成解决方案。已经有针对Ceph的超融合方案出现(在计算节点上运行Ceph服务)。

和OpenStack一样,Ceph是开源项目。这允许更紧密的集成和跨项目开发。专有供应商总是在努力追赶,因为他们有秘密要保护,他们的影响力通常限于开源社区。

这里是一个架构图,显示了所有需要存储的不同OpenStack组件。它显示了这些组件如何与Ceph集成,以及Ceph如何提供一个统一的存储系统,扩展以满足所有这些用例。

img

如果你对与Ceph和OpenStack相关的更多主题感兴趣,推荐这个网址:http://ceph.com/category/ceph-and-openstack/

说够了为什么Ceph和OpenStack如此伟大,该说说如何连接它们了。如果你没有Ceph环境,可以按照这篇文章快速设置。

Ceph与Glance集成

Glance是OpenStack中的映像服务。默认情况下,映像存储在本地控制器,然后在被请求时复制到计算主机。计算主机缓存镜像,但每次更新镜像时,都需要再次复制。

Ceph为Glance提供了后端,允许镜像存储在Ceph中,而不是本地存储在控制器和计算节点上。这大大减少了抓取镜像的网络流量,提高了性能,因为Ceph可以克隆镜像而不是复制镜像。此外,它使得在OpenStack部署或诸如多站点OpenStack之类的概念的迁移变得更简单。

安装Glance使用的Ceph客户端。

[root@192-168-56-11 ~]# yum -y install ceph python-rbd

在Ceph管理节点。为Glance镜像创建Ceph RBD池。

[root@192-168-56-15 ~]# ceph osd pool create images 128
pool 'images' created
[root@192-168-56-15 ~]# ceph osd pool application enable images rbd

创建将允许Glance访问池的密钥环。

[root@192-168-56-15 ~]# ceph auth get-or-create client.images mon 'allow r' osd 'allow class-read object_prefix rdb_children, allow rwx pool=images' -o /etc/ceph/ceph.client.images.keyring

提示:上面的命令会生成如下文件

[root@192-168-56-15 ~]# ll /etc/ceph/ceph.client.images.keyring 
-rw-r--r-- 1 root root 64 Jun 21 15:15 /etc/ceph/ceph.client.images.keyring

将密钥环和ceph的配置文件复制到OpenStack控制节点上的/etc/ceph目录下

[root@192-168-56-15 ~]# cd /etc/ceph/
[root@192-168-56-15 ceph]# scp ceph.conf ceph.client.images.keyring 192.168.56.11:/etc/ceph/

在控制节点上设置ceph文件相关的权限,让 Glance可以访问Ceph密钥环

[root@192-168-56-11 ~]#
chgrp glance /etc/ceph/ceph.client.images.keyring
chmod 0640 /etc/ceph/ceph.client.images.keyring

在控制节点上将密钥环文件添加到Ceph配置

[root@192-168-56-11 ~]# vim /etc/ceph/ceph.conf
[client.images]
keyring = /etc/ceph/ceph.client.images.keyring

在控制节点上创建原始Glance配置的备份

[root@192-168-56-11 ~]# cp /etc/glance/glance-api.conf /etc/glance/glance-api.conf.orig

在控制节点上修改glance的相关配置

[root@192-168-56-11 ~]# vim /etc/glance/glance-api.conf
[glance_store]
#stores = file,http
#default_store = file
#filesystem_store_datadir = /var/lib/glance/images/


stores = glance.store.rbd.Store
default_store = rbd
rbd_store_pool = images
rbd_store_user = images
rbd_store_ceph_conf = /etc/ceph/ceph.conf

提示:这里一定要主要修改标签下的参数,不要直接放在标签下面

在控制节点上重新启动Glance服务

[root@192-168-56-11 ~]# systemctl restart openstack-glance-api

将测试的镜像文件上传到控制节点的/root目录下

[root@192-168-56-11 ~]# ll cirros-0.3.4-x86_64-disk.img 
-rw-r--r-- 1 root root 13287936 Jun 20 10:57 cirros-0.3.4-x86_64-disk.img

现在我们来上传镜像到ceph存储上

source /root/admin-openrc
openstack image create "ceph-cirros" --file cirros-0.3.5-x86_64-disk.img --disk-format qcow2 --container-format bare --public

cd /var/lib/glance/images
 glance image-create --name "ceph-centos79200920220510" \
  --file /var/lib/glance/images/centos79200920220510.qcow2 \
  --disk-format qcow2 --container-format bare \
  --property hw_qemu_guest_agent=yes \
  --property os_type="linux" \
  --visibility public \
  --progress

glance image-list|grep ceph

我们到ceph存储的mon的admin节点查看是否将镜像上传成功

[root@192-168-56-15 ~]# rbd ls images
8484f103-66ff-4c5a-92d1-5fcf2d151193

这里就表示上传成功啦

image-20211030143143565

我们可以在界面上看到上传成功

Ceph与Cinder集成

准备环境:首先我们需要配置好cinder的控制节点与计算节点,在这个基础之上在配置ceph与cinder的集成

Cinder是OpenStack中的块存储服务。 Cinder提供了关于块存储的抽象,并允许供应商通过提供驱动程序进行集成。在Ceph中,每个存储池可以映射到不同的Cinder后端。这允许创建诸如金、银或铜的存储服务。你可以决定例如金应该是复制三次的快速SSD磁盘,银应该是复制两次,铜应该是使用较慢的擦除编码的磁盘。

安装Glance使用的Ceph客户端。

[root@192-168-56-11 ~]# yum -y install ceph python-rbd

为Cinder卷创建一个Ceph池

[root@192-168-56-15 ~]# ceph osd pool create volumes 128
pool 'volumes' created
[root@192-168-56-15 ~]# ceph osd pool application enable volumes rbd

创建一个密钥环以授予Cinder访问权限

[root@192-168-56-15 ~]# ceph auth get-or-create client.volumes mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rx pool=images' -o /etc/ceph/ceph.client.volumes.keyring

将密钥与配置文件环复制到OpenStack计算节点

[root@192-168-56-15 ~]# cd /etc/ceph/
[root@192-168-56-15 ceph]# scp ceph.client.volumes.keyring ceph.conf 192.168.56.12:/etc/ceph/

创建一个只包含OpenStack计算节点上的身份验证密钥的文件

[root@192-168-56-15 ~]# ceph auth get-key client.volumes |ssh 192.168.56.12 tee /etc/ceph/client.volumes.key

在计算节点上设置密钥环文件的权限,以便Cinder可以访问

[root@192-168-56-12 ~]#
chgrp cinder /etc/ceph/ceph.client.volumes.keyring
chmod 0640 /etc/ceph/ceph.client.volumes.keyring

在计算节点上将密钥环添加到Ceph配置文件中

[root@192-168-56-12 ~]# vim /etc/ceph/ceph.conf
[client.volumes]
keyring = /etc/ceph/ceph.client.volumes.keyring

使KVM Hypervisor访问Ceph

[root@192-168-56-12 ~]# uuidgen |tee /etc/ceph/cinder.uuid.txt
82934e3a-65a1-4f89-8b4c-a413ecc039c3

在virsh中创建一个密钥,因此KVM可以访问Ceph池的Cinder卷

[root@192-168-56-12 ~]# vim /etc/ceph/cinder.xml
<secret ephemeral='no' private='no'>
  <uuid>82934e3a-65a1-4f89-8b4c-a413ecc039c3</uuid>
  <usage type='ceph'>
    <name>client.volumes secret</name>
  </usage>
</secret>


[root@192-168-56-12 ~]# virsh secret-define --file /etc/ceph/cinder.xml
Secret 82934e3a-65a1-4f89-8b4c-a413ecc039c3 created
[root@192-168-56-12 ~]# virsh secret-set-value --secret 82934e3a-65a1-4f89-8b4c-a413ecc039c3 --base64 $(cat /etc/ceph/client.volumes.key)
Secret value set

在计算节点上为Cinder添加一个Ceph后端

[root@192-168-56-12 ~]# vim /etc/cinder/cinder.conf
[DEFAULT]
enabled_backends = rbd

[rbd]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
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
glance_api_version = 2
rbd_user = volumes
rbd_secret_uuid = 82934e3a-65a1-4f89-8b4c-a413ecc039c3
volume_backend_name = CEPH-Storage

在计算节点上重新启动Cinder服务

[root@192-168-56-12 ~]# systemctl restart openstack-cinder-volume.service target.service

在控制节点上查看cinder的节点信息

[root@192-168-56-11 ~]# source /root/admin-openrc 
[root@192-168-56-11 ~]# cinder service-list
+------------------+-------------------+------+---------+-------+----------------------------+-----------------+
| Binary           | Host              | Zone | Status  | State | Updated_at                 | Disabled Reason |
+------------------+-------------------+------+---------+-------+----------------------------+-----------------+
| cinder-scheduler | 192-168-56-11     | nova | enabled | up    | 2017-06-21T07:45:46.000000 | -               |
| cinder-volume    | 192-168-56-12@lvm | nova | enabled | down  | 2017-06-21T07:44:33.000000 | -               |
| cinder-volume    | 192-168-56-12@rbd | nova | enabled | up    | 2017-06-21T07:45:51.000000 | -               |
+------------------+-------------------+------+---------+-------+----------------------------+-----------------+

设置ceph卷类型

cinder type-create ceph
cinder type-key ceph set volume_backend_name=CEPH-Storage

在控制节点上创建Cinder卷

[root@192-168-56-11 ~]# source /root/demo-openrc 
[root@192-168-56-11 ~]# cinder create 10 --name  ceph01 --volume-type  ceph
[root@192-168-56-11 ~]# cinder list
+--------------------------------------+-----------+--------+------+-------------+----------+-------------+
| ID                                   | Status    | Name   | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+--------+------+-------------+-
| a5271730-e2ef-4fad-9a5e-145d9e38ff9b | available | test01 | 1    | -           | false    |             |
+--------------------------------------+-----------+--------+------+-------------+-

在Ceph中列出Cinder卷

[root@192-168-56-15 ~]# rbd ls volumes
volume-a5271730-e2ef-4fad-9a5e-145d9e38ff9b
[root@192-168-56-15 ~]# rbd info volumes/volume-a5271730-e2ef-4fad-9a5e-145d9e38ff9b
rbd image 'volume-a5271730-e2ef-4fad-9a5e-145d9e38ff9b':
    size 1024 MB in 256 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.107b7d64e86d
    format: 2
    features: layering
    flags:

Ceph与Nova集成

Nova是OpenStack中的计算服务。 Nova存储与默认的运行虚拟机相关联的虚拟磁盘镜像,在/ var / lib / nova / instances下的Hypervisor上。在虚拟磁盘映像的计算节点上使用本地存储有一些缺点:

镜像存储在根文件系统下。大镜像可能导致文件系统被填满,从而导致计算节点崩溃。

计算节点上的磁盘崩溃可能导致虚拟磁盘丢失,因此无法进行虚拟机恢复。

Ceph是可以直接与Nova集成的存储后端之一。在本节中,我们将看到如何配置

安装Glance使用的Ceph客户端。

[root@192-168-56-11 ~]# yum -y install ceph python-rbd

为Nova卷创建一个Ceph池

[root@192-168-56-15 ~]# ceph osd pool create vms 128
pool 'vms' created
[root@192-168-56-15 ~]# ceph osd pool application enable vms rbd

为Nova创建验证密钥环

[root@192-168-56-15 ~]# ceph auth get-or-create client.nova mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images' -o /etc/ceph/ceph.client.nova.keyring

将密钥与配置文件环复制到OpenStack计算节点

[root@192-168-56-15 ~]# cd /etc/ceph/
[root@192-168-56-15 ceph]# scp ceph.client.nova.keyring 192.168.56.12:/etc/ceph/

在OpenStack计算节点创建密钥文件

[root@192-168-56-15 ceph]# ceph auth get-key client.nova |ssh 192.168.56.12 tee /etc/ceph/client.nova.key

在计算节点上设置密钥环文件的权限,以便Nova服务可以访问

[root@192-168-56-12 ~]#
chgrp nova /etc/ceph/ceph.client.nova.keyring
chmod 0640 /etc/ceph/ceph.client.nova.keyring

在计算节点上更新Ceph配置

[root@192-168-56-12 ~]# vim /etc/ceph/ceph.conf
[client.nova]
keyring = /etc/ceph/ceph.client.nova.keyring

在节点节点上运行,让KVM可以访问Ceph

[root@192-168-56-12 ~]# uuidgen |tee /etc/ceph/nova.uuid.txt
7e37262c-a2cd-4a06-82a2-9e4681616c0e

在virsh中创建一个密钥,这样KVM可以访问Cinder卷的Ceph池

[root@192-168-56-12 ~]# vim /etc/ceph/nova.xml
<secret ephemeral='no' private='no'>
  <uuid>7e37262c-a2cd-4a06-82a2-9e4681616c0e</uuid>
  <usage type='ceph'>
    <name>client.nova secret</name>
  </usage>
</secret>


[root@192-168-56-12 ~]# virsh secret-define --file /etc/ceph/nova.xml
Secret 7e37262c-a2cd-4a06-82a2-9e4681616c0e created
[root@192-168-56-12 ~]# virsh secret-set-value --secret 7e37262c-a2cd-4a06-82a2-9e4681616c0e --base64 $(cat /etc/ceph/client.nova.key)
Secret value set

在计算节点上备份Nova配置

[root@192-168-56-12 ~]# cp /etc/nova/nova.conf /etc/nova/nova.conf.orig

在计算节点上更新Nova配置以使用Ceph后端

[root@192-168-56-12 ~]# vim /etc/nova/nova.conf
[DEFAULT]
force_raw_images = True
disk_cachemodes = writeback

[libvirt]
images_type = rbd
images_rbd_pool = vms
images_rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_user = nova
rbd_secret_uuid = 7e37262c-a2cd-4a06-82a2-9e4681616c0e

在计算节点上重新启动Nova服务

[root@192-168-56-12 ~]# systemctl restart openstack-nova-compute

然后在控制节点上创建虚拟机测试

source /root/demo-openrc 
openstack image list
openstack network list
source /root/demo-openrc 
openstack server create --flavor 2C2G --image ceph-centos79200920220510 \
  --nic net-id=667c3eb8-3162-4794-966d-0b9d591df566 --security-group default \
  --key-name mykey ceph-centos79001

openstack console url show  ceph-centos79001

在Ceph虚拟机池中列出镜像。我们现在应该看到镜像存储在Ceph中

[root@192-168-56-15 ~]# rbd -p vms ls
29ec137a-f7eb-47fd-bab6-7667752c9c17_disk

Cephalopod Backup备份

Cinder Backup备份

http://tanglei528.blog.163.com/blog/static/43353399201512695030227/

Cinder磁盘备份原理与实践

http://zhuanlan.51cto.com/art/201704/537194.htm

在ceph集群的某个节点,创建backups池

[root@192_168_56_15 ceph]# ceph osd pool create backups 64
[root@192-168-56-15 ~]# ceph osd pool application enable backups rbd

为backupb创建验证密钥环

[root@192_168_56_15 ceph]# ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups' -o /etc/ceph/ceph.client.cinder-backup.keyring

将密钥环发送到cinder-backup 服务的主机

[root@192_168_56_15 ceph]# scp ceph.client.cinder-backup.keyring 192.168.56.12:/etc/ceph/

更改秘钥的所有权

[root@192-168-56-12]#
chgrp cinder /etc/ceph/ceph.client.cinder-backup.keyring
chmod 0640 /etc/ceph/ceph.client.cinder-backup.keyring

配置/etc/cinder/cinder.conf

[root@192-168-56-12 ceph]# vim /etc/cinder/cinder.conf
[DEFAULT]
backup_driver = cinder.backup.drivers.ceph.CephBackupDriver
backup_ceph_conf = /etc/ceph/ceph.conf
backup_ceph_user = cinder-backup
backup_ceph_chunk_size = 134217728
backup_ceph_pool = backups
backup_ceph_stripe_unit = 0
backup_ceph_stripe_count = 0
restore_discard_excess_bytes = true

在计算节点上更新Ceph配置

[root@192-168-56-12 ~]# vim /etc/ceph/ceph.conf

[client.cinder-backup]
keyring = /etc/ceph/ceph.client.cinder-backup.keyring

启动openstack-cinder-backup服务

[root@192-168-56-12 ceph]# systemctl start openstack-cinder-backup
[root@192-168-56-12 ceph]# systemctl enable openstack-cinder-backup


> /var/log/cinder/backup.log
systemctl restart openstack-cinder-backup
systemctl restart openstack-cinder-volume.service target.service

调整dashboard

[root@192-168-56-11 ~]# vim /etc/openstack-dashboard/local_settings
OPENSTACK_CINDER_FEATURES = {
    'enable_backup': True,
}

重启dashboard服务

systemctl restart httpd.service memcached.service

查看cinderbackup功能是否开启

image-20220519105535793

如果想进行卷备份,备份得先给卷做快照

具体操作

创建卷
cinder create 20 --name  ceph02 --volume-type  ceph
创建卷快照
openstack volume snapshot create --volume ceph02 ceph02-kuaizhao01
查看卷快照
openstack volume snapshot list --volume ceph02
备份卷
openstack volume backup create --snapshot ceph02-kuaizhao01 ceph02
恢复卷
openstack volume backup list
openstack volume list
openstack volume backup restore <backup> <volume>
openstack volume backup restore cb0eb099-ffb3-4939-9487-014e0e3990a1 f1e3187f-f633-4dc9-a78d-0372e4044de2
删除卷备份
openstack volume backup list
openstack volume backup delete cb0eb099-ffb3-4939-9487-014e0e3990a1



创建卷
cinder create --display-name volume1 1
备份卷
cinder backup-create --container volumes_backup --display-name backuptoswift volume1
恢复卷
cinder backup-restore --volume-id cb0fe233-f9b6-4303-8a61-c31c863ef7ce volume1
删除卷
cinder backup-delete 1b9237a4-b384-4c8e-ad05-2e2dfd0c698c

导出ceph备份卷数据

rbd -p backups ls
rbd -p volumes ls

rbd export backups/volume-7bc3ad76-fe98-4a5b-bb35-49bee26226ca.backup.744b4d68-669e-41da-af7b-a11f80340e49  volumes-744b4d68-669e-41da-af7b-a11f80340e49.img


yum -y install qemu-img
qemu-img info volumes-744b4d68-669e-41da-af7b-a11f80340e49.img
qemu-img convert -f raw -O qcow2 volumes-744b4d68-669e-41da-af7b-a11f80340e49.img volumes-744b4d68-669e-41da-af7b-a11f80340e49.qcow2


yum install libguestfs libguestfs-tools -y

systemctl start libvirtd
guestmount -a /tmp/volumes-744b4d68-669e-41da-af7b-a11f80340e49.qcow2 -m /dev/vdb /mnt


[root@linux-bkce-node15 ~]# qemu-img info /tmp/volumes-744b4d68-669e-41da-af7b-a11f80340e49.qcow2 
image: /tmp/volumes-744b4d68-669e-41da-af7b-a11f80340e49.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

如何挂载qcow2镜像文件
https://www.cnbugs.com/post-3640.html

清理异常卷存储

source /root/admin-openrc 
cinder reset-state 701c907d-2895-4804-b4a9-486be54bc05a --state available
source /root/demo-openrc 
cinder list

配置虚拟机热迁移

配置免密

yum -y install sshpass
cat >/root/.ssh/config<<EOF
Host *
    Port 22
    User root
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/nul
EOF
cd /root/
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 
sshpass -pP@sswd ssh-copy-id compute1
sshpass -pP@sswd ssh-copy-id compute3
sshpass -pP@sswd ssh-copy-id compute4

ssh compute1 "hostname -I"
ssh compute3 "hostname -I"
ssh compute4 "hostname -I"

sshpass -pP@sswd ssh-copy-id controller

在 Nova 计算节点(compute01、compute02)上,修改配置文件/etc/nova/nova.conf

vim /etc/nova/nova.conf
[DEFAULT]
# 支持热迁移
live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED"
compute_driver = libvirt.LibvirtDriver

[vnc]
server_listen = 192.168.1.219
server_proxyclient_address = 192.168.1.219

在 Nova 计算节点(controller/computer)上,重启 nova-compute 服务。
计算节点的相关服务
systemctl restart  openstack-nova-compute.service

控制节点的相关服务
systemctl start \
    openstack-nova-api.service \
    openstack-nova-scheduler.service \
    openstack-nova-conductor.service \
    openstack-nova-novncproxy.service

systemctl restart openstack-nova-conductor.service

一定要检查控制节点nova 的日志是否报错
/var/log/nova

source /root/demo-openrc
openstack image list
openstack network list

openstack server create --flavor m1.nano --image ceph-cirros \
  --nic net-id=667c3eb8-3162-4794-966d-0b9d591df566 --security-group default \
  --key-name mykey selfservice-instance02


nova live-migration  [实例id]  [计算节点] 


配置主机名称解析,很重要
[root@compute1 ~]# cat /etc/hosts

192.168.1.216 controller
192.168.1.217 compute1
192.168.1.223 compute2
192.168.1.247 compute3


cp /etc/libvirt/libvirtd.conf /etc/libvirt/libvirtd.conf_bak
编辑 /etc/libvirt/libvirtd.conf,
去掉 listen_tls = 0、listen_tcp = 1、tcp_port = "16509" 三行前面的注释
修改 auth_tcp = "none"

编辑 /etc/sysconfig/libvirtd,去掉 LIBVIRTD_ARGS="--listen" 前面的注释

执行服务重启命令:
systemctl daemon-reload
systemctl restart libvirtd
systemctl status libvirtd


ps -ef|grep libvirtd
ss -ltnp|grep 16509
virsh -c qemu+tcp://192.168.1.219/system
virsh -c qemu+tcp://192.168.1.220/system
virsh -c qemu+tcp://192.168.1.224/system


virsh -c qemu+tcp://compute1/system
virsh -c qemu+tcp://compute3/system
virsh -c qemu+tcp://compute4/system


热迁移单个虚拟机
source /root/admin-openrc
openstack server list --long --all
nova live-migration eb77e2dc-1516-424a-81fe-e5a1c78cc6e2 compute1
openstack server list --long --all

热迁移批量虚拟机
source /root/admin-openrc
openstack server list --long --all
nova host-evacuate-live --target-host compute3 compute1
openstack server list --long --all



热迁移报错
2022-05-20 10:46:55.999 125836 INFO nova.virt.libvirt.driver 

调整虚拟机实例类型

遇到的报错

[root@node01 nova]# tail nova-compute.log
2020-08-07 15:18:25.128 61415 ERROR oslo_messaging.rpc.server self.gen.throw(type, value, traceback)
2020-08-07 15:18:25.128 61415 ERROR oslo_messaging.rpc.server File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 8987, in _error_out_instance_on_exception
2020-08-07 15:18:25.128 61415 ERROR oslo_messaging.rpc.server raise error.inner_exception
2020-08-07 15:18:25.128 61415 ERROR oslo_messaging.rpc.server ResizeError: Resize error: not able to execute ssh command: Unexpected error while running command.
2020-08-07 15:18:25.128 61415 ERROR oslo_messaging.rpc.server Command: ssh -o BatchMode=yes 10.199.103.16 mkdir -p /var/lib/nova/instances/f3cd597a-3a01-4d2f-927d-8be35a955413
2020-08-07 15:18:25.128 61415 ERROR oslo_messaging.rpc.server Exit code: 255
2020-08-07 15:18:25.128 61415 ERROR oslo_messaging.rpc.server Stdout: u''
2020-08-07 15:18:25.128 61415 ERROR oslo_messaging.rpc.server Stderr: u'Host key verification failed.\r\n'
2020-08-07 15:18:25.128 61415 ERROR oslo_messaging.rpc.server
2020-08-07 15:18:36.624 61415 INFO nova.compute.manager [req-efc389fd-77f9-487f-a877-b90c82474787 d608482bcb1b4522949e8e3d429d0b00 4abcf64d621e4cf89aa267887647bc8c - default default] [instance: f3cd597a-3a01-4d2f-927d-8be35a955413] Get console output

解决方法

调整大小,需要openstack的nova节点和ssh通信,在所有控制节点和计算节点配置免密钥通信

yum -y install sshpass
usermod  -s /bin/bash nova
echo "nova"|passwd --stdin nova
su - nova


cat >~/.ssh/config<<EOF
Host *
    Port 22
    User root
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/nul
EOF
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 
sshpass -pP@sswd ssh-copy-id root@compute1
sshpass -pP@sswd ssh-copy-id root@compute3
sshpass -pP@sswd ssh-copy-id root@compute4

ssh root@compute1 "whoami"
ssh root@compute3 "whoami"
ssh root@compute4 "whoami"



openstack 调整实例大小报错 ERROR oslo_messaging.rpc.server ResizeError: Resize error: not able to execute ssh command: Unexpected error while running
http://www.manongjc.com/detail/18-tsbwulhetqylldh.html