日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Openstack虛擬機(jī)防止誤刪除操作的幾種實(shí)現(xiàn)方法

OpenStack虛擬機(jī)防止誤刪除操作的幾種實(shí)現(xiàn)方法

作者:付廣平 2017-06-02 10:42:14

企業(yè)動態(tài)

OpenStack 虛擬機(jī)是Openstack中最重要的角色之一,我們接觸比較多的Nova服務(wù)就是通過虛擬機(jī)方式提供計(jì)算虛擬化服務(wù)。

1.虛擬機(jī)保護(hù)的重要性

虛擬機(jī)是Openstack中最重要的角色之一,我們接觸比較多的Nova服務(wù)就是通過虛擬機(jī)方式提供計(jì)算虛擬化服務(wù)。除此之外,還有很多高層服務(wù)也是完全依賴于Nova服務(wù)提供的虛擬機(jī),比如Sahara大數(shù)據(jù)服務(wù)、Magnum容器編排服務(wù)、Manila文件共享服務(wù)以及Trove數(shù)據(jù)庫服務(wù)等,這些服務(wù)底層都是基于虛擬機(jī)實(shí)現(xiàn)的。虛擬機(jī)的保護(hù)至關(guān)重要,不僅承載著用戶活動的業(yè)務(wù),還保存著用戶的重要數(shù)據(jù)。虛擬機(jī)意外丟失不僅可能導(dǎo)致用戶業(yè)務(wù)中止,還可能導(dǎo)致重要數(shù)據(jù)的丟失,甚至造成重大生產(chǎn)事故,虛擬機(jī)的保護(hù)不容忽視!

Openstack Nova服務(wù)相對來說比較成熟了,虛擬機(jī)通常不會出現(xiàn)突然消失的情況,排除天災(zāi),剩下的就是人禍了,最危險(xiǎn)的莫過于誤刪除操作,危險(xiǎn)等級不亞于以下幾種:

  
 
 
  1. rm -rf /
  2. ceph osd pool delete rbd rbd --yes-i-really-really-mean-it
  3. drop database nova;

不幸的是,Openstack一直沒有一套完善的虛擬機(jī)保護(hù)機(jī)制,默認(rèn)的權(quán)限策略也存在一定的問題:

  • admin是全局的,只要屬于admin組,就能夠操作所有租戶的資源,刪除所有虛擬機(jī)只需一個(gè)命令。
  • 虛擬機(jī)的Lock感覺形同虛設(shè),admin完全無視任何鎖。

當(dāng)然盡管不完善,Openstack針對虛擬機(jī)的保護(hù)措施還是做了一些工作的,本文接下來將逐一介紹。

2.Lock機(jī)制

Openstack很早就開始支持對虛擬機(jī)加鎖操作:

  
 
 
  1. usage: nova lock 
  2. Lock a server. A normal (non-admin) user will not be able to execute actions
  3. on a locked server.

被locked的虛擬機(jī)不允許非管理員執(zhí)行任何操作,包括delete、reboot、resize、rebuild、migrate等等。但是到目前為止也沒有實(shí)現(xiàn)通過API獲取虛擬機(jī)的鎖狀態(tài),換句話說,只有當(dāng)你執(zhí)行以上操作時(shí),才會莫名其妙地告訴你執(zhí)行失敗了,因?yàn)樘摂M機(jī)被加鎖了:

  
 
 
  1. $ nova delete 5a7b14b0-a47c-47be-98bb-92e139d16b00
  2. Instance 5a7b14b0-a47c-47be-98bb-92e139d16b00 is locked (HTTP 409) (Request-ID: req-6366a53b-d696-47cc-8111-1a760b8d0253)
  3. ERROR (CommandError): Unable to delete the specified server(s).

2014年2月就已經(jīng)有人提關(guān)于查看虛擬機(jī)lock狀態(tài)API實(shí)現(xiàn)BP:get-lock-status-of-instance,目前已被標(biāo)記為Slow progress。

需要注意的是,正如前面所言,管理員賬號是無視鎖的,檢查鎖的代碼非常簡單:

  
 
 
  1. def check_instance_lock(function):
  2.     @functools.wraps(function)
  3.     def inner(self, context, instance, *args, **kwargs):
  4.         if instance.locked and not context.is_admin:
  5.             raise exception.InstanceIsLocked(instance_uuid=instance.uuid)
  6.         return function(self, context, instance, *args, **kwargs)
  7.     return inner

我們?yōu)榱藦?qiáng)化鎖的作用,直接把if后面的and not context.is_admin去掉了,這樣即使是管理員在確認(rèn)需要刪除虛擬機(jī)時(shí)也必須先unlock,一定程度上提高了虛擬機(jī)的安全性。

注意: 鎖定的虛擬機(jī)即使執(zhí)行nova force-delete也會失敗。

3.soft-delete

微信聊天時(shí)如果不小心說錯(cuò)話了,兩分鐘內(nèi)可以立馬撤回消息,并不明覺厲地向?qū)Ψ饺右粋€(gè)對方撤回了一條消息。不小心誤刪虛擬機(jī)時(shí),你是否也會在心里想如果可以撤回剛剛的操作該多好!

值得慶幸的是,Openstack原生支持軟刪除操作。開啟了軟刪除功能后,刪除的虛擬機(jī)不會立刻清除,而是會保留一段時(shí)間(比如一天),在虛擬機(jī)保留期內(nèi)你可以隨時(shí)restore恢復(fù)。

開啟辦法是修改Nova配置文件/etc/nova/nova.conf,在DEFAULT配置組下設(shè)置reclaim_instance_interval值,該值表示刪除虛擬機(jī)后保留的時(shí)間,單位為秒。

我們簡單驗(yàn)證下:

我們首先創(chuàng)建了一個(gè)虛擬機(jī),uuid為c6fd7a92-bf51-4000-b9e1-18850090ab47:

  
 
 
  1. $ nova list | grep c6fd7a92-bf51-4000-b9e1-18850090ab47
  2. | c6fd7a92-bf51-4000-b9e1-18850090ab47 | int32bit-test-3 | ACTIVE | - | Running | rally-shared-net=10.168.0.18 |

然后執(zhí)行刪除操作:

  
 
 
  1. nova delete c6fd7a92-bf51-4000-b9e1-18850090ab47

查看虛擬機(jī)狀態(tài),注意--deleted選項(xiàng),否則看不到已經(jīng)刪除的虛擬機(jī):

  
 
 
  1. $ nova list --deleted | grep c6fd7a92-bf51-4000-b9e1-18850090ab47
  2. | c6fd7a92-bf51-4000-b9e1-18850090ab47 | int32bit-test-3| SOFT_DELETED | - |Shutdown| rally-shared-net=10.168.0.18|

可見虛擬機(jī)此時(shí)為SOFT_DELETED狀態(tài),此時(shí)我們可以使用nova restore操作恢復(fù):

  
 
 
  1. nova restore c6fd7a92-bf51-4000-b9e1-18850090ab47

再次使用nova list可發(fā)現(xiàn)虛擬機(jī)已經(jīng)回來了。

軟刪除的代碼實(shí)現(xiàn)也相對簡單,直接上核心代碼(nova/compute/manager.py:

  
 
 
  1. def soft_delete_instance(self, context, instance, reservations):
  2.         # ...
  3.         try:
  4.             self._notify_about_instance_usage(context, instance,
  5.                                               "soft_delete.start")
  6.             try:
  7.                 self.driver.soft_delete(instance)
  8.             except NotImplementedError:
  9.                 self.driver.power_off(instance)
  10.             instance.power_state = self._get_power_state(context, instance)
  11.             instance.vm_state = vm_states.SOFT_DELETED
  12.             instance.task_state = None
  13.             instance.save(expected_task_state=[task_states.SOFT_DELETING])
  14.         except Exception:
  15.             with excutils.save_and_reraise_exception():
  16.                 quotas.rollback()
  17.         quotas.commit()

從代碼發(fā)現(xiàn)會調(diào)用driver的soft_delete方法,但實(shí)際上libvirt driver并未實(shí)現(xiàn)該方法,因此會fallback到except語句,即執(zhí)行簡單關(guān)機(jī)操作,然后更新虛擬機(jī)狀態(tài)到數(shù)據(jù)庫即完成軟刪除操作。

因此,虛擬機(jī)的軟刪除操作原理就是關(guān)機(jī)虛擬機(jī)并標(biāo)記為軟刪除。

需要注意的是: nova force-delete會立即強(qiáng)制刪除虛擬機(jī),不會保留虛擬機(jī),請小心操作。

4.禁止刪除

這個(gè)應(yīng)該算是Nova的隱藏功能了,不閱讀源碼真的不知道,虛擬機(jī)有一個(gè)disable_terminate標(biāo)記,具有該標(biāo)記的虛擬機(jī)無法通過任何API刪除虛擬機(jī),無論你是admin還是force-delete都會刪除失敗,對于非常重要的虛擬機(jī),萬萬不能刪除的虛擬機(jī),可以設(shè)置該標(biāo)記。

不過目前并沒有API設(shè)置該標(biāo)記,社區(qū)提了好幾個(gè)與之相關(guān)的BP:

  • ability-to-set-disable-terminate;
  • support-disable-terminate-for-instance;
  • disable-terminate。

目前只能靠操作數(shù)據(jù)庫查看和設(shè)置該標(biāo)記了。

  
 
 
  1. update instances set disable_terminate=1 where uuid='a80d78c0-9f5f-4f01-8ace-72a5133a4763';

此時(shí)執(zhí)行刪除虛擬機(jī)操作不會有任何反應(yīng)。

實(shí)現(xiàn)方式非常簡單,在nova/compute.api.py,只要設(shè)置了該標(biāo)記,直接return:

  
 
 
  1. def _delete(self, context, instance, delete_type, cb, **instance_attrs):
  2.         if instance.disable_terminate:
  3.             LOG.info(_LI('instance termination disabled'),
  4.                      instance=instance)
  5.             return
  6.         # ...

5. 快照備份

以上都是通過刪除保護(hù)方式來保證虛擬機(jī)的安全性,為了更全面地保護(hù)虛擬機(jī),快照備份也是保護(hù)虛擬機(jī)的有效途徑,可參考的方式如下:

  1. 使用nova image-create創(chuàng)建虛擬機(jī)快照。
  2. 使用nova backup定期快照備份。
  3. 如果使用Ceph做后端存儲,可以考慮使用rbd mirror。
  4. 掛載的volume可以使用cinder backup服務(wù)增量備份。

6.總結(jié)

雖然Openstack提供的虛擬機(jī)保護(hù)措施還不夠完善,但做的工作還是不少的,用戶可以根據(jù)自己的需求選擇適合自己的方案。

【本文是51CTO專欄作者“付廣平”的原創(chuàng)文章,如需轉(zhuǎn)載請通過51CTO獲得聯(lián)系】


新聞名稱:Openstack虛擬機(jī)防止誤刪除操作的幾種實(shí)現(xiàn)方法
網(wǎng)站鏈接:http://www.5511xx.com/article/coegpos.html