Hi all@list,

my background: I'm doing Xen since 10++ years, many years with DRBD for
high availability, since some time I'm using preferable GlusterFS with
FUSE as replicated storage, where I place the image-files for the vms.

In my current project we started (successfully) with Xen/GlusterFS too,
but because the provider, where we placed the servers, uses widely CEPH.
So we decided to switch, because of getting better support for this.

Unfortunately I'm new to CEPH, but with help of a technician, we have
running a 3 node CEPH-cluster now, that seems to work fine.

Hardware:
- Xeons, 24 Cores, 256 GB RAM,
  2x 240 GB system-SSDs RAID1, 4x 1,92 TB data-SSDs (no RAID)

Software we are using:
- CentOS 7.5.1804
- Kernel: 4.9.86-30.el7             @centos-virt-xen-48
- Xen: 4.8.3-5.el7                  @centos-virt-xen-48
- libvirt-xen: 4.1.0-2.xen48.el7    @centos-virt-xen-48
- Ceph: 2:12.2.5-0.el7              @Ceph


What is working:
I've converted a vm to a RBD-device, mapped it, mounted it and can start
this as pvm on the Xen hypervisor via xl create:

# qemu-img convert -O rbd img/testvm.img rbd:devel-pool/testvm3.rbd
# rbd ls -l devel-pool
-> NAME                          SIZE PARENT FMT PROT LOCK
   ...
   testvm3.rbd                 16384M          2
# rbd info devel-pool/testvm3.rbd
-> rbd image 'testvm3.rbd':
       size 16384 MB in 4096 objects
       order 22 (4096 kB objects)
       block_name_prefix: rbd_data.fac72ae8944a
       format: 2
       features: layering, exclusive-lock, object-map, fast-diff,
deep-flatten
       flags:
       create_timestamp: Sun May 20 14:13:42 2018
# qemu-img info rbd:devel-pool/testvm3.rbd
-> image: rbd:devel-pool/testvm3.rbd
   file format: raw
   virtual size: 16G (17179869184 bytes)
   disk size: unavailable

# rbd feature disable devel-pool/testvm2.rbd deep-flatten, fast-diff,
object-map (otherwise mapping does not work)
# rbd info devel-pool/testvm3.rbd
-> rbd image 'testvm3.rbd':
       size 16384 MB in 4096 objects
       order 22 (4096 kB objects)
       block_name_prefix: rbd_data.acda2ae8944a
       format: 2
       features: layering, exclusive-lock
       ...
# rbd map devel-pool/testvm3.rbd
-> /dev/rbd0
# rbd showmapped
-> id pool       image       snap device
   0  devel-pool testvm3.rbd -    /dev/rbd0
# fdisk -l /dev/rbd0
-> Disk /dev/rbd0: 17.2 GB, 17179869184 bytes, 33554432 sectors
   Units = sectors of 1 * 512 = 512 bytes
   Sector size (logical/physical): 512 bytes / 512 bytes
   ...
        Device Boot      Start         End      Blocks   Id  System
   /dev/rbd0p1   *        2048     2099199     1048576   83  Linux
   /dev/rbd0p2         2099200    29362175    13631488   83  Linux
   /dev/rbd0p3        29362176    33554431     2096128   82  Linux swap
   ...
# mount /dev/rbd0p2 /mnt
# ll /mnt/
-> ...
   lrwxrwxrwx.  1 root root    7 Jan  2 23:42 bin -> usr/bin
   drwxr-xr-x.  2 root root    6 Jan  2 23:42 boot
   drwxr-xr-x.  2 root root    6 Jan  2 23:42 dev
   drwxr-xr-x. 81 root root 8192 May  7 02:08 etc
   drwxr-xr-x.  8 root root   98 Jan 29 02:19 home
   ...
   drwxr-xr-x. 19 root root  267 Jan  3 13:22 var
# umount /dev/rbd0p2

# cat testvm3.rbd0
-> name = "testvm3"
   ...
   disk = [ "phy:/dev/rbd0,xvda,w" ]
   ...
# xl create -c testvm3.rbd0
-> Parsing config from vpngw1.rbd0
   Using <class 'grub.GrubConf.Grub2ConfigFile'> to parse /grub2/grub.cfg
   ...
   Welcome to CentOS Linux 7 (Core)!
   ...
   CentOS Linux 7 (Core)
Kernel 3.10.0-693.11.1.el7.centos.plus.x86_64 on an x86_64

   testvm3 login:
   ...


But this is not really, how it should work, because there is no static
assignment from rbd to the vms. As far as I understood, there is still
no Ceph-support in Xen, since it was announced in 2013, so the way to go
is with libvirt?


I was following this guide, to setup Ceph with libvirt:
<http://docs.ceph.com/docs/master/rbd/libvirt/>:

# ceph auth get-or-create client.libvirt mon 'profile rbd' osd 'profile
rbd pool=devel-pool'
-> [client.libvirt]
       key = AQBThwFbGFRYFxxxxxxxxxxxxxxxxxxxxxxxxx==
# ceph auth ls
-> ...
   client.libvirt
       key: AQBThwFbGFRYFxxxxxxxxxxxxxxxxxxxxxxxxx==
       caps: [mon] profile rbd
       caps: [osd] profile rbd pool=devel-pool
       ...
# vi secret.xml
->
<secret ephemeral='no' private='no'>
        <usage type='ceph'>
                <name>client.libvirt secret</name>
        </usage>
</secret>

# virsh secret-define --file secret.xml
-> Secret 07f3a0fe-0000-1111-2222-333333333333 created
# ceph auth get-key client.libvirt > client.libvirt.key
# cat client.libvirt.key
-> AQBThwFbGFRYFxxxxxxxxxxxxxxxxxxxxxxxxx==
# virsh secret-set-value --secret 07f3a0fe-0000-1111-2222-333333333333
--base64 $(cat client.libvirt.key)
-> Secret value set

# vi xml/testvm3.xml
->
<domain type='xen'>
  <name>testvm3</name>
  ...
  <devices>
    <disk type='network' device='disk'>
      <source protocol='rbd' name='devel-pool/testvm3.rbd'>
        <host name="10.20.30.1" port="6789"/>
        <host name="10.20.30.2" port="6789"/>
        <host name="10.20.30.3" port="6789"/>
      </source>
      <auth username='libvirt'>
        <secret type='ceph' uuid='07f3a0fe-0000-1111-2222-333333333333'/>
      </auth>
      <target dev='xvda' bus='xen'/>
    </disk>
    ...

# virsh define xml/testvm3.xml
-> Domain testvm3 defined from xml/testvm3.xml
# virsh start --console testvm3
error: Failed to start domain testvm3
error: internal error: libxenlight failed to create new domain 'testvm3'


So "somthing" goes wrong:

# cat /var/log/libvirt/libxl/libxl-driver.log
-> ...
2018-05-20 15:28:15.270+0000: libxl:
libxl_bootloader.c:634:bootloader_finished: bootloader failed - consult
logfile /var/log/xen/bootloader.7.log
2018-05-20 15:28:15.270+0000: libxl:
libxl_exec.c:118:libxl_report_child_exitstatus: bootloader [26640]
exited with error status 1
2018-05-20 15:28:15.271+0000: libxl:
libxl_create.c:1259:domcreate_rebuild_done: cannot (re-)build domain: -3

# cat /var/log/xen/bootloader.7.log
->
Traceback (most recent call last):
  File "/usr/lib64/xen/bin/pygrub", line 896, in <module>
    part_offs = get_partition_offsets(file)
  File "/usr/lib64/xen/bin/pygrub", line 113, in get_partition_offsets
    image_type = identify_disk_image(file)
  File "/usr/lib64/xen/bin/pygrub", line 56, in identify_disk_image
    fd = os.open(file, os.O_RDONLY)
OSError: [Errno 2] No such file or directory:
'rbd:devel-pool/testvm3.rbd:id=libvirt:key=AQBThwFbGFRYFxxxxxxxxxxxxxxxxxxxxxxxxx==:auth_supported=cephx\\;none:mon_host=10.20.30.1\\:6789\\;10.20.30.2\\:6789\\;10.20.30.3\\:6789'


So, as far as I "read" the logs, Xen does not find the RBD-device, but I
have no clue, how I can solve this :-(


Thanks a lot for your hints,
-- 

kind regards,

thg
_______________________________________________
ceph-users mailing list
ceph-users@lists.ceph.com
http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com

Reply via email to