起因是發現雲硬盤顯示刪光了,但還是創建不了新的雲硬盤,在api節點上用cinder list可以看到已經沒有硬盤了,但是創建硬盤時,還是會提示配額滿了,這是因為數據庫里的記錄沒有更新,對數據庫的操作記錄如下,以便以后參考:
登錄50數據庫節點(需要登錄主節點,可以在mysql數據庫中輸入show master status;或者show slave status;來查看,比如show master status;這個命令,如果返回了一個表,那么證明就是主了。目前L版中50、51、52都是主。)
手動修改數據庫,標識其為已刪除狀態(通常不直接刪除記錄),需要修改cinder數據庫的volumes表,修改deleted字段為1(整型的1,不是字符串),status字段修改為"deleted",deleted_at可修改為"now()",也可以不修改。
update volumes set deleted=
1
where id =
"xxx"
;
通過show databases;列出所有數據庫;
通過use cinder;進入cinder的數據庫;
通過show tables;列出所有表格;
通過select * from quota_usages;從該quota_usages表格中列出所有內容;
update quota_usages set in_use=0 where project_id="xxx" and resource="xxx";
注意更新信息的時候先更新子項的數據再更新父項的數據,如:
先volumes_ssd\volumes_sata,再volumes
如需更多細節了解,可參見(以下內容引用他人文章內容):
很多原因可能導致volume 進入error或者error_deleting狀態,此時無法再執行delete操作。這種情況大體分為兩類:
1.當執行cinder delete時,cinder連接不到ceph mon,導致刪除失敗。此時我們使用rbd命令能夠找到cinder volume對應的image:
rbd ls -p openstack-
00
| grep volume_id
|
如果存在記錄,則說明可能屬於此種情況,此時處理流程比較簡單,我們只要reset-state然后再執行即可:
cinder reset-state volume_id
cinder delete volume_id
|
如果還是刪除失敗,檢查下是不是cinder-volume跑了多個實例,比如41節點跑了,42節點也有,則會刪除失敗,這個問題我們也遇到過,只要把多余cinder-volume實例中止即可,然后重復以上步驟。
2.當執行cinder delete時,cinder連接不到數據庫,此時由於沒有事務同步,導致ceph已經刪除對應的image,但沒有同步狀態到數據庫中,此時volume可能處於available或者deleting狀態,如果再次執行delete操作,顯然cinder已經找不到對應的image,所以會拋出錯誤異常,此時cinder volume會把它設為error_deleting狀態,並且無法通過reset-state刪除。通過以下腳本,驗證是否屬於該類故障:
rbd ls -p openstack-
00
| grep volume_id
|
如果匹配不到該volume id,則判定屬於該類故障。
此類故障無法通過cinder 命令行工具處理,只能手動修改數據庫,標識其為已刪除狀態(通常不直接刪除記錄),需要修改cinder數據庫的volumes表,修改deleted字段為1(整型的1,不是字符串),status字段修改為"deleted",deleted_at可修改為"now()",也可以不修改。
update volumes set deleted=
1
where id =
"xxx"
;
|