Глава 2. Работа с блочными устройствами Ceph
В данной главе мы охватим:
-
Работу с блочными устройствами Ceph
-
Настройку клиента Ceph
-
Создание блочного устройства Ceph
-
Отображение блочного устройства Ceph
-
Изменение размеров RBD Ceph
-
Работу со снимками RBD
-
Работу с клонами RBD
-
Быстрый осмотр OpenStack
-
Ceph - наилучшее соответствие OpenStack
-
Настройку OpenStack
-
Настройку OpenStack в качестве клиента Ceph
-
Настройку Glance под поддержку Ceph
-
Настройку Cinder под поддержку Ceph
-
Настройку Nova для подключения Ceph RBD
-
Настройку Nova для загрузки экземпляров из Ceph RBD
Содержание
- 2. Работа с блочными устройствами Ceph
- Введение
- Работа с блочными устройствами Ceph
- Настройка клиента Ceph
- Создание блочного устройства Ceph
- Отображение блочного устройства Ceph
- Изменение размеров RBD Ceph
- Работа со снимками RBD
- Работа с клонами RBD
- Быстрый осмотр OpenStack
- Ceph - наилучшее соответствие OpenStack
- Настройка OpenStack
- Настройка OpenStack в качестве клиента Ceph
- Настройка Glance под поддержку Ceph
- Настройка Cinder под поддержку Ceph
- Настройка Nova для подключения Ceph RBD
- Настройка Nova для загрузки экземпляров из Ceph RBD
Когда вы установили и настроили свой кластер хранения Ceph, следующей задачей является выполнение подготовки к хранению. Подготовка к хранению является процессом назначения пространства хранения или ёмкости физическим или виртуальным серверам в одной из форм: в виде хранения блоков, файлов или объектов. Обычная вычислительная система или сервер приходят с ограниченной ёмкостью локального хранения, которой может быть недостаточно для потребностей хранения ваших данных. Решения хранения подобные Ceph предоставляют виртуально неограниченную ёмкость хранения для этих серверов, предоставляя им возможность хранить все ваши данные и пребывать в уверенности что вы не выйдете за допустимые пределы. Применение выделенных систем хранения вместо локальных хранилищ даёт вам столь необходимую гибкость в терминах масштабируемости, надёжности и производительности.
Ceph может подготовить к применению ёмкость хранения единообразно, причём включая блочные хранилища, файловые системы и системы хранения объектов. Следующая схема отображает поддерживаемые Ceph форматы и зависимости для вариантов применения, причём вы можете выбрать один или более вариантов:
Мы обсудим в этой книге все варианты, однако в данной главе мы сосредоточимся на блочных хранилищах Ceph.
Блочные устройства Ceph (Ceph Block Device), ранее называвшиеся блочными
устройствами RADOS, предоставляют клиентам надёжные распределённые и высокопроизводительные блочные диски хранения. Блочные устройства
хранения RADOS применяют библиотеку librbd
и хранят блоки данных в последовательном виде чередуя
их по множеству OSD в кластере Ceph. RBD поддерживаются уровнем RADOS в Ceph, таким образом каждое блочное устройство распределяется
по множеству узлов Ceph, поставляя высокую производительность и исключительную надёжность. RBD имеет встроенную поддержку для ядра
Linux, что означает, что драйверы RBD хорошо интегрированы с ядром Linux на протяжении последних нескольких лет. Помимо надёжности и
производительности RBD также предоставляет функциональность корпоративного уровня подобную полным и инкрементальным снимкам,
динамичному выделению (thin provisioning), клонированию копированием при записи (copy on write), динамическое изменение размеров и
тому подобное. RBD также поддерживает кэширование в памяти, которое драматично улучшает производительность.
Лидеры в индустрии гипервизоров с открытым исходным кодом, подобные KVM и Zen {Прим. пер.: а также, например, набирающий популярность Proxmox}, предоставляют полную поддержку RBD и повышают мощь функциональности своих гостевых виртуальных машин. Прочие проприетарные гипервизоры, например, VMWare и Microsoft HyperV будут поддерживать их в скором времени. Для поддержки этих гипервизоров в сообществе была проведена колоссальная работа. Блочные устройства Ceph предоставляют полную поддержку облачным платформам, таким как OpenStack, Cloud Stack и ряду других {Прим. пер.: например, Proxmox}. Для этих облачных платформ были доказаны успешность и функциональная полнота. В OpenStack вы можете применять блочные устройства Ceph с компонентами cinder (для блоков) и glance (для образов). Работая таким образом вы можете раскручивать тысячи Виртуальных Машин (ВМ, VM) за очень короткие промежутки времени, применяя преимущества функциональности копирования при записи блочных устройств Ceph.
Вся эта функциональность делает RBD идеальным кандидатом для облачных платформ OpenStack, CloudStack {Прим. пер.: Proxmox и прочих}. Теперь мы изучим как создавать блочные устройства Ceph и применять их.
Все обычные хосты Linux (RHEL или основанные на Debian) могут выступать в роли клиентов Ceph. Клиент взаимодействует с кластером хранения Ceph через сетевую среду для сохранения или выборки данных пользователя. Поддержка RBD Ceph была добавлена в магистральное ядро Linux, начиная с 2.6.34 и последующих версий.
Как мы это уже делали ранее, мы установим машину клиента Ceph с применением Vagrant и VirtualBox. Мы воспользуемся тем же самым
Vagrantfile
, который мы клонировали в нашей прошлой главе. Затем Vagrant запустит виртуальную
машину Ubuntu 14.04, которую мы настроим в качестве клиента Ceph:
-
Из каталога, в который мы клонировали
ceph-cookbook git repository
, запустим клиентскую машину с помощью Vagrant:$ vagrant status client-node1 $ vagrant up client-node1 HOST:ceph-cookbook ksinghS vagrant status client-node1 Current machine states: client-node1 not created (virtualbox) The environment has not yet been created. Run `vagrant up` to create the environment. If a machine is not created, only the default provider will be shown. so if a provider is not listed, then the machine is not created for that environment. HOST:ceph-cookbook ksinghS vagrant up client-node1 Bringing machine 'client-node1' up with 'virtualhox' provider... ==> client-node1: Importing base box 'ubuntu/trusty64'... ==> client-node1: Matching MAC address for NAT networking... ==> client-node1: Checking if box 'ubuntu/trusty64' is up to date... ==> client-node1: setting the name of the vm: client-node1
-
Зарегистрируйтесь на
ceph-node1
:$ vagrant ssh client-node1
-
Проверьте редакции ОС и ядра (это не является обязательным):
$ lsb_release -a $ uname -r
-
Убедитесь что RBD поддерживается ядром:
$ sudo modprobe rbd vagrant@client-node1:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.2 LTS Release: 14.04 Codename: trusty vagrant@client-node1:~$ vagrant@client-node1:~$ uname -r 3.13.0-46-generic vagrant@client-node1:~$ vagrant@client-node1:~$ sudo modprobe rbd vagrant@client-node1:~$ echo $? 0 vagrant@client-node1:~$
-
Разрешите доступ машины монитора
ceph-node1
кclient-node1
черезssh
. Для этого скопируйте ключи ssh root сceph-node1
наclient-node1
пользователя Vagrant. Выполните следующие команды на машинеceph-node1
если не предписано другого:## Login to ceph-node1 machine $ vagrant ssh ceph-node1 $ sudo su - # ssh-copy-id vagrant@client-node1
Предоставьте одноразовый пароль пользователя Vagrant, т.е.
vagrant
дляceph-node1
. Когда ключи ssh скопированы сceph-node1
наclient-node1
, вы должны получить возможность регистрироваться наclient-node1
без пароля. -
Для установки исполняемых файлов Ceph на
client-node1
выполнитеceph-deploy
наceph-node1
:# cd /etc/ceph # ceph-deploy --username vagrant install client-node1 [root@client-node1 ceph]# ceph-deploy --username vagrant install client-node1 [ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf [ceph_deploy.cli][INFO ] Invoked (1.5.22): /bin/ceph-deploy --username vagrant install client-node1 [ceph_deploy.install][DEBUG ] Installing stable version giant on cluster ceph hosts client-node1 [ceph_deploy.install][DEBUG ] Detecting platform for host client-node1 [client-node1][DEBUG ] connection detected need for sudo [client-node1][DEBUG ] connected to host: vagrant@client-node1 [client-node1][DEBUG ] detect platform information from remote host [client-node1][DEBUG ] detect machine type [ceph_deploy.install][INFO ] Distro info: ubuntu 14.04 trusty [client-node1][INFO ] installing ceph on client-node1
-
Скопируйте файл настроек (
ceph.conf
) наclient-node1
:# ceph-deploy --username vagrant config push client-node1
-
Клиентской машине требуется ключ Ceph для доступа к кластеру Ceph. Ceph создёт пользователя по умолчанию,
client.admin
, который имеет полный доступ к кластеру Ceph. Не рекомендуется применять ключclient.admin
совместно на клиентских узлах. Лучшим решением будет создать нового пользователя Ceph с отдельным ключом и разрешить его доступ к определённым пулам Ceph.В нашем случае мы создадим пользователя Ceph
client.rbd
с правом доступа к пулуrbd
. По умолчанию, блочные устройства Ceph создаются в пулеrbd
:# ceph auth get-or-create client.rbd mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=rbd' [root@ceph-node1 ceph]# ceph auth get-or-create client.rbd mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=rbd' [client.rbd] key = AQCLEg5VeAbGARAAE4ULXC7M$Fwd3BGFDiHRTw== [root@client-node1 ceph]#
-
Добавьте ключ на машине
client-node1
для пользователяclient.rbd
:# ceph auth get-or-create client.rbd | ssh vagrant@client-node1 sudo tee /etc/ceph/ceph.client.rbd.keyring [root@client-node1 ceph]# ceph auth get-or-create client.rbd | ssh vagrant@client-node1 sudo tee /etc/ceph/ceph.client.rbd.keyring [client.rbd] key = AQCLEg5VeAbGARAAE4ULXC7M$Fwd3BGFDiHRTw== [root@client-node1 ceph]#
-
На данном этапе
client-node1
должен быть готов к работе в качестве клиента Ceph. Проверьте состояние на машинеclient-node1
предоставив имя пользователя и ключ безопасности:$ vagrant ssh client-node1 $ sudo su - # cat /etc/ceph/ceph.client.rbd.keyring >> /etc/ceph/keyring ### Since we are not using the default user client.admin we need to supply username that will connect to Ceph cluster. # ceph -s --name client.rbd root@client-node1:~# ceph -s --name client.rbd cluster 9609b429-eee2-4e23-af31-28a24fcf5cbc health HEALTH_OK monmap e3: 3 mons at {ceph-node1=192.168.1.101:6789/0,ceph-node2=192.168.1.102:6789/0, ceph-node3=192.168.1.103:6789/0}, election epoch 82, quorum 0,1,2 ceph-node1,ceph-node2,cep h-node3 osdmap e142: 9 osds: 9 up, 9 in pgmap v378: 180 pgs, 1 pools, 0 bytes data, 0 objects 322 MB used, 134 GB / 134 GB avail 180 active+clean root@client-node1:~#
На текущий момент у нас имеется настроенный клиент Ceph, и мы сейчас можем продемонстрировать создание блочного устройства Ceph с
машины client-node1
.
-
Создайте блочное устройство RADOS с именем
rbd1
и размером 10240МБ:# rbd create rbd1 --size 10240 --name client.rbd
-
Существует множество вариантов отображения списка образов RBD:
## The default pool to store block device images is "rbd", you can also specify the pool name with the rbd command using -p option: # rbd ls --name client.rbd # rbd ls -p rbd --name client.rbd # rbd list --name client.rbd
-
Осмотрите подробности образа rbd:
# rbd --image rbd1 info --name client.rbd root@client-node1:~# rbd create rbdl --size 10240 --name client.rbd root@client-node1:~# rbd is --name client.rbd rbdl root@client-node1:~# rbd --image rbdl info --name client.rbd rbd image 'rbdl': size 10240 MB in 2560 objects order 22 (4096 kB objects) block_name_prefix: rb.0.14f1.238e1f29 format: 1 root@client-node1:~#
Теперь когда у нас есть созданное блочное устройство в кластере Ceph, чтобы воспользоваться этим блочным устройством нам надо
отобразить его на клиентской машине. Чтобы достичь этого, выполните следующие команды на машине
client-node1
.
-
Отобразите ваше блочное устройство на
client-node1
:# rbd map --image rbd1 --name client.rbd
-
Проверьте отображённое блочное устройство:
# rbd showmapped --name client.rbd root@client-node1:~# rbd map --image rbdl --name client.rbd /dev/rbdl root@client-node1:—# rbd showmapped --name client.rbd id pool image snap device 1 rbd rbdl - /dev/rbdl root@client-node1:~#
-
Чтобы воспользоваться этим блочным устройством, нам следует создать на нём файловую систему и смонтировать её:
# fdisk -l /dev/rbd1 # mkfs.xfs /dev/rbd1 # mkdir /mnt/ceph-disk1 # mount /dev/rbd1 /mnt/ceph-disk1 # df -h /mnt/ceph-disk1 root@client-node1:~# df -h /mnt/ceph-diskl Filesystem Size Used Avail Use% Mounted on /dev/rbdl 10G 33M 10G 1% /mnt/ceph-diskl root@client-node1:~#
-
Проверьте блочное устройство записав на него данные:
# dd if=/dev/zero of=/mnt/ceph-disk1/file1 count=100 bs=1M root@client-node1:~# dd if=/dev/zero of=/mnt/ceph-disk1/file1 count=100 bs=1M 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 7.16309 s, 14.6 MB/s root@client-node1:~# df -h /mnt/ceph-disk1 Filesystem Size Used Avail Use% Mounted on /dev/rbdl 10G 133M 9.9G 2% /mnt/ceph-disk1 root@client-node1:~#
-
Чтобы отображать блочное устройство после перезагрузок, вам следует добавить сценарий
init-rbdmap
в запуск системы, добавьте пользователя Ceph и подробности кольца ключей (keyring) в/etc/ceph/rbdmap
, и, наконец, обновите файл/etc/fstab
:# wget https://raw.githubusercontent.com/ksingh7/ceph-cookbook/master/rbdmap -O /etc/init.d/rbdmap # chmod +x /etc/init.d/rbdmap # update-rc.d rbdmap defaults ## Make sure you use correct keyring value in /etc/ceph/rbdmap file, which is generally unique for an environment. # echo "rbd/rbd1 id=rbd,keyring=AQCLEg5VeAbGARAAE4ULXC7M5Fwd3BGFDiHRTw==" >> /etc/ceph/rbdmap # echo "/dev/rbd1 /mnt/ceph-disk1 xfs defaults, _netdev 0 0 " >> /etc/fstab # mkdir /mnt/ceph-disk1 # /etc/init.d/rbdmap start
Ceph поддерживает динамично выделяемые (thin provisioned) блочные устройства, что означает, что физическое пространство хранения не занимается пока вы не начинаете сохранять данные на свои блочные устройства. Ваши блочные устройства Ceph очень гибки; вы можете увеличивать или уменьшать размер RBD на лету со стороны хранилища Ceph. Однако, лежащие в основе файловые системы должны поддерживать изменение размеров. Современные файловые системы, такие как XFS, Btrfs, EXT, ZFS и другие поддерживают изменение размера файловой системы до определённой степени. Для получения дополнительной информации об изменении размера, пожалуйста, обратитесь к соответствующей документации по файловой системе.
Для увеличения или уменьшения размера образа RBD Ceph воспользуйтесь параметром --size
<New_Size_in_MB>
в команде rbd resize
, она тогда установит новый
размер для вашего образа RBD:
-
Первоначальный размер созданного нами ранее образа RBD составляло 10ГБ. Теперь мы увеличим его размер до 20ГБ:
# rbd resize --image rbd1 --size 20480 --name client.rbd # rbd info --image rbd1 --name client.rbd rootgclient-node1:~# rbd resize --image rbdl --size 20480 --name client.rbd Resizing image: 100% complete...done. rootgclient-node1:~# rbd info --image rbdl --name client.rbd rbd image 'rbdl': size 20480 MB in 5120 objects order 22 (4096 kB objects) block_name_prefix: rb.0.14f1.238e1f29 format: 1 root@client-node1:~#
-
Увеличение файловой системы в размере приводит к тому, что мы используем больше пространства хранения. Следует знать, что изменение размера файловой системы является функциональной особенностью как ОС, так и вашего устройства файловой системы. Вам следует прочитать документацию по файловой системе перед изменением размера любого раздела. Файловая система XFS поддерживает изменение размера в реальном масштабе времени. Проверьте системные сообщения чтобы узнать об изменениях размера файловой системы:
# dmesg | grep -i capacity # xfs_growfs -d /mnt/ceph-disk1 root@client-node1:~# xfs_growfs -d /mnt/ceph-diskl meta-data=/dev/rbd1 isize=256 agcount=17, agsize=162816 blks = sectsz=512 attr=2 data = bsize=4096 blocks=2621440, imaxpct=25 = sunit=1024 swidth=1024 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=8 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 2621440 to 5242880 root@client-node1:~# df -h /mnt/ceph-disk1 Filesystem Size Used Avail Use% Mounted on /dev/rbdl 20G 134M 20G 1% /mnt/ceph-disk1 root@client-node1:~#
Ceph распространяет полную поддержку на снимки, которые являются копией образа RBD в определённый момент времени доступной только для чтения. Вы можете сохранять состояние образа RBD сохраняя снимки и восстанавливая определённый снимок для получения первоначальных данных.
Давайте рассмотрим как работает снимок в Ceph.
-
Чтобы проверить функциональность снимка Ceph давайте создадим в сделанном нами ранее блочном устройстве некий файл:
# echo "Hello Ceph This is snapshot test" > /mnt/ceph-disk1/snapshot_test_file root@client-node1:~# echo "Hello Ceph This is snapshot test" > /mnt/ceph-disk1/snapshot_test_file root@client-node1:~# is -1 /mnt/ceph-disk1 total 102404 rw r r 1 root root 104857600 Mar 22 16:07 file1 rw r r 1 root root 33 Mar 22 21:45 snapshot_test_file root@client-node1:~# root@client-node1:~# cat /mnt/ceph-disk1/snapshot_test_file Hello Ceph This is snapshot test root@client-node1:~#
-
Создайте снимок для блочного устройства Ceph:
Синтаксис: rbd snap create <pool-name>/<image-name>@<snap-name> # rbd snap create rbd/rbd1@snapshot1 --name client.rbd
-
Для отображения списка снимков образов воспользуйтесь следующим:
Синтаксис: rbd snap ls <pool-name>/<image-name> # rbd snap ls rbd/rbd1 --name client.rbd root@client-node1:~# rbd snap create rbd/rbdl@snapshotl --name client.rbd root@client-node1:~# rbd snap is rbd/rbdl --name client.rbd SNAPID NAME SIZE 2 snapshot1 20480 MB root@client-node1:~#
-
Чтобы проверить функциональность восстановления снимка Ceph давайте удалим в файловой системе файлы:
# rm -f /mnt/ceph-disk1/*
-
Теперь мы восстановим снимок нашего RBD Ceph для возврата только что на последнем шаге удалённых файлов. Отметьте, пожалуйста, что операция отката перепишет текущую версию вашего образа RBD и его данные версией из снимка. Вы должны аккуратно выполнять эту операцию:
Синтаксис: rbd snap rollback <pool-name>/<image-name>@<snap-name> # rbd snap rollback rbd/rbd1@snapshot1 --name client.rbd
-
По окончанию операции отката снимка перемонтируйте файловую систему RBD Ceph для обновления состояния файловой системы. Вы должны иметь возможность получить назад свои удалённые файлы:
# umount /mnt/ceph-disk1 # mount /dev/rbd1 /mnt/ceph-disk1 # ls -l /mnt/ceph-disk1 root@client-node1:~# rbd snap rollback rbd/rbd1@snapshot1 --name client.rbd Rolling back to snapshot: 100% complete...done. root@client-node1:~# umount /mnt/ceph-disk1 root@client-node1:~# mount /dev/rbd1 /mnt/ceph-disk1 root@client-node1:~# is /mnt/ceph-disk1 total 102404 -rw-r--r-- 1 root root 104857600 Mar 22 16:07 file1 -rw-r--r-- 1 root root 33 Mar 22 21:45 snapshot_test_file root@client-node1:~#
-
Когда вам больше не нужны снимки, вы можете удалять определённый снимок с применением следующего синтаксиса. Удаление снимка не удаляет текущие данные в вашем образе RBD Ceph:
Синтаксис: rbd snap rm <pool-name>/<image-name>@<snap-name> # rbd snap rm rbd/rbd1@snapshot1 --name client.rbd
-
Если у вас имеется множество снимков образов RBD и вы хотите удалить их все одной командой, тогда применяйте подкоманду
purge
:Синтаксис: rbd snap purge <pool-name>/<image-name> # rbd snap purge rbd/rbd1 --name client.rbd
Ceph поддерживает очень приятную возможность для создания копируемых- при- записи (COW, Copy-On-Write {Прим. пер.: при изменении новых данных эти данные вначале копируются в новую область}) клонов из снимков RBD. Эту операцию в Ceph также называют расслоением снимков (Snapshot Layering). Расслоение делает возможным клиентам создавать множественные экземпляры клонов RBD Ceph. Данная функциональность чрезвычайно полезна для облачных и виртуальных платформ, таких как {Прим. пер.: например, OpenStack}, CloudStack, Qemu/KVM и тому подобных {Прим. пер.: например, Proxmox}. Эти платформы обычно предохраняют содержащие отображение ОС/ВМ образы RBD Ceph в виде снимка. Позже этот снимок многократно клонируется для порождения новых виртуальных машин/ экземпляров. Снимки являются доступными только для чтения, однако COW клоны полностью доступны для записи; данная функциональность Ceph предоставляет более высокий уровень гибкости и чрезвычайно полезна в облачных платформах. В последующих главах мы дополнительно исследуем клоны COW при порождении экземпляров OpenStack:
Каждый клонируемый образ (дочерний образ) сохраняет ссылки своих родительских снимков для чтения данных образа. Следовательно, ваш родительский снимок должен быть защищён перед его применением для клонирования. В момент записи данных в клонируемый COW образ он сохраняет ссылочные данные на себя. Клонируемые COW образы так же хороши как RBD. Они точно так же гибки, как и RBD, что означает, что они доступны для записи, а также поддерживают снимки и дальнейшее клонирование.
Образы в Ceph бывают двух типов: format-1
и format-2
.
Функциональность RBD доступна в обоих типах, а именно, как в образах RBD format-1
, так и в
образах RBD format-2
. Однако, функциональность расслоения (свойство клонирования COW) доступна
только для образа RBD в format-2
. Форматом образа RBD по умолчанию является
format-1
.
Для демонстрации клонирования RBD мы намеренно создадим образ RBD format-2
, затем создадим и
защитим его снимок и, наконец, создадим из него клоны COW.
-
Создайте образ RBD
format-2
и осмотрите его детали:# rbd create rbd2 --size 10240 --image-format 2 --name client.rbd # rbd info --image rbd2 --name client.rbd root@client-node1:/# rbd create rbd2 --size 10240 --image-format 2 --name client.rbd root@client-node1:/# root@client-node1:/# rbd info --image rbd2 --name client.rbd rbd image 'rbd2': size 10240 MB in 2560 objects order 22 (4096 kB objects) block_name_prefix: rbd_data.20f42ae8944a format: 2 features: layering root@client-node1:/#
-
Создайте снимок этого образа RBD:
# rbd snap create rbd/rbd2@snapshot_for_cloning --name client.rbd
-
Для создания клона COW защитите снимок. Это важный шаг, мы должны предохранять снимок, так как если снимок будет удалён, будут разрушены все присоединённые клоны:
# rbd snap protect rbd/rbd2@snapshot_for_cloning --name client.rbd
-
Далее при помощи этого снимка мы создадим клонированный образ RBD:
Синтаксис: rbd clone <pool-name>/
-
Созание клона является быстрым процессом. Как только он завершится, проверьте информацию вашего нового образа. Вы отметите, что будут отображена информация о его родительском пуле, образе и снимке:
# rbd info rbd/clone_rbd2 --name client.rbd root@client-node1:/# rbd snap create rbd/rbd2@snapshot_for_cloning --name client.rbd root@client-node1:/# rbd snap protect rbd/rbd2@snapshot_for_cloning --name client.rbd root@client-node1:/# rbd clone rbd/rbd2@snapshot_for_cloning rbd/clone_rbd2 --name client.rbd root@client-node1:/# rbd info rbd/clone_rbd2 --name client.rbd rbd image 'clone_rbd2': size 10240 MB in 2560 objects order 22 (4096 kB objects) block_name_prefix: rbd_data.220b3d1b58ba format: 2 features: layering parent: rbd/rbd2@snapshot_for_cloning overlap: 10240 MB root@client-node1:/#
На данный момент у нас имеется клонированный образ RBD, который зависит от своего снимка образа родителя. Чтобы сделать клонированный образ RBD независимым от его родителей нам нужно выровнять (flatten) этот образ, которое выполнит копирование данных из родительского снимка в его дочерний образ. Время, которое займет выполнение процесса выравнивания зависит от размера данных, расположенных в родительском снимке. Когда процесс выравнивания завершится, зависимости между клонированным образом и его родительским снимком больше не будет.
-
Чтобы начать процесс выравнивания воспользуйтесь следующим:
# rbd flatten rbd/clone_rbd2 --name client.rbd # rbd info --image clone_rbd2 --name client.rbd
После завершения процесса выравнивания, если вы проверите информацию об образе, вы отметите, что имя родительского образа/ снимка отсутствует и клон является независимым.
root@client-node1:/# rbd flatten rbd/clone_rbd2 --name client.rbd Image flatten: 100% complete...done. root@client-node1:/# rbd info --image clone_rbd2 --name client.rbd rbd image 'clone_rbd2': size 10240 MB in 2560 objects order 22 (4096 kB objects) block_name_prefix: rbd_data.220b3d1b58ba format: 2 features: layering root@client-node1:/#
-
Вы также можете удалить свой родительский снимок если он вам больше не требуется. Перед удалением снимка вам сначала необходимо снять с него защиту:
# rbd snap unprotect rbd/rbd2@snapshot_for_cloning --name client.rbd
-
Когда со снимка снята защита, вы можете удалить его:
purge
:Синтаксис: rbd snap purge <pool-name>/<image-name> # rbd snap rm rbd/rbd2@snapshot_for_cloning --name client.rbd
OpenStack является платформой с открытым исходным кодом для построения и управления общедоступной и частной облачной инфраструктуры. Он управляется независимым, некоммерческим фондом, называемым фондом OpenStack. Это самое большое и наиболее активное сообщество, которое поддерживается такими технологическими гигантами как HP, Red Hat, Dell, Cisco, IBM, Rackspace и многими другими. Идея OpenStack для облачных решений состоит в том, что оно должно быть простым в реализации и массивно масштабируемым.
OpenStack рассматривается как облачная операционная система в которой пользователи имеют возможность мгновенно развёртывать сотни виртуальных машин автоматизированным способом. Она также предоставляет эффективный способ заботы о бесплатном управлении этими машинами. OpenStack своим динамичным увеличения и уменьшения в масштабе, а также возможностями распределённой архитектуры, которые делают вашу облачную среду надёжной и готовой к будущему. OpenStack представляет платформу инфраструктуры- как- службы (IaaS, Infrastructure-as-a-Service) для любых ваших потребностей в облачных решениях.
Как показано на приведённой выше схеме, OpenStack состоит из отдельных различных программных компонентов, которые совместно
работают для предоставления служб облака. В данной главе из всех этих компонент мы сосредоточимся на Cinder
и Glance
, которые соответственно предоставляют службы
блочного хранения и образов. Для получения дополнительной информации по компонентам, пожалуйста, обращайтесь к
http://www.openstack.org/ {Прим. пер.:
у нас на сайте вы можете ознакомиться с переводом 2й редакции OpenStack Operations Guide (на момент перевода данной книги доступна
3я редакция: 2016-03-03, последняя версия достуна тут )}.
В последние несколько лет OpenStack приобрёл впечатляющую популярность благодаря своей основанной на программно определяемой поддержке широкого диапазона вычислений, сетевых сред и даже систем хранения. И когда вы рассуждаете о системах хранения для OpenStack, Ceph привлекает всё внимание. Проведённый в сентябре 2015г опрос пользователей OpenStack показал, что Ceph доминирует на рынке устройств блочного хранения с колоссальными 62% применения.
Ceph предоставляет устойчивую, нодёжную основу хранения, которую искал OpenStack. Его бесшовная интеграция с компонентами OpenStack такими, как cinder, glance, nova и keystone предоставляет всю- в- одном основу хранения для OpenStack. Вот некоторые ключевые преимущества, делающие Ceph наилучшим соответствием для OpenStack:
-
Ceph предоставляет основу хранения уровня предприятия с богатым функционалом при очень умеренной стоимости за гигабайт, что помогает сохранять снижению стоимости развёртывания облачного решения OpenStack.
-
Ceph является унифицированным решением хранения для хранения Блоков, Файлов и Объектов для OpenStack, позволяя приложениям использовать хранилище в соответствии со своими потребностями.
-
Ceph обеспечивает современные возможности блочного хранения для облачных решений OpenStack, которые включают простое и быстрое порождение экземпляров, а также их резервное копирование и клонирование виртуальных машин.
-
Она предоставляет по умолчанию постоянные тома для экземпляров OpenStack, которые могут работать как традиционные серверы, в которых данные не наполняются при загрузке.
-
OpenStack сопровождение Ceph является независимой от хоста при поддержке миграции виртуальных машин, масштабировании компонентов хранения без воздействия на ВМ.
-
Она предоставляет томам OpenStack функциональность снимков, которая может также применяться как средство резервного копирования.
-
Функциональность клонирования копированием- при- записи (COW) Ceph позволяет OpenStack раскручивать множество экземпляров за один раз, что помогает быстрее работать механизму продвижения.
-
Ceph поддерживает богатые API как для интерфейсов хранения объектов Swift, так и для S3.
Сообщества Ceph и OpenStack в последние несколько лет тесно работали для создания интеграции ещё более бесшовной и применения новых функциональностей по мере их появления. В будущем мы ожидаем что OpenStack и Ceph будут ещё более тесно ассоциироваться благодаря приобретению Red Hat Inktank, компании, лежащей в основе Ceph; Red Hat один из основных вкладчиков в проекте OpenStack.
OpenStack является модульной системой, которая имеет уникальные компоненты для особых наборов задач. Существуют различные компоненты, которым требуется надёжная основа для хранения, подобная Ceph, и расширяющая полную интеграцию в неё, как отображено на следующей схеме. Все эти компоненты используют Ceph для своих собственных потребностей в хранении блочных устройств и объектов. Большинство основанных на OpenStack и Ceph облачных решений применяют интеграцию Cinder, Glance и Swift c Ceph. Интеграция с Keystone применяется когда вам нужна S3- совместимость хранения объектов в вашей поддержке Ceph. Интеграция Nova делает возможной загрузку с томов Ceph для ваших экземпляров OpenStack.
Установка и настройка OpenStack выходят за пределы рассмотрения данной книги, однако, просто для демонстрации мы применим виртуальную машину с предустановленной редакцией OpenStack RDO Juno. Если вы захотите, вы можете использовать вашу собственную среду OpenStack и можете выполнить интеграцию Ceph. {Прим. пер.: отсылаем к нашему переводу Руководства по эксплуатации OpenStack за подробностями инициализации и развертывания.}
В этом рецепте мы продемонстрируем как установить предварительно настроенную среду OpenStack с применением Vagrant и получить к ней доступ через CLI и GUI.
-
Запустите
openstack-node1
применивVagrantfile
как мы это делали для узлов Ceph в предыдущей главе. Убедитесь, что вы находитесь на машине хоста и под репозиториемceph-cookbook
прежде чем подниметеopenstack-node1
с помощью Vagrant:# cd ceph-cookbook # vagrant up openstack-node1 HOST:ceph-cookbook ksingh$ vagrant up openstack-node1 Bringing machine 'openstack-node1' up with 'virtualbox' provider... ==> openstack-node1: Clearing any previously set forwarded ports... ==> openstack-node1: Clearing any previously set network interfaces... => openstack-node1: Preparing network interfaces based on configuration... openstack-node1: Adapter 1: nat openstack-node1: Adapter 2: hostonly => openstack-node1: Forwarding ports... openstack-node1: 22 => 2222 (adapter 1) => openstack-node1: Running 'pre-boot' VM customizations... => openstack-node1: Booting vm... => openstack-node1: waiting for machine to boot. This may take a few minutes...
-
Когда
openstack-node1
запущен, проверьте состояние Vagrant, а затем зарегистрируйтесь на этом узле:$ vagrant status openstack-node1 $ vagrant ssh openstack-node1 HOST:ceph-cookbook ksingh$ vagrant status openstack-node1 Current machine states: openstack-node1 running (virtualbox) The VM is running. To stop this vm, you can run `vagrant halt` to shut it down forcefully, or you can run `vagrant suspend` to simply suspend the virtual machine. In either case, to restart it again, simply run `vagrant up`. HOST:ceph-cookbook ksingh$ HOST:ceph-cookbook ksingh$ HOST:ceph-cookbook ksingh$ vagrant ssh openstack-node1 Last login: Sat Mar 28 21:38:07 2015 from 10.0.2.2 [vagrant@os-node1 ~]$
-
Мы предполагаем, что у вас есть некое понимание OpenStack и представление о его работе. Мы подключим файл
keystone_admin
, который был размещён в/root
, а затем нам нужно переключиться в корень:$ sudo su - $ source keystone_admin
Теперь мы выполним некоторые внутренние команды OpenStack чтобы убедиться что OpenStack установлен надлежащим образом. Обратите внимание, пожалуйста, что некоторые из этих команд не отображают никакой информации, поскольку это новая среда OpenStack, в которой нет созданных экземпляров или томов:
# nova list # cinder list # glance image-list [vagrant@os-node1 ~]$ sudo su - Last login: Sat Mar 28 22:34:52 EET 2015 on pts/0 [root@os-node1 ~]# source keystonerc_admin [root@os-node1 ~(keystone_admin)]# [root@os-node1 ~(keystone_admin)]# nova list +----+------+--------+------------+-------------+----------+ | ID | Name | Status | Task State | Power State | Networks | +----+------+--------+------------+-------------+----------+ +----+------+--------+------------+-------------+----------+ [root@os-node1 ~(keystone_admin)]# [root@os-node1 ~(keystone_admin)]# cinder list +----+--------+--------------+------+-------------+----------+-------------+ | ID | Status | Display Name | Size | Volume Type | Bootable | Attached to | +----+--------+--------------+------+-------------+----------+-------------+ +----+--------+--------------+------+-------------+----------+-------------+ [root@os-node1 ~(keystone_admin)]# glance image-list +--------------------------------------+--------+-------------+------------------+----------+--------+ | ID | Name | Disk Format | Container Format | Size | Status | | Sc261af7-9388-44ad-a8ce-f9ebdad2e5cb | cirros I qcow2 | bare | 13200896 | active | +--------------------------------------+--------+-------------+------------------+----------+--------+ [root@os-node1 ~(keystone_admin)]#
-
Вы можете также зарегистрироваться в веб- интерфейсе horizon OpenStack
https://192.168.1.111/dashboard
с именем пользователяadmin
и паролемvagrant
. -
После регистрации мы откроем страницу Общего обзора:
Узлы OpenStack должны быть настроены клиентами Ceph чтобы получить доступ к кластеру Ceph. Для этого установите пакеты Ceph на узлах OpenStack и проверьте что вы можете осуществить доступ к кластеру Ceph.
В данном рецепте мы собираемся настроить OpenStack в качестве клиента Ceph, который позжебудет использоваться для настройки cinder, glance и nova:
-
Мы воспользуемся
ceph-node1
для установки исполняемых файлов Ceph наos-node1
с использованиемceph-deploy
, как мы это уже делали ранее в Главе 1. Введение и за его пределами. Чтобы сделать это, мы должны установить регистрацию ssh без пароля дляos-node1
. Пароль дляroot
опять тот же (vagrant
):$ vagrant ssh ceph-node1 $ sudo su - # ping os-node1 -c 1 # ssh-copy-id root@os-node1 HOST:ceph-cookbook ksingh$ vagrant ssh ceph-node1 Last login: Sun mar 29 11:27:53 2015 from 10.0.2.2 [vagrant@ceph-node1 ~]$ sudo su - Last login: Sun Mar 29 11:27:57 EEST 2015 on pts/1 [root@ceph-node1 ~]# ping os-node1 -c 1 PING os-node1.cephcookbook.com (192.168.1.111) 56(84) bytes of data. 64 bytes from os-node1.cephcookbook.com (192.168.1.111): icmp_seq=1 tt1=64 time=0.568 ms --- os node1.cephcookbook.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.568/0.568/0.568/0.000 ms [root@ceph-node1 ~]# ssh-copy-id root@os-node1 /bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@os-node1's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@os-node1'" and check to make sure that only the key(s) you wanted were added. [root@ceph-node1 ~]#
-
Далее мы установим пакеты Ceph на
os-node1
с применениемceph-deploy
:# cd /etc/ceph # ceph-deploy install os-node1 [root@ceph-node1 ~]# cd /etc/ceph [root@ceph-node1 ceph]# ceph-deploy install os-node1 [ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf [ceph_deploy.cli][INFO ] Invoked (1.5.22): /bin/ceph-deploy install os-node1 [ceph_deploy.install][DEBUG ] Installing stable version giant on cluster ceph hosts os-node1 [ceph_deploy.install][DEBUG ] Detecting platform for host os-node1 [os-node1][DEBUG ] connected to host: os-node1 [os-node1][DEBUG ] detect platform information from remote host [os-node1][DEBUG ] detect machine type [ceph_deploy.install][INFO ] Distro info: centos Linux 7.0.1406 Core [os-node1][INFO ] installing ceph on os-node1
-
Пропихните файл настрое Ceph,
ceph.conf
сceph-node1
наos-node1
. Этот файл настроек поможет клиентам достигать мониторы Ceph и машины OSD. Заметьте, пожалуйста, что при желании вы также можете скопировать файлceph.conf
вручную наos-node1
:# ceph-deploy config push os-node1
Замечание Убедитесь что ваш помещённый на
os-node1
файлceph.conf
имеет привилегии, установленные в значение 644.[root@ceph-node1 ceph]# ceph-deploy config push os-node1 [ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf [ceph_deploy.cli][INFO ] Invoked (1.5.22): /bin/ceph-deploy config push os-node1 [ceph_deploy.config][DEBUG ] Pushing config to os-node1 [os-node1][DEBUG ] connected to host: os-node1 [os-node1][DEBUG ] detect platform information from remote host [os-node1][DEBUG ] detect machine type [os-node1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf [root@ceph-node1 ceph]#
-
Создайте пулы для cinder, glance и nova. Вы можете применить любой доступный пул, однако для компонентов OpenStack рекомендуется чтобы вы создавали отдельные пулы:
# ceph osd pool create images 128 # ceph osd pool create volumes 128 # ceph osd pool create vms 128 [root@ceph-node1 ceph]# ceph osd pool create images 128 pool 'images' created [root@ceph-node1 ceph]# ceph osd pool create volumes 128 pool 'volumes' created [root@ceph-node1 ceph]# ceph osd pool create vms 128 pool 'vms' created [root@ceph-node1 ceph]# ceph osd lspools 0 rbd,1 images,2 volumes,3 vms, [root@ceph-node1 ceph]#
-
Установите аутентификацию клиента создав нового пользователя для cinder и glance:
# ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images' # ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images' [root@ceph-node1 ceph]# ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images' [client.cinder] key = AQByVBhVMK2nLxAArOflyalhbc23N2kyZv0EXw== [root@ceph-node1 ceph]# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images' [client.glance] key = AQCBVBhVYJEEKBAAhXHTe9Z12O2YyhMOjpga2A== [root@ceph-node1 ceph]#
-
Добавьте кольцо ключей на
os-node1
и измените его владельца:# ceph auth get-or-create client.glance | ssh os-node1 sudo tee /etc/ceph/ceph.client.glance.keyring # ssh os-node1 sudo chown glance:glance /etc/ceph/ceph.client.glance.keyring # ceph auth get-or-create client.cinder | ssh os-node1 sudo tee /etc/ceph/ceph.client.cinder.keyring # ssh os-node1 sudo chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring [root@ceph-node1 ceph]# ceph auth get-or-create client.glance | ssh os-node1 sudo tee /etc/ceph/ceph.client.glance.keyring [client.glance] key = AQCBVBhVYJEEKBAAhXTe9Z12O2YyhM0jpga2A== [root@ceph-node1 ceph]# ssh os-node1 sudo chown glance:glance /etc/ceph/ceph.client.glance.keyring [root@ceph-node1 ceph]# ceph auth get-or-create client.cinder | ssh os-node1 sudo tee /etc/ceph/ceph.client.cinder.keyring [client.cinder] key = AQByVBhVMK2nLxAAr0f1yalhbc23N2kyZv0EXw== [root@ceph-node1 ceph]# ssh os-node1 sudo chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring [root@ceph-node1 ceph]#
-
Процеессу
libvirt
необходим доступ к кластеру Ceph для присоединения или отсоединения блочных устройств от Cinder. Мы должны создать временную копию ключаclient.cinder
, который будет нужен для настроек cinder и nova позже в данной главе:# ceph auth get-key client.cinder | ssh os-node1 tee /etc/ceph/temp.client.cinder.key
-
На данный момент вы можете проверить предыдущую настройку осуществив доступ к кластеру Ceph с
os-node1
применив пользователей Cephclient.glance
иclient.cinder
. Зарегистрируйтесь наos-node1
и выполните следующие команды:$ vagrant ssh openstack-node1 $ sudo su - # cd /etc/ceph # ceph -s --name client.glance --keyring ceph.client.glance.keyring # ceph -s --name client.cinder --keyring ceph.client.cinder.keyring HOST:ceph-cookbook ksingh$ vagrant ssh openstack-node1 Last login: Sun Mar 29 22:55:20 2015 from 10.0.2.2 [vagrant@os-node1 ~]$ sudo su - Last login: Sun Mar 29 22:55:35 EEST 2015 on pts/0 [root@os-node1 ~]# cd /etc/ceph [root@os-node1 ceph]# ceph -s --name client.glance --keyring ceph.client.glance.keyring cluster 9609b429-eee2-4e23-af31-28a24fcf5cbc health HEALTH_OK monmap e3: 3 mons at {ceph-node1=192.168.1.101:6789/0,ceph-node2=192.168.1.102:6789/0,ceph-node3=192.1 68.1.103:6789/0}, election epoch 134, quorum 0,1,2 ceph-node1,ceph-node2,ceph-node3 osdmap e248: 9 osds: 9 up, 9 in pgmap v1189: 564 pgs, 4 pools, 114 MB data, 2629 objects 745 MB used, 134 GB / 134 GB avail 564 active+clean [root@os-node1 ceph]# [root@os-node1 ceph]# ceph -s --name client.cinder --keyring ceph.client.cinder.keyring cluster 9609b429-eee2-4e23-af31-28a24fcf5cbc health HEALTH_OK monmap e3: 3 mons at {ceph-node1=192.168.1.101:6789/0,ceph-node2=192.168.1.102:6789/0,ceph-node3=192.1 68.1.103:6789/0}, election epoch 134, quorum 0,1,2 ceph-node1,ceph-node2,ceph-node3 osdmap e248: 9 osds: 9 up, 9 in pgmap v1189: 564 pgs, 4 pools, 114 MB data, 2629 objects 745 MB used, 134 GB / 134 GB avail 564 active+clean [root@os-node1 ceph]#
-
Наконец создадим
uuid
, затем создадим, определим и установим ключ безопасности дляlibvirt
и удалим временные ключи:-
Создайте
uuid
воспользовавшись следующим:# cd /etc/ceph # uuidgen
-
Создайте файл безопасности и установите это число
uuid
в нём:cat > secret.xml <<EOF <secret ephemeral='no' private='no'> <uuid>bb90381e-a4c5-4db7-b410-3154c4af486e</uuid> <usage type='ceph'> <name>client.cinder secret</name> </usage> </secret> EOF
-
Определите пароль и надёжно сохраните сгенерированное секретное значение. На последующих этапах нам понадобится это секретное значение:
# virsh secret-define --file secret.xml [root@os-node1 ~]# cd /etc/ceph [root@os-node1 ceph]# uuidgen bb90381e-a4c5-4db7-b410-3154c4af486e [root@os-node1 ceph]# cat > secret.xml <<EOF > <secret ephemeral='no' private='no'> > <uuid>bb90381e-a4c5-4db7-b410-3154c4af486e</uuid> > <usage type='ceph'> > <name>client.cinder secret</name> > </usage> > </secret> > EOF [root@os-node1 ceph]# virsh secret-define --file secret.xml Secret bb90381e-a4c5-4db7-b410-3154c4af486e created [root@os-node1 ceph]#
-
Установите секретное значение которое было сгенерировано на последнем шаге в
virsh
и удалите временные файлы. Удаление временных файлов не обязательно; оно выполняется просто для очистки системы:# virsh secret-set-value --secret bb90381e-a4c5-4db7-b410-3154c4af486e --base64 $(cat temp.client.cinder.key) && rm temp.client.cinder.key secret.xml # virsh secret-list [root@os-node1 ceph]# virsh secret-set-value --secret bb90381e-a4c5-4db7-b410-3154c4af486e --base64 $(cat temp.client.cinder.key) && rm temp.client.cinder.key secret.xml Secret value set rm: remove regular file 'temp.client.cinder.key'? y rm: remove regular file 'secret.xml'? y [root@os-node1 ceph]# [root@os-node1 ceph]# virsh secret-list UUID Usage ---------------------------------------------------------------------------------- bb90381e-a4c5-4db7-b410-3154c4af486e ceph client.cinder secret [root@os-node1 ceph]#
-
Мы выполнили настройку необходимую со стороны Ceph. В этом рецепте мы настроим OpenStack glance для применения поддержки хранения Ceph.
Этот рецепте расскажет о настройке компонентов glance OpenStack для хранения образов виртуальных машин в RBD Ceph:
-
Зарегистрируйтесь на
os-node1
, который является нашим узлом glance и отредактируйте/etc/glance/glance-api.conf
для следующих изменений:-
В разделе
[DEFAULT]
убедитесь в наличии следующих строк:default_store=rbd show_image_direct_url=True
-
Выполните следующую команду для проверки элементов:
# cat /etc/glance/glance-api.conf | egrep -i "default_store|image_direct" [root@os-node1 ceph]# cat /etc/glance/glance-api.conf | egrep -i "default_storelimage_direct" default_store=rbd show_image_direct_ur1=True [root@os-node1 ceph]#
-
В разделе
[glance_store]
убедитесь что следующие строки присутствуют вRBD Store Options
:stores = rbd rbd_store_ceph_conf=/etc/ceph/ceph.conf rbd_store_user=glance rbd_store_pool=images rbd_store_chunk_size=8
-
Выполните следующую команду для проверки предыдущих элементов:
# cat /etc/glance/glance-api.conf | egrep -v "#|default" | grep -i rbd [root@os-node1 ceph]# cat /etc/glance/glance-api.conf | egrep -v "#|default" | grep -i rbd stores = rbd rbd_store_ceph_conf=/etc/ceph/ceph.conf rbd_store_user=glance rbd_store_pool=images rbd_store_chunk_size=8 [root@os-node1 ceph]#
-
-
Перезапустите службы glance OpenStack:
# service openstack-glance-api restart
-
Получите файл
keystone_admin
для OpenStack и выведите список образов glance:# source /root/keystonerc_admin # glance image-list [root@os-node1 ~]# source keystonerc_admin [root@os-node1 ~(keystone_admin)]# [root@os-node1 ~(keystone_admin)]# glance image-list +--------------------------------------+--------+-------------+------------------+----------+--------+ | ID | Name | Disk Format | Container Format | Size | Status | +--------------------------------------+--------+-------------+------------------+----------+--------+ | 5c261af7-9388-44ad-a8ce-f9ebdad2eScb | cirros | qcow2 | bare | 13200896 | active | +--------------------------------------+--------+-------------+------------------+----------+--------+ [root@os-node1 ~(keystone_admin)]#
-
Загрузите из интернет образ
cirros
, который позже будет сохранён в Ceph:# wget http://download.cirros-cloud.net/0.3.1/cirros-0.3.1-x86_64-disk.img
-
Добавьте новый образ glance с помощью следующей команды:
# glance image-create --name cirros_image --is-public=true --diskformat=qcow2 --container-format=bare < cirros-0.3.1-x86_64-disk.img [root@os-node1 ~(keystone_admin)]# glance image-create --name cirros_image --is-public=true --disk-format=qcow2 --container-format=bare < cirros-0.3.1-x86_64-disk.img +------------------+--------------------------------------+ | Property | Value | +------------------+--------------------------------------+ | checksum | d972013792949d0d3ba628fbe8685bce | | container_format | bare | | created_at | 2015-03-30T10:17:58 | | deleted | False | | deleted_at | None | | disk_format | qcow2 | | id | b2d15e34-7712-4f1d-b48d-48b924e79b0c | | is_public | True | | min_disk | 0 | | min_ram | 0 | | name | cirros_image | | owner | c9f87abe43ea49239313565ca74ebaa0 | | protected | False | | size | 13147648 | | status | active | | updated_at | 2015-03-30T10:18:01 | | virtual_size | None | +------------------+--------------------------------------+
-
Отобразим список образов glanse с использованием следующей команды; отметим, что сейчас существует два образа glance:
# glance image-list [root@os-node1 ~(keystone_admin)]# glance image-list +--------------------------------------+--------------+-------------+------------------+----------+--------+ | ID | Name | Disk Format | Container Format | Size | Status | +--------------------------------------+--------------+-------------+------------------+----------+--------+ | 5c261af7-9388-44ad-a8ce-f9ebdad2e5cb | cirros | qcow2 | bare | 13200896 | active | | b2d15e34-7712-4f1d-b48d-48b924e79b0c | cirros_image | qcow2 | bare | 13147648 | active | +--------------------------------------+--------------+-------------+------------------+----------+--------+ [root@os-node1 ~(keystone_admin)]#
-
Вы можете проверить что новый образ сохранён в Ceph запросив ID образа в пуле образов вашего Ceph:
# rados -p images ls --name client.glance --keyring /etc/ceph/ceph.client.glance.keyring | grep -i id [root@os-node1 ~]# rados -p images ls --name client.glance --keyring /etc/ceph/ceph.client.glance.keyring | grep -i id rbd_id.b2d15e34-7712-4f1d-b48d-48b924e79b0c [root@os-node1 ~]#
-
Поскольку мы настроили glance использовать Ceph в качестве его хранилища по умолчанию, все образы glance будут теперь сохраняться в Ceph. Вы также можете попытаться создавать образы из инструментальной панели OpenStack horizon.
$ vagrant ssh ceph-node1
-
Наконец мы попытаемся запустить экземпляр с применением образа, который мы создали ранее:
ova boot --flavor 1 --image b2d15e34-7712-4f1d-b48d-48b924e79b0c vm1
Программа Cinder OpenStack предоставляет блочные устройства виртуальным машинам. В этом рецепте мы настроим Cinder OpenStack на
применение Ceph для поддержки хранения. Для взаимодействия с нашим блочным устройством Ceph Cinder OpenStack требуется драйвер.
На узле OpenStack измените файл настроек /etc/cinder/cinder.conf
добавив приводимые в
следующем разделе фрагменты кода.
В последнем рецепте мы изучили настройку glance для применения Ceph. В этом рецепте мы изучим применение RBD Ceph в службе OpenStack Cinder:
-
Поскольку в данной демонстрации мы не применяем множественную поддержку настроек Cinder, закройте комментарием параметр
enabled_backends
в файле/etc/cinder/cinder.conf
. -
Переместитесь в раздел
Options defined in cinder.volume.drivers.rbd
файла/etc/cinder/cinder.conf
и добавьте следующее (замените секретuuid
значением вашей среды:volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_pool = volumes rbd_user = cinder rbd_secret_uuid = bb90381e-a4c5-4db7-b410-3154c4af486e rbd_ceph_conf = /etc/ceph/ceph.conf rbd_flatten_volume_from_snapshot = false rbd_max_clone_depth = 5 rbd_store_chunk_size = 4 rados_connect_timeout = -1 glance_api_version = 2
-
Выполните следующую команду для проверки предыдущих записей:
# cat /etc/cinder/cinder.conf | egrep "rbd|rados|version" | grep -v "#" [root@os-node1 ~]# cat /etc/cinder/cinder.conf | egrep "rbd|rados|version" | grep -v "#" volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_pool = volumes rbd_user = cinder rbd_secret_uuid = bb90381e-a4c5-4db7-b410-3154c4af486e rbd_ceph_conf = /etc/ceph/ceph.conf rbd_flatten_volume_from_snapshot = false rbd_max_clone_depth = 5 rbd_store_chunk_size =4 rados_connect_timeout = -1 glance_api_version = 2 [root@os-node1 ~]#
-
Перезапустите службы OpenStack Cinder:
# service openstack-cinder-volume restart
-
Получите файлы
keystone_admin
для OpenStack:# source /root/keystonerc_admin # cinder list
-
Для проверки настроек создайте ваш первый 2ГБ том Cinder, который должен быть теперь создан в вашем кластере Ceph:
# cinder create --display-name ceph-volume01 --display-description "Cinder volume on CEPH storage" 2
-
Проверьте ваш том выводом томов пула Cinder и Ceph:
# cinder list # rados -p volumes --name client.cinder --keyring ceph.client.cinder.keyring ls | grep -i id [root@os-node1 ceph(keystone_admin)]# cinder list +--------------------------------------+-----------+---------------+------+-------------+----------+-------------+ | ID | Status | Display Name | Size | Volume Type | Bootable | Attached to | +--------------------------------------+-----------+---------------+------+-------------+----------+-------------+ | 1337c866-6ff7-4a56-bfe5-b0b80abcb281 | available | ceph-volume01 | 2 | None | false | | +--------------------------------------+-----------+---------------+------+-------------+----------+-------------+ [root@os-node1 ceph(keystone_admin)]# [root@os-node1 ceph(keystone_admin)]# rados -p volumes --name client.cinder --keyring ceph.client.cinder.keyring is | grep -i id rbd_id.volume-1337c866-6ff7-4a56-bfe5-b0b80abcb281 [root@os-node1 ceph(keystone_admin)]#
-
Аналогично попробуйте создать другой том с применением инструментальной панели OpenStack Horizon.
Чтобы подключать RBD Ceph к экземпляру OpenStack нам следует настроить компонент nova OpenStack добавив сведения о пользователе
rbd
и uuid
информацию, поскольку они требуются для
соединения с кластером Ceph. Для этого нам нужно изменить /etc/nova/nova.conf
на нашем
узле OpenStack и выполнить приводимые в следующем разделе шаги.
Настроенная нами в предыдущем рецепте служба Cinder создаёт тома в Ceph, однако для подключения этих томов к экземплярам OpenStack нам нужно настроить Nova:
-
Переместитесь в раздел
Options defined in nova.virt.libvirt.volume
и измените следующие строки (замените секретuuid
значением вашего окружения):rbd_user=cinder rbd_secret_uuid= bb90381e-a4c5-4db7-b410-3154c4af486e
-
Перезапустите службы OpenStack Nova:
# service openstack-nova-compute restart
-
Для проверки этих настроек мы подключим том Cinder к экземпляру OpenStack. Выведем перечни экземпляров и томов для получения их ID:
# nova list # cinder list [root@os-node1 ~(keystone_admin)]# nova list +--------------------------------------+------+--------+------------+-------------+---------------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+------+--------+------------+-------------+---------------------+ | lcadffc0-58b0-43fd-acc4-33764a02a0a6 | vm1 | ACTIVE | - | Running | public=172.24.4.229 | +--------------------------------------+------+--------+------------+-------------+---------------------+ [root@os-node1 ~(keystone_admin)]# cinder list +--------------------------------------+-----------+---------------+------+-------------+----------+-------------+ | ID | Status | Display Name | Size | Volume Type | Bootable | Attached to | +--------------------------------------+-----------+---------------+------+-------------+----------+-------------+ | 1337c866-6ff7-4a56-bfe5-b0b80abcb281 | available | ceph-volume01 | 2 | None | false | | | 67d76db0-f808-40d8-819b-Of0302df74a0 | available | ceph-volume02 | 1 | None | false | | +--------------------------------------+-----------+---------------+------+-------------+----------+-------------+
-
Подключите свой том к вашему экземпляру:
# nova volume-attach 1cadffc0-58b0-43fd-acc4-33764a02a0a61337c866-6ff7-4a56-bfe5-b0b80abcb281 # cinder list [root@os-node1 ~(keystone_admin)]# nova volume-attach lcadffc0-58b0-43fd-acc4-33764a02a0a6 1337c866-6ff7-4a56-bfe5-b0b80abcb281 +----------+--------------------------------------+ | Property | Value | +----------+--------------------------------------+ | device | /dev/vdb | | id | 1337c866-6ff7-4a56-bfe5-b0b80abcb281 | | serverId | lcadffc0-58b0-43fd-acc4-33764a02a0a6 | | volumeid | 1337c866-6ff7-4a56-bfe5-b0b80abcb281 | +----------+--------------------------------------+ [root@os-node1 -(keystone_admin)]# cinder list +--------------------------------------+-----------+---------------+------+-------------+----------+--------------------------------------+ | ID | Status | Display Name | Size | Volume Type | Bootable | Attached to | +--------------------------------------+-----------+---------------+------+-------------+----------+--------------------------------------+ | 1337c866-6ff7-4a56-bfe5-b0b80abcb281 | in-use | ceph-volume01 | 2 | None | false | lcadffc0-58b0-43fd-acc4-33764a02a0a6 | | 67d76db0-f808-40d8-819b-Of0302df74a0 | available | ceph-volume02 | 1 | None | false | | +--------------------------------------+-----------+---------------+------+-------------+----------+--------------------------------------+ [root@os-node1 ~(keystone_admin)]#
-
Теперь вы можете применять этот том как обычное блочное устройство из экземпляра OpenStack.
Чтобы загружать все экземпляры OpenStack из Ceph, т.е. для функциональности загрузка- с- тома, нам следует настроить для Nova
недолговечную (ephemeral) поддержку. Для этого отредактируйте /etc/nova/nova.conf
на нашем
узле OpenStack и выполните следующие изменения.
Этот рецепт имеет дело с настройкой Nova для хранения всех виртуальных машин в RBD Ceph:
-
Переместитесь в раздел
Options defined in nova.virt.libvirt.volume
и измените следующие строки (замените секретuuid
значением вашего окружения):rbd_user=cinder rbd_secret_uuid= bb90381e-a4c5-4db7-b410-3154c4af486e
-
Переместитесь в раздел
[libvirt]
и добавьте следующее:inject_partition=-2 images_type=rbd images_rbd_pool=vms images_rbd_ceph_conf=/etc/ceph/ceph.conf
-
Переместитесь в раздел
Options defined in nova.virt.libvirt.volume
и измените следующие строки (замените секретuuid
значением вашего окружения):rbd_user=cinder rbd_secret_uuid= bb90381e-a4c5-4db7-b410-3154c4af486e
-
Проверьте свои изменения:
# cat /etc/nova/nova.conf|egrep "rbd|partition" | grep -v "#" [root@os-node1 ~(keystone_admin)]# cat /etc/nova/nova.conf|egrep "rbd|partition" | grep -v "#" inject_partition=-2 images_type=rbd images_rbd_pool=vms images_rbd_ceph_conf=/etc/ceph/ceph.conf rbd_user=cinder rbd_secret_uuid=bb90381e-a4c5-4db7-b410-3154c4af486e [root@os-node1 ~(kevstone admin)]#
-
Перезапустите службы OpenStack Nova:
# service openstack-nova-compute restart
-
Для загрузки виртуальной машины из Ceph формат образа Glance должен быть RAW. Мы воспользуемся тем же образом
cirros
, который мы загружали ранее в этой главе и конвертируем этот образ из QCOW в формат RAW (это существенно). Вы также можете использовать любой другой образ если он в формате RAW:# qemu-img convert -f qcow2 -O raw cirros-0.3.1-x86_64-disk.img cirros-0.3.1-x86_64-disk.raw [root@os-node1 ~(keystone_admin)]# qemu-img convert -f qcow2 -0 raw cirros-0.3.1-x86_64-disk.img cirros-0.3.1-x86_64-disk.raw [root@os-node1 ~(keystone_admin)]# [root@os-node1 ~(keystone_admin)]# is -la cirros-0.3.1-x86_64-disk.raw -rw-r--r-- 1 root root 41126400 Apr 3 22:19 cirros-0.3.1-x86_64-disk.raw [root@os-node1 ~(keystone admin)]# file cirros-0.3.1-x86_64-disk.raw cirros-0.3.1-x86_64-disk.raw: x86 boot sector; GRand Unified Bootloader, stagel version 0x3, stage2 address 0x2000, stage2 segment 0x200; partition 1: ID=0x83, active, starthead 0, startsector 16065, 64260 sectors, code offset 0x48 [root@os-node1 ~(keystone_admin)]#
-
Создайте образ Glance при помощи образа RAW:
# glance image-create --name cirros_raw_image --is-public=true --disk-format=raw --container-format=bare < cirros-0.3.1-x86_64-disk.raw
-
Создайте загружаемый том для проверки функциональности загрузки с вашего тома Ceph:
# nova image-list # cinder create --image-id ff8d9729-5505-4d2a-94ad-7154c6085c97 --display-name cirros-ceph-boot-volume 1 [root@os-node1 ~(keystoneadmin)]# nova image-list +--------------------------------------+------------------+--------+--------+ | ID | Name | Status | Server | +--------------------------------------+------------------+--------+--------+ | 5c261af7-9388-44ad-a8ce-f9ebdad2e5cb | cirros | ACTIVE | | | b2d15e34-7712-4f1d-b48d-48b924e79b0C | cirros_image | ACTIVE | | | ff8O9729-5505-4d2a-94ad-7154c6085c97 | cirros_raw_image | ACTIVE | | +--------------------------------------+------------------+--------+--------+ [root@os-node1 ~(keystone_admin)]# [root@os-node1 ~(keystone_admin)]# cinder create --image-id ff8d9729-5505-4d2a-94ad-7154c6085c97 --display-name cirros-ceph-boot-volume 1 +---------------------+--------------------------------------+ | Property | Value | +---------------------+--------------------------------------+ | attachments | [] | | availability_zone | nova | | bootable | false | | created_at | 2015-04-03T22:47:52.638434 | | display_description | None | | display_name | cirros-ceph-boot-volume | | encrypted | False | | id | 3a0da68c-d00c-459f-8b52-88c45d6e3bfe | | image_id | ff8d9729-5505-4d2a-94ad-7154c6085c97 | | metadata | {} | | size | 1 | | snapshot_id | None | | source_volid | None | | status | creating | | volume_type | None | +---------------------+--------------------------------------+ [root@os-node1 ~(keystone_admin)]#
-
Выведите перечень томов Cinder для проверки того что поле
bootable
установлено в значениеtrue
:# cinder list [root@os-node1 ~(keystone_admin)]# cinder list +--------------------------------------+-----------+-------------------------+------+-------------+----------+--------------------------------------+ | ID | Status | Display Name | Size | Volume Type | Bootable | Attached to | +--------------------------------------+-----------+-------------------------+------+-------------+----------+--------------------------------------+ | 1337c866-6ff7-4a56-bfe5-b0b80abcb281 | in-use | ceph-volume01 | 2 | None | false | 1cadffc0-58b0-43fd-acc4-33764a02a0a6 | | 3a0da68c-d00c-459f-8b52-88c45d6e3bfe | available | cirros-ceph-boot-volume | 1 | None | true | | | 67d76db0-f808-40d8-819b-0f0302df74a0 | available | ceph-volume02 | 1 | None | false | | +--------------------------------------+-----------+-------------------------+------+-------------+----------+--------------------------------------+ [root@os-node1 ~(keystone_admin)]#
-
Теперь у нас есть сохранённый в Ceph загружаемый том, следовательно мы можем запустить сэтого тома экземпляр:
# nova boot --flavor 1 --block_device_mapping vda=fd56314be19b-4129-af77-e6adf229c536::0 --image 964bd077-7b43-46eb-8fe1-cd979a3370df vm2_on_ceph --block_device_mapping vda = <cinder bootable volume id > --image = <Glance image associated with the bootable volume>
-
Наконец, проверьте состояние экземпляра:
nova list [root@os-node1 ~(keystone_admin)]# nova list +--------------------------------------+--------------+---------+------------+-------------+---------------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+--------------+---------+------------+-------------+---------------------+ | 1cadffc0-58b0-43fd-acc4-33764a02a0a6 | vm1 | SHUTOFF | - | Shutdown | public=172.24.4.229 | | 2b35870e-9f7e-4e5f-bd12-9a625797355d | vm2_01n_ceph | ACTIVE | - | Running | public=172.24.4.233 | +--------------------------------------+--------------+---------+------------+-------------+---------------------+ [root@os-node1 ~(kevstone_admin)]#
-
На данный момент у нас выполняющийся с тома Ceph имеется экземпляр. Попытайтесь зарегистрироваться из инструментальной панели Horizon: