疑难杂症——解决 Cinder 僵尸卷问题

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 目录目录问题描述问题解决最后问题描述Cinder 的僵尸卷一般是因为操作不当导致分配的卷无法正常使用且无法正常分离或删除. 问题解决解决僵尸卷问题的思路类似解决 Linux 系统中的僵尸进程, 需要手动的通过修改数据库和执行 CLI 来实现.

目录

问题描述

Cinder 的僵尸卷一般是因为操作不当导致分配的卷无法正常使用且无法正常分离或删除.
这里写图片描述

问题解决

解决僵尸卷问题的思路类似解决 Linux 系统中的僵尸进程, 需要手动的通过修改数据库和执行 CLI 来实现.

  • 使用 CLI 定位僵尸卷的基本信息
    最主要的是要获取其 id, 然后到数据库中查看其详细信息.
stack@fanguiju-dev:~$ openstack volume list 
+--------------------------------------+--------------+--------+------+-----------------------------------------------------------+
| ID                                   | Display Name | Status | Size | Attached to                                               |
+--------------------------------------+--------------+--------+------+-----------------------------------------------------------+
| 0d71a98a-0d2c-4b73-9886-a98005d9f969 | mysql-vol    | in-use |    5 | Attached to e1fd229f-413e-49dd-a741-1bbffa7f249c on /mnt  |
+--------------------------------------+--------------+--------+------+-----------------------------------------------------------+

可以看出这次的问题的原因是因为使用 openstackclient 挂载卷到 Instance 的时候指定了错误设配(/mnt), 应该指定挂载设备为(/dev/vdX). 而且使用 CLI 的 –force 也无法强制删除:

stack@fanguiju-dev:~$ openstack volume delete 0d71a98a-0d2c-4b73-9886-a98005d9f969 --force
Invalid volume: Volume  must not be migrating, attached, belong to a consistency group or have snapshots. (HTTP 400) (Request-ID: req-8ec31dac-591a-4895-942d-3e4998c5407d)
  • 手动的修改 cinder 数据库的表 volumes 的 status 字段为 deleted
    在挂载完卷之后该记录的字段 status 的值为 in-use.
*************************** 2. row ***************************
                 created_at: 2017-01-18 14:59:38
                 updated_at: 2017-01-18 16:12:09
                 deleted_at: NULL
                    deleted: 0
                         id: 0d71a98a-0d2c-4b73-9886-a98005d9f969
                     ec2_id: NULL
                    user_id: b03df4585b7d41cca635ec341217404d
                 project_id: d0f2734c0cd3421eaab8e7d3da5b61d1
                       host: fanguiju-dev@lvmdriver-1#lvmdriver-1
                       size: 5
          availability_zone: nova
                     status: in-use
              attach_status: attached
               scheduled_at: 2017-01-18 14:59:39
                launched_at: 2017-01-18 14:59:40
              terminated_at: NULL
               display_name: mysql-vol
        display_description: backup volume of mysql server.
          provider_location: 200.21.18.30:3260,2 iqn.2010-10.org.openstack:volume-0d71a98a-0d2c-4b73-9886-a98005d9f969 1
              provider_auth: CHAP xvATFN4UYj3ueGXZBW5P aTsMksaXX6KSsw8n
                snapshot_id: NULL
             volume_type_id: 2fac34b8-f25c-490c-b0bb-6989d4778432
               source_volid: NULL
                   bootable: 0
          provider_geometry: NULL
                   _name_id: NULL
          encryption_key_id: NULL
           migration_status: NULL
         replication_status: disabled
replication_extended_status: NULL
    replication_driver_data: NULL
        consistencygroup_id: NULL
                provider_id: NULL
                multiattach: 0
            previous_status: NULL

手动修改其 status 字段值:

mysql> update volumes set status='deleted' where id='0d71a98a-0d2c-4b73-9886-a98005d9f969';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
  • 执行指令删除卷
    同样的, 在删除之前先要查看现在逻辑卷的使用情况.
stack@fanguiju-dev:~$ sudo vgs
  VG                         #PV #LV #SN Attr   VSize  VFree 
  cinder-volumes-default       1   0   0 wz--n- 50.00g 50.00g
  cinder-volumes-lvmdriver-1   1   1   0 wz--n- 50.00g 45.00g
  ubuntu-dev-fanguiju-vg   1   2   0 wz--n- 99.76g 20.00m


stack@fanguiju-dev:~$ sudo lvs
  LV                                          VG                         Attr      LSize  Pool Origin Data%  Move Log Copy%  Convert
  volume-0d71a98a-0d2c-4b73-9886-a98005d9f969 cinder-volumes-lvmdriver-1 -wi-a----  5.00g                                           
  root                                        ubuntu-dev-fanguiju-vg -wi-ao---      95.74g                                           
  swap_1                                      ubuntu-dev-fanguiju-vg -wi-ao---      4.00g      

通过 volume 的 id(0d71a98a-0d2c-4b73-9886-a98005d9f969) 我们不能判断出现问题的 lv 就是 /dev/cinder-volumes-lvmdriver-1/volume-0d71a98a-0d2c-4b73-9886-a98005d9f969.
但是在删除该 lv 之前, 我们需要保证该 lv 没有被任何的进程占用.

stack@fanguiju-dev:~$ lsof /dev/cinder-volumes-lvmdriver-1/volume-0d71a98a-0d2c-4b73-9886-a98005d9f969 

使用 lsof 指令可以获取使用该设备的进程列表, 如果被占用的话, 需要使用 kill 指令来将这些进程杀掉. 之后再将该 lv remove 掉.

stack@fanguiju-dev:~$ sudo lvremove /dev/cinder-volumes-lvmdriver-1/volume-0d71a98a-0d2c-4b73-9886-a98005d9f969 
Do you really want to remove and DISCARD active logical volume volume-0d71a98a-0d2c-4b73-9886-a98005d9f969? [y/n]: y
  Logical volume "volume-0d71a98a-0d2c-4b73-9886-a98005d9f969" successfully removed

这里写图片描述

因为该僵尸卷在数据库中记录的状态已经修改为了 deleted, 所以 dashboard 不会读取该记录, 而且又使用了 lvremove 来将该逻辑卷删除了, 所以也算彻底的解决了这个问题.

最后

最后记录一下, 如果使用 cinderclient 包提供的 cinderclient.v2.volumes:VolumeManager.attach 来挂载卷的话, 其参数 mountpoint 的含义是指定该卷挂载到 Instance 的那一个设备文件上, 而不是指定挂载目录路径.

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 消息中间件 算法
深入解析OpenStack Cinder:块存储服务详解
本文介绍了OpenStack及其块存储服务Cinder。OpenStack是一个开源云计算管理平台,提供基础设施即服务(IaaS),核心服务包括计算、网络、存储等。Cinder主要用于为虚拟机提供持久性块存储,具备多种功能,如卷操作、备份、快照及与实例的交互等。此外,还详细介绍了Cinder的工作流程、命令行操作及不同存储插件的使用。
1698 8
|
块存储
【Openstack】排错:Cinder创建云硬盘状态错误解决
Cinder创建云硬盘状态错误,配置服务器时钟同步
5087 0
【Openstack】排错:Cinder创建云硬盘状态错误解决
|
11月前
|
SQL 运维 监控
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
|
Java 开发者
如何通过易语言多线程提升程序响应速度?
如何通过易语言多线程提升程序响应速度?
|
存储 网络性能优化 文件存储
OpenStack的块存储卷类型和QoS
【8月更文挑战第25天】
382 4
|
存储 缓存 监控
Memcached介绍和详解
Memcached介绍和详解
655 3
|
负载均衡 关系型数据库 Linux
实战案例——Ansible部署高可用OpenStack平台
实战案例——Ansible部署高可用OpenStack平台
975 0
|
Java Spring
【新手指南】严重: Exception sending context initialized event to listener instance of class
【新手指南】严重: Exception sending context initialized event to listener instance of class
883 0
【新手指南】严重: Exception sending context initialized event to listener instance of class
|
存储 缓存 负载均衡
SpringBoot 分布式session共享方案(并且可实现session在多个项目中共享)
单机环境下我们Session是存储在应用服务的内存中,但是在分布式环境 下,这种存储在应用服务器内存的方案显然不能实现session共享。本次我们将介绍spring-session实现分布式环境下Session共享方案,Session信息存储在redis中。
1359 0
SpringBoot 分布式session共享方案(并且可实现session在多个项目中共享)
|
机器学习/深度学习 算法 自动驾驶
实战教程 | 车道线检测项目实战,霍夫变换 & 新方法 Spatial CNN
在某些情况下,直接调用已经搭好的模型可能是非常方便且有效的,比如Caffe、TensorFlow工具箱,但这些工具箱需要的硬件资源比较多,不利于初学者实践和理解。因此,为了更好的理解并掌握相关知识,最好是能够自己编程实践下。本文将展示计算机时如何识别车道线的。
实战教程 | 车道线检测项目实战,霍夫变换 & 新方法 Spatial CNN