Хранилища Ceph#

Особенности использования хранилища Ceph#

Ceph — распределенная объектная сеть хранения, обеспечивающая файловый и блочный интерфейсы доступа. Она может использоваться на системах, состоящих как из нескольких серверов, так и из тысяч узлов, образовывающих кластер. Встроенные механизмы продублированной репликации данных обеспечивают высокую отказоустойчивость системы. При добавлении или удалении новых узлов кластера массив данных автоматически балансируется с учетом внесенных изменений. В Ceph обработка данных и метаданных разделена на различные группы узлов в кластере.

Образы и диски виртуальных машин хранятся в одном Ceph-пуле. Каждый образ имеет в пуле имя вида: one-<идентификатор_образа>. Виртуальные машины будут использовать RBD-тома для своих дисков если образы помечены как постоянный, в противном случае создаются новые снапшоты образа с наименованием вида:

one-<идентификатор_образа>-<идентификатор_ВМ>-<идентификатор_диска_ВМ>.

Допускается совместная работа хранилища образов, построенного на базе Ceph, и системного хранилища, построенного на базе файловой технологии хранения. При этом в качестве драйвера передачи данных между хранилищем образов и системным хранилищем используется метод совместной передачи (shared). В этом случае энергозависимые диски и диски подкачки создаются в виде обычных файлов в системном хранилище. А также кроме Ceph-кластера необходимо выполнить установку и настройку распределенной файловой системы, например, NFS.

Предупреждение

Для использования хранилища Ceph необходимо, чтобы серверы виртуализации являлись Ceph-клиентами работающего Ceph-кластера.

Дополнительная настройка Ceph-кластера для использования в ПВ#

Предупреждение

Действия по настройке Ceph-кластера выполняются в ОС СН под учетной записью администратора ОС СН с высоким уровнем целостности.

Предварительно должен быть развернут Ceph-кластер.

Дополнительно на административной рабочей станции от имени учетной записи администратора Ceph-кластера необходимо выполнить следующие настройки:

  1. Распределить конфигурационные файлы на узлы Ceph-кластера, например, с использованием инструмента командной строки ceph-deploy:

ceph-deploy --username <администратор_Ceph-кластера> config push <узел_кластера-1> <узел_кластера-2> ... <узел_кластера-N>
  1. Создать пул для хранилищ, в качестве наименование пула указав one:

ceph osd pool create one <количество_групп>

где <количество_групп> — количество групп в пуле, которое определяется по следующей формуле: ((Общее количество OSD * 100) / Уровень репликации) с округлением до ближайшей степени 2 в сторону увеличения.

Примечание

Пример

В случае для 3 узлов ceph:

(3 OSD * 100) / 3 = 100 (округляется до 128)

Таким образом, количество групп в пуле должно быть равным 128.

  1. Вывести перечень пулов командой:

sudo ceph osd lspools

Пример вывода после выполнения команды:

1 device_health_metrics
2 one
  1. Настроить пул one на работу с RBD:

sudo ceph osd pool application enable one rbd

Пример вывода после успешного выполнения команды:

enabled application ’rbd’ on pool ’one’
  1. Создать Ceph-пользователя, который будет иметь доступ к пулу хранилищ. Данный пользователь будет также использоваться службой libvirt для доступа к образам дисков. Пример создания пользователя с именем libvirt:

sudo ceph auth get-or-create client.libvirt \ mon ’profile rbd’ osd ’profile rbd pool=one’

Пример вывода после успешного выполнения команды:

[client.libvirt] key = AQAS8hJkyaa9FxAAnRqI2RTD1nqmOcJLxPRWNg==

Примечание

Префикс client означает, что команда выполняется в отношении логической сущности «пользователь».

  1. Получить копию ключа Ceph-пользователя для ее дальнейшей передачи на серверы виртуализации. Пример команды для пользователя с именем libvirt:

sudo ceph auth get-key client.libvirt | tee client.libvirt.key

Пример вывода после успешного выполнения команды:

AQAS8hJkyaa9FxAAnRqI2RTD1nqmOcJLxPRWNg==
  1. Экспортировать набор ключей Ceph-пользователя в файл ceph.client.libvirt.keyring командой:

sudo ceph auth get client.libvirt -o ceph.client.libvirt.keyring

Пример вывода после успешного выполнения команды:

exported keyring for client.libvirt

Настройка сервера управления для работы с Ceph-кластером#

Для сервера управления не требуется специальная настройка. Сервер управления будет выполнять доступ к Ceph-кластеру через серверы виртуализации, настроенные на использование Ceph-кластера (параметр BRIDGE_LIST, который указывается при регистрации хранилища).

Настройка сервера виртуализации для работы с Ceph-кластером#

Предупреждение

Действия по настройке сервера виртуализации выполняются в ОС СН под учетной записью администратора ОС СН с высоким уровнем целостности.

Для настройки сервера виртуализации на использование Ceph-кластера необходимо на административной рабочей станции от имени учетной записи администратора Ceph-кластера выполнить следующие действия:

  1. Установить клиентские инструментальные средства на всех компьютерах, выполняющих функцию сервера виртуализации. Пример команды:

ceph-deploy --username <администратор_Ceph-кластера> \ install --cli <сервер_виртуализации>

где <сервер_виртуализации> — сетевое имя или IP-адрес компьютера, на котором развернута служба сервера виртуализации.

  1. Скопировать ключ Ceph-пользователя, созданного ранее, на все серверы виртуализации в каталог /var/lib/one/. Пример команды:

scp client.libvirt.key <администратор>@<сервер_виртуализации>:/tmp ssh <администратор>@<сервер_виртуализации>  "sudo mv /tmp/client.libvirt.key /var/lib/one"

где <администратор> — учетная запись локального администратора компьютера, на котором развернута служба сервера виртуализации.

  1. Скопировать набор ключей Ceph-пользователя, созданного ранее, на все серверы виртуализации в каталог /etc/ceph/. Пример команды:

scp ceph.client.libvirt.keyring <администратор>@<сервер_виртуализации>:/tmp ssh <администратор>@<сервер_виртуализации> "sudo mv /tmp/ceph.client.libvirt.keyring /etc/ceph"
  1. Сгенерировать универсальный уникальный идентификатор (UUID) и сохранить его в файл secret.xml:

UUID=$(uuidgen) cat > secret.xml <<EOF
<secret ephemeral=’no’ private=’no’>
<uuid>$UUID</uuid>
<usage type=’ceph’>
<name>client.libvirt secret</name>
</usage>
</secret>
EOF
  1. Скопировать файл secret.xml на все серверы виртуализации в каталог /var/lib/one. Пример команды:

scp secret.xml <администратор>@<сервер_виртуализации>:/tmp ssh <администратор>@<сервер_виртуализации> "sudo mv /tmp/secret.xml /var/lib/one"

Примечание

Значение универсального уникального идентификатора (UUID) в дальнейшем потребуется для настройки хранилищ.

  1. Последовательно на всех серверах виртуализации задать закрытый ключ службы libvirt, используя файл secret.xml. Для этого на административной рабочей станции необходимо выполнить команду:

ssh <администратор>@<сервер_виртуализации> "sudo virsh -c qemu:///system secret-define /var/lib/one/secret.xml"

Пример вывода после успешного выполнения команды:

Секрет c84b8321-6d49-4b43-8d1b-0efc1686edc4 создан
  1. Последовательно на всех серверах виртуализации связать закрытый ключ службы libvirt и ключ Ceph-пользователя. Для этого на административной рабочей станции необходимо выполнить команду:

ssh <администратор>@<сервер_виртуализации> "sudo virsh -c qemu:///system secret-set-value --secret $UUID --file /var/lib/one/client.libvirt.key"

Пример вывода после успешного выполнения команды:

Значение установлено
  1. Последовательно на всех серверах виртуализации убедиться в том, что Ceph пользователь (с наименованием libvirt) имеет корректные настройки. Для этого на административной рабочей станции необходимо выполнить команду:

ssh <администратор>@<сервер_виртуализации> "sudo rbd ls -p one --id libvirt"

результатом выполнения команды должен быть пустой вывод без ошибок.

Примечание

После настройки сервера виртуализации необходимо убедиться в том, что на узлах Ceph-кластера выделено достаточно места для хранения вспомогательных файлов виртуальных машин, таких как context-диски, файлы развертывания и файлы контрольной точки.

Регистрация хранилищ#

Предупреждение

Действия по регистрации хранилищ в ПВ выполняются под учетной записью администратора ПВ.

Параметры хранилищ#

Для использования Ceph-кластера в качестве системы хранения необходимо зарегистрировать системное хранилище и хранилище образов. При регистрации этих хранилищ указываются значения общих параметров конфигурации, приведенные в таблице:

Параметр

Описание

Обязательный

NAME

Имя хранилища

ДА

POOL_NAME

Имя Ceph-пула

ДА

CEPH_USER

Имя Ceph-пользователя, используемое службами libvirt и rbd

ДА

CEPH_KEY

Полный путь файла закрытого ключа для пользователя, если не используется стандартный файл (/var/lib/one/client.libvirt.key)

НЕТ

CEPH_CONF

Нестандартный конфигурационный файл Ceph, если необходим

НЕТ

RBD_FORMAT

По умолчанию будет использоваться RBD-формат 2

НЕТ

BRIDGE_LIST

Разделенный пробелами список серверов виртуализации, настроенных на использование Ceph-кластера

ДА

CEPH_HOST

Разделенный пробелами список узлов Ceph-кластера, с инициированной службой монитора (MON)

ДА

CEPH_SECRET

Универсальный уникальный идентификатор (UUID) закрытого ключа libvirt

ДА

А также дополнительные параметры для каждого типа хранилища, представленные в таблицах:

Параметр

Значение

Обязательный

TYPE

SYSTEM_DS

ДА

TM_MAD

ceph

ДА

Параметр

Значение

Обязательный

TYPE

IMAGE_DS

ДА

DS_MAD

ceph

ДА

TM_MAD

ceph

ДА

DISK_TYPE

RBD

ДА

STAGING_DIR

Каталог на компьютере, выполняющем функцию моста для сервера управления, (параметр BRIDGE_LIST) в котором будет временно размещен образ перед передачей его в хранилище. По умолчанию имеет значение /var/tmp

НЕТ

В конфигурационном файле /var/lib/one/remotes/datastore/ceph/ceph.conf могут быть установлены значения по умолчанию для следующих параметров хранилища Ceph:

  • POOL_NAME;

  • STAGING_DIR;

  • RBD_FORMAT.

Регистрация системного хранилища#

Примечание

Пример

Создание хранилища с использованием конфигурационного файла:

  1. Создать файл systemds.txt со следующим содержанием:

NAME = ceph_system
TYPE = SYSTEM_DS
TM_MAD = ceph
POOL_NAME = one
CEPH_USER = libvirt
BRIDGE_LIST = "<сервер_виртуализации-1> <сервер_виртуализации-2> ... <сервер_виртуализации-N>"
CEPH_HOST = "<узел_кластера-1> <узел_кластера-2> ... <узел_кластера-N>"
CEPH_SECRET = "<значение_UUID>"
  1. Выполнить команду:

onedatastore create systemds.txt

Пример вывода после выполнения команды:

ID: 100

Примечание

Также Ceph может работать с системным хранилищем, построенном на базе файловой технологии хранения с использованием метода совместной передачи (shared). В этом случае энергозависимые диски и диски подкачки создаются в виде обычных файлов в системном хранилище. Кроме Ceph-кластера необходимо выполнить установку и настройку распределенной файловой системы, например, NFS.

Регистрация хранилища образов#

Примечание

Пример

Создание хранилища с использованием конфигурационного файла:

  1. создать файл imageds.txt со следующим содержанием:

NAME = "ceph_images"
TYPE = IMAGE_DS
DS_MAD = ceph
TM_MAD = ceph
DISK_TYPE = RBD
POOL_NAME = one
CEPH_USER = libvirt
BRIDGE_LIST = "<сервер_виртуализации-1> <сервер_виртуализации-2> ... <сервер_виртуализации-N>"
CEPH_HOST = "<узел_кластера-1> <узел_кластера-2> ... <узел_кластера-N>"
CEPH_SECRET = "<значение_UUID>"
  1. выполнить команду:

onedatastore create imageds.txt

Пример вывода после выполнения команды:

ID: 101