← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1781878] Re: VM fails to boot after evacuation when it uses ceph disk

 

Hi Cong, thank you for confirming the fix in your case.

I'm going to go ahead and close this bug as Invalid for nova since it's
not a nova issue, but a ceph configuration issue. If there are any
changes or fixes needed in deployment tools to do the ceph
configuration, please add those projects to this bug.

** Changed in: nova
       Status: Incomplete => Invalid

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1781878

Title:
  VM fails to boot after evacuation when it uses ceph disk

Status in OpenStack Compute (nova):
  Invalid

Bug description:
  Description
  ===========
  If we use Ceph RBD as storage backend and Ceph Disks (image) have exclusive-lock feature, when a compute node goes down, the evacuation process works fine and nova detects the VM has a disk on a shared storage, so it rebuild the VM on another node. But after the evacuation, although nova marks the instance as active, the instance fails to boot and encounter a kernel panic caused by inability of the kernel to write on disk.

  It is possible to disable exclusive-lock feature on Ceph and the
  evacuation process works fine, but it needed to be enabled in some
  use-cases.

  Also there is a workaround for this problem, we were able to evacuate
  an instance successfully by removing the lock of the disk to the old
  instance using rbd command line, but I think it should be done in the
  code of rbd driver in Nova and Cinder.

  The problem seams to be with the exclusive-lock feature. when a disk
  has exclusive-lock enabled, as soon as a client (the VM) connects and
  writes on disk, Ceph locks the disk for the client (lock-on-write)
  (also if we enable lock-on-read in Ceph conf, it would lock the disk
  on the first read). In the evacuation process, since there is no
  defined process to remove the exclusive-lock from the old VM, when the
  new VM tries to write on the disk, it fails to write since it can't
  get the lock.

  I found similar problem reported for kubernetes when a node goes down and the system tries to attach its volume to new Pod.
  https://github.com/openshift/origin/issues/7983#issuecomment-243736437
  There, some people proposed before bringing up the new instance, first blacklist the old instance, then unlock the disk and lock it for the new one.

  Steps to reproduce
  ==================
  * Create an instance (with ceph storage backend) and wait for boot
  * Poweroff the Host of the instance
  * Evacuate the instance
  * Check the Console in the dashboard

  Expected result
  ===============
  The instance should boot without any problem.

  Actual result
  =============
  The instance encounter kernel panic and fails to boot.

  Environment
  ===========
  1. Openstack Queens, Nova 17.0.2
  2. hypervisor: Libvirt (v4.0.0) + KVM
  2. Storage: 12.2.4

  Logs & Configs
  ==============
  Console log of the instance after it evacuation:

  [    2.352586] blk_update_request: I/O error, dev vda, sector 18436
  [    2.357199] Buffer I/O error on dev vda1, logical block 2, lost async page write
  [    2.363736] blk_update_request: I/O error, dev vda, sector 18702
  [    2.431927] Buffer I/O error on dev vda1, logical block 135, lost async page write
  [    2.442673] blk_update_request: I/O error, dev vda, sector 18708
  [    2.449862] Buffer I/O error on dev vda1, logical block 138, lost async page write
  [    2.460061] blk_update_request: I/O error, dev vda, sector 18718
  [    2.468022] Buffer I/O error on dev vda1, logical block 143, lost async page write
  [    2.477360] blk_update_request: I/O error, dev vda, sector 18722
  [    2.484106] Buffer I/O error on dev vda1, logical block 145, lost async page write
  [    2.493227] blk_update_request: I/O error, dev vda, sector 18744
  [    2.499642] Buffer I/O error on dev vda1, logical block 156, lost async page write
  [    2.505792] blk_update_request: I/O error, dev vda, sector 35082
  [    2.510281] Buffer I/O error on dev vda1, logical block 8325, lost async page write
  [    2.516296] Buffer I/O error on dev vda1, logical block 8326, lost async page write
  [    2.522749] blk_update_request: I/O error, dev vda, sector 35096
  [    2.527483] Buffer I/O error on dev vda1, logical block 8332, lost async page write
  [    2.533616] Buffer I/O error on dev vda1, logical block 8333, lost async page write
  [    2.540085] blk_update_request: I/O error, dev vda, sector 35104
  [    2.545149] blk_update_request: I/O error, dev vda, sector 36236
  [    2.549948] JBD2: recovery failed
  [    2.552989] EXT4-fs (vda1): error loading journal
  [    2.557228] VFS: Dirty inode writeback failed for block device vda1 (err=-5).
  [    2.563139] EXT4-fs (vda1): couldn't mount as ext2 due to feature incompatibilities
  [    2.704190] JBD2: recovery failed
  [    2.708709] EXT4-fs (vda1): error loading journal
  [    2.714963] VFS: Dirty inode writeback failed for block device vda1 (err=-5).
  mount: mounting /dev/vda1 on /newroot failed: Invalid argument
  umount: can't umount /dev/vda1: Invalid argument
  mcb [info=LABEL=cirros-rootfs dev=/dev/vda1 target=/newroot unmount=cbfail callback=check_sbin_init ret=1: failed to unmount
  [    2.886773] JBD2: recovery failed
  [    2.892670] EXT4-fs (vda1): error loading journal
  [    2.900580] VFS: Dirty inode writeback failed for block device vda1 (err=-5).
  [    2.911330] EXT4-fs (vda1): couldn't mount as ext2 due to feature incompatibilities
  [    3.044295] JBD2: recovery failed
  [    3.050363] EXT4-fs (vda1): error loading journal
  [    3.058689] VFS: Dirty inode writeback failed for block device vda1 (err=-5).
  mount: mounting /dev/vda1 on /newroot failed: Invalid argument
  info: copying initramfs to /dev/vda1
  mount: can't find /newroot in /proc/mounts
  info: initramfs loading root from /dev/vda1
  BusyBox v1.23.2 (2017-11-20 02:37:12 UTC) multi-call binary.

  Usage: switch_root [-c /dev/console] NEW_ROOT NEW_INIT [ARGS]

  Free initramfs and switch to another root fs:
  chroot to NEW_ROOT, delete all in /, move NEW_ROOT to /,
  execute NEW_INIT. PID must be 1. NEW_ROOT must be a mountpoint.

   -c DEV Reopen stdio to DEV after switch

  [    3.170388] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000100
  [    3.170388]
  [    3.186305] CPU: 0 PID: 1 Comm: switch_root Not tainted 4.4.0-28-generic #47-Ubuntu
  [    3.198826] Hardware name: OpenStack Foundation OpenStack Nova, BIOS 1.10.2-1ubuntu1~cloud0 04/01/2014
  [    3.213538]  0000000000000086 000000004cbc7242 ffff88001f63be10 ffffffff813eb1a3
  [    3.227588]  ffffffff81cb10d8 ffff88001f63bea8 ffff88001f63be98 ffffffff8118bf57
  [    3.241405]  ffff880000000010 ffff88001f63bea8 ffff88001f63be40 000000004cbc7242
  [    3.251820] Call Trace:
  [    3.254191]  [<ffffffff813eb1a3>] dump_stack+0x63/0x90
  [    3.258257]  [<ffffffff8118bf57>] panic+0xd3/0x215
  [    3.261865]  [<ffffffff81184e1e>] ? perf_event_exit_task+0xbe/0x350
  [    3.266173]  [<ffffffff81084541>] do_exit+0xae1/0xaf0
  [    3.269989]  [<ffffffff8106b554>] ? __do_page_fault+0x1b4/0x400
  [    3.274408]  [<ffffffff810845d3>] do_group_exit+0x43/0xb0
  [    3.278557]  [<ffffffff81084654>] SyS_exit_group+0x14/0x20
  [    3.282693]  [<ffffffff818276b2>] entry_SYSCALL_64_fastpath+0x16/0x71
  [    3.290709] Kernel Offset: disabled
  [    3.293770] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000100
  [    3.293770]

To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1781878/+subscriptions


References