Download PDF
Download page Хранилища Ceph.
Хранилища Ceph
Особенности использования хранилища Ceph в ПК СВ
Ceph – распределенная объектная сеть хранения, обеспечивающая файловый и блочный интерфейсы доступа. Она может использоваться на системах, состоящих как из нескольких серверов, так и из тысяч узлов, образовывающих кластер. Встроенные механизмы продублированной репликации данных обеспечивают высокую отказоустойчивость системы. При добавлении или удалении новых узлов кластера массив данных автоматически балансируется с учетом внесенных изменений. В Ceph обработка данных и метаданных разделена на различные группы узлов в кластере.
Дополнительная информация
Образы и диски виртуальных машин хранятся в одном Ceph-пуле. Каждый образ в пуле имеет наименование вида: one-<идентификатор_образа>
. Виртуальные машины будут использовать RBD-тома для своих дисков, если образы помечены как "постоянные
". В противном случае создаются новые снимки состояний образа с наименованием вида:one-<идентификатор_образа>-<идентификатор_ВМ>-<идентификатор_диска_ВМ>
.
В ПК СВ можно добавить дополнительные хранилища образов и системные хранилища, указав другие пулы с отличными от хранилища Ceph политиками распределения ресурсов/репликации.
Кроме того, допускается совместная работа хранилища образов, построенного на базе Ceph, и системного хранилища, построенного на базе файловой технологии хранения. При этом в качестве драйвера передачи данных между хранилищем образов и системным хранилищем используется метод совместной передачи (shared) – см. Хранилища на базе файловой технологии хранения. В этом случае энергозависимые диски и диски подкачки создаются в виде обычных файлов в системном хранилище. А также кроме Ceph-кластера необходимо выполнить установку и настройку распределенной файловой системы, например NFS.
Создание и настройка системы хранения
Пример развертывания Ceph-кластера с помощью инструмента командной строки ceph-deploy
Инструмент командной строки ceph-deploy
обеспечивает быстрый способ развертывания Ceph-кластера без тонкой настройки, используя инструменты ssh
, sudo
и Python
версии 2.x.
Исходные данные
В данном разделе описан возможный вариант развертывания Ceph-кластера, состоящего 3 узлов:
storage1
;storage2;
storage3
.
и административной рабочей станции arm
.
Предполагается, что перед началом развертывания Ceph на узлах storage1
, storage2
и storage3
выполнены следующие действия:
- установлена операционная система специального назначения «Astra Linux Special Edition» РУСБ.10015-01 с оперативным обновлением 1.7.4 (далее по тексту – Astra Linux);
- узлам назначен фиксированный IP-адрес, в качестве сервера DNS указан IP-адрес административной рабочей станции
arm
; - настроена служба синхронизации времени. В качестве сервера единого сетевого времени выступает административная рабочая станция
arm
; - настроен доступ к репозиторию Astra Linux.
В составе каждого из узлов Ceph-кластера имеются два жестких диска:
/dev/sda
– для размещения файлов Astra Linux;/dev/sdb
– для размещения данных хранилища.
На узлах Ceph-кластера будут развернуты:
- служба монитора (MON);
- служба хранилища данных (OSD).
Использованная конфигурация предназначена только для ознакомления и тестирования Ceph. При развертывании рабочей системы на объекте не рекомендуется размещать монитор и OSD на одном узле.
Кроме того, на узле storage1
будет запущена служба ceph-mgr
(служба диспетчера Ceph).
Развертывание Ceph-кластера будет выполняется на административной рабочей станции arm
от имени пользователя с ролью администратора Ceph-кластера.
Для удобства развертывания, на административной рабочей станции arm
в файле /etc/hosts
указаны короткие имена административной рабочей станции и узлов кластера.
Подготовка к развертыванию Ceph-кластера
Перед началом развертывания на всех узлах Ceph-кластера и на административной рабочей станции необходимо выполнить действия, описанные ниже.
Установить пакеты
python
иssh
, если он не были ранее установлены:sudo apt install python sshРазрешить автоматический запуск службы
ssh
, выполнив команду:sudo systemctl enable --now sshДальнейшие предварительные действия на узлах кластера при необходимости можно выполнить с рабочей станции, подключаясь через SSH от имени администратора системы.Создать учетную запись пользователя с ролью администратора Ceph-кластера, например,
cephadmin
:sudo adduser cephadminВ результате появится диалог, в котором необходимо задать пароль пользователя и ввести дополнительную информацию. По окончании диалога необходимо ответить "y" ("Да").Предоставить созданной учетной записи пользователя
cephadmin
возможность использовать привилегии суперпользователя (sudo) без запроса пароля, последовательно выполнив следующие команды:echo "cephadmin ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadmin
sudo chmod 0440 /etc/sudoers.d/cephadminЗадать высокий уровень целостности для созданного пользователя
cephadmin
:sudo pdpl-user -i 63 cephadminЕсли в качестве узла Ceph-кластера выступает компьютер с установленной службой сервера виртуализации (гиперконвергентный сценарий развертывания), то для пользователя
cephadmin
необходимо задать уровень целостности равный 127.
Развертывание Ceph-кластера
Развертывание Ceph-кластера с помощью инструмента командной строки ceph-deploy
выполняется на административной рабочей станции (arm
) от имени пользователя с ролью администратора Ceph-кластера (cephadmin
).
ceph-deploy
от имени суперпользователя (с sudo
или же от имени пользователя root
).
Для развертывания Ceph-кластера необходимо выполнить действия, описанные ниже.
Сгенерировать ssh-ключи (публичный и приватный) командой:
ssh-keygenСкопировать публичный ключ на все узлы кластера, например, командой:
for N in $(seq 1 3); do ssh-copy-id cephadmin@storage$N; doneВ ходе выполнения команд для каждого узла кластера необходимо ответить "y" ("Да") и указать пароль пользователяcephadmin
.Скопировать ssh-ключ для беспарольного доступа к самой административной станции:
ssh-copy-id cephadmin@armУстановить инструмент командной строки
ceph-deploy
:sudo apt install ceph-deployУстановить базовые компоненты Ceph на узлах кластера. Для этого на сервере управления выполнить команду:
ceph-deploy --username cephadmin install --mon --osd storage1 storage2 storage3Параметры--mon
и--osd
определяют компоненты Ceph, необходимые для установки. Если эти параметры не указаны, будут установлены все компоненты Ceph.Перезагрузить узлы кластера, например, командой:
for N in $(seq 1 3); do ssh cephadmin@storage$N sudo reboot; doneУстановить на узле
storage1
дополнительный компонентceph-mgr
(служба диспетчера Ceph). Для этого на административной рабочей станции выполнить команду:ceph-deploy --username cephadmin install --mgr storage1Создать новый кластер Ceph, указав в команде узлы кластера, на которых в дальнейшем будут инициализированы первоначальные мониторы:
ceph-deploy --username cephadmin new storage1 storage2 storage3После выполнения команды в домашнем каталоге пользователяcephadmin
будут созданы конфигурационный файлceph.conf
и keyring-файл мониторов.Инициализировать мониторы на ранее указанных узлах кластера выполнив команду:
ceph-deploy --username cephadmin mon create-initialЗарегистрировать службу диспетчера Ceph на узле
storage1
. Для этого на административной рабочей станции выполнить команду:ceph-deploy --username cephadmin mgr create storage1Создать OSD на дисках /dev/sdb узлов кластера и добавить их в кластер используя команды:
ceph-deploy --username cephadmin osd create --data /dev/sdb storage1
ceph-deploy --username cephadmin osd create --data /dev/sdb storage2
ceph-deploy --username cephadmin osd create --data /dev/sdb storage3Установить клиентские инструментальные средства Ceph на административную рабочую станцию
arm
:ceph-deploy --username cephadmin install --cli armУказать, что в качестве административной будет выступать рабочая станция
arm
:ceph-deploy admin armПосле завершения развертывания кластера Ceph проверить его состояние можно используя команду:
sudo ceph -sПример вывода после выполнения команды:cluster: id: 8ecf49d8-b926-4096-8429-3e39502a6dca health: HEALTH_WARN mons are allowing insecure global_id reclaim services: mon: 3 daemons, quorum storage1,storage2,storage3 (age 24m) mgr: storage1(active, since 19m) osd: 3 osds: 3 up (since 16m), 3 in (since 16m) data: pools: 1 pools, 1 pgs objects: 0 objects, 0 B usage: 15 MiB used, 72 GiB / 72 GiB avail pgs: 1 active+clean
CODEСообщение вида:
mons are allowing insecure global_id reclaim
CODEможно игнорировать (это предупреждение о возможной эксплуатации уязвимости). Чтобы исключить вывод этого предупреждения необходимо:
выполнить команду:
sudo ceph config set mon auth_allow_insecure_global_id_reclaim falseперезагрузить службу Ceph командой:
sudo systemctl restart ceph.target
Дополнительная настройка Ceph-кластера для использования в ПК СВ
Дополнительно на административной рабочей станции от имени пользователя с ролью администратора Ceph-кластера необходимо выполнить действия, описанные ниже.
Распределить конфигурационные файлы на узлы Ceph-кластера, например, с использованием инструмента командной строки
ceph-deploy
:ceph-deploy --username <администратор_Ceph-кластера> config push <узел_кластера-1> <узел_кластера-2> ... <узел_кластера-N>
Пример команды для Ceph-кластера, развертывание которого описано в подразделе Пример развертывания Ceph-кластера с помощью инструмента командной строки ceph-deploy.
ceph-deploy --username cephadmin config push storage1 storage2 storage3Создать пул для хранилищ ПК СВ, указав наименование пула
one
:sudo ceph osd pool create one <количество_групп>где <количество_групп> – количество групп в пуле, которое определяется по следующей формуле: ((Общее количество OSD * 100) / Уровень репликации) с округлением до ближайшей степени 2 в сторону увеличения.Пример
В случае для трех узлов Ceph-кластера:
(3 OSD * 100) / 3 = 100 (округляется до 128)
Таким образом, количество групп в пуле должно быть равным 128.
Пример вывода после успешного выполнения команды:
pool 'one' created
CODEНастроить пул
"one"
на работу с RBD:sudo ceph osd pool application enable one rbdПример вывода после успешного выполнения команды:enabled application 'rbd' on pool 'one'
CODEСоздать Ceph-пользователя, который будет иметь доступ к пулу хранилищ. Данный пользователь будет также использоваться службой
libvirt
для доступа к образам дисков. Для того чтобы создать пользователя, например, с именемlibvirt
, необходимо выполнить команду:sudo ceph auth get-or-create client.libvirt mon 'profile rbd' osd 'profile rbd pool=one'Пример вывода после успешного выполнения команды:[client.libvirt] key = AQAS8hJkyaa9FxAAnRqI2RTD1nqmOcJLxPRWNg==
CODEПрефикс
client
означает, что команда выполняется в отношении логической сущности "пользователь".Получить копию ключа Ceph-пользователя для последующей настройки службы сервера виртуализации:
sudo ceph auth get-key client.libvirt | tee client.libvirt.keyПример вывода после успешного выполнения команды:AQAS8hJkyaa9FxAAnRqI2RTD1nqmOcJLxPRWNg==
CODEЭкспортировать набор ключей Ceph-пользователя в файл
ceph.client.libvirt.keyring
:sudo ceph auth get client.libvirt -o ceph.client.libvirt.keyringПример вывода после успешного выполнения команды:exported keyring for client.libvirt
CODE
Настройка сервера управления для работы с Ceph-кластером
Для сервера управления не требуется специальная настройка. Сервер управления будет выполнять доступ к Ceph-кластеру через серверы виртуализации, настроенные на использование Ceph-кластера (параметр BRIDGE_LIST, который указывается при регистрации хранилища).
Настройка сервера виртуализации для работы с Ceph-кластером
Для использования Ceph-кластера на административной рабочей станции от имени пользователя с ролью администратора Ceph-кластера необходимо выполнить действия, описанные ниже.
Cкопировать набор ключей Ceph-пользователя (в рассматриваемом примере –
ceph.client.libvirt.keyring
) на все серверы виртуализации в каталог/etc/ceph
:где:scp ceph.client.libvirt.keyring <администратор>@<узел_виртуализации>:/tmp
ceph-deploy --username <администратор> install --cli <узел_виртуализации>
ceph-deploy --username <администратор> admin <узел_виртуализации>
ceph-deploy --username <администратор> config push <узел_виртуализации>
ssh <администратор>@<узел_виртуализации> "sudo mv /tmp/ceph.client.libvirt.keyring /etc/ceph"
- <администратор> – учетная запись локального администратора сервера, на котором развернута служба сервера виртуализации;
- <узел_виртуализации> – сетевое имя или IP-адрес сервера, на котором развернута служба сервера виртуализации.
Cкопировать ключ Ceph-пользователя (в рассматриваемом примере
client.libvirt.key
) на все серверы виртуализации в каталог в каталог/var/lib/one
:scp client.libvirt.key <администратор>@<узел_виртуализации>:/tmpгде:
ssh <администратор>@<узел_виртуализации> "sudo mv /tmp/client.libvirt.key /var/lib/one"<администратор>
– учетная запись локального администратора сервера, на котором развернута служба сервера виртуализации;<узел_виртуализации>
– сетевое имя или IP-адрес сервера, на котором развернута служба сервера виртуализации.
Cгенерировать универсальный уникальный идентификатор (UUID) и сохранить его в файл
secret.xml
:sudo apt install uuid-runtime
UUID=$(uuidgen)
cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
<uuid>$UUID</uuid>
<usage type='ceph'>
<name>client.libvirt secret</name>
</usage>
</secret>
EOFCкопировать файл
secret.xml
на все серверы виртуализации в каталог/var/lib/one/
:scp secret.xml <администратор>@<узел_виртуализации>:/tmpгде:
ssh <администратор>@<узел_виртуализации> "sudo mv /tmp/secret.xml /var/lib/one/"<администратор>
– учетная запись локального администратора сервера, на котором развернута служба сервера виртуализации;<узел_виртуализации>
– сетевое имя или IP-адрес сервера, на котором развернута служба сервера виртуализации.
На всех серверах виртуализации задать секретный ключ службы
libvirt
, используя файлsecret.xml
:ssh <администратор>@<узел_виртуализации> "sudo virsh -c qemu:///system secret-define /var/lib/one/secret.xml"Пример вывода после успешного выполнения команды:Секрет c84b8321-6d49-4b43-8d1b-0efc1686edc4 создан
CODEНа всех серверах виртуализации связать секретный ключ службы
libvirt
и ключ Ceph-пользователя:ssh <администратор>@<узел_виртуализации> "sudo virsh -c qemu:///system secret-set-value --secret $UUID --file /var/lib/one/client.libvirt.key"Пример вывода после успешного выполнения команды:
Значение установлено
CODEУбедиться в том, что Ceph-пользователь (с наименованием
libvirt
) имеет корректные настройки на сервере виртуализации, выполнив команду:ssh <администратор>@<узел_виртуализации> "sudo rbd ls -p one --id libvirt"результатом выполнения команды должен быть пустой вывод без ошибок.Убедиться в том, что на узлах выделено достаточно места для хранения вспомогательных файлов виртуальных машин, таких как context-диски, файлы развертывания и файлы контрольной точки.
- В файле
/etc/hosts
указать короткие имена административной рабочей станции и узлов кластера.
Регистрация хранилищ
Параметры хранилищ
Для использования Ceph-кластера в качестве хранилища необходимо зарегистрировать системное хранилище и хранилище образов. Оба хранилища совместно используют одни и те же параметры конфигурации, приведенные в таблице ниже, и Ceph-пул.
Общие параметры конфигурации, используемые при регистрации хранилища, построенного на базе технологии Ceph:
Параметр | Описание | Обязательный |
---|---|---|
NAME | Имя хранилища | ДА |
POOL_NAME | Имя Ceph-пула | ДА |
CEPH_USER | Имя Ceph-пользователя, используемое службами libvirt и rbd | ДА |
CEPH_KEY | Полный путь файла секретного ключа для пользователя, если не используется стандартный файл (/var/lib/one/client.libvirt.key ) | НЕТ |
CEPH_CONF | Нестандартный конфигурационный файл Ceph, если необходим | НЕТ |
RBD_FORMAT | формат RBD (по умолчанию будет использоваться RBD формата 2) | НЕТ |
BRIDGE_LIST | Разделенный пробелами список серверов виртуализации, настроенных на использование Ceph-кластера | ДА |
CEPH_HOST | Разделенный пробелами список узлов Ceph-кластера, с инициированным службой монитора (MON) | ДА |
CEPH_SECRET | Универсальный уникальный идентификатор (UUID) секретного ключа libvirt | ДА |
Значение UUID можно скопировать из файла /var/lib/one/secret.xml
на сервере управления.
При регистрации системного хранилища дополнительно к общим параметрам, устанавливаются значения следующих параметров:
Параметр | Значение | Обязательный |
---|---|---|
TYPE | SYSTEM_DS | ДА |
TM_MAD | ceph | ДА |
При регистрации хранилища образов дополнительно к общим параметрам, устанавливаются значения следующих параметров:
Параметр | Значение | Обязательный |
---|---|---|
TYPE | IMAGE_DS | ДА |
DS_MAD | ceph | ДА |
TM_MAD | ceph | ДА |
DISK_TYPE | RBD | ДА |
Регистрация хранилищ в интерфейсе командной строки
Регистрация системного хранилища
Для регистрации хранилища используется следующая команда:
Пример
Регистрация системного хранилища на базе Ceph-кластера, развертывание которого описано в подразделе Пример развертывания Ceph-кластера с помощью инструмента командной строки ceph-deploy.
Создать файл
systemds.txt
следующего содержания:NAME = ceph_system POOL_NAME = one CEPH_USER = libvirt BRIDGE_LIST = "oneserver" CEPH_HOST = "storage1 storage2 storage3" CEPH_SECRET = "c84b8321-6d49-4b43-8d1b-0efc1686edc4" TYPE = SYSTEM_DS TM_MAD = ceph
CODEВыполнить команду:
onedatastore create systemds.txtПосле выполнения команды будет выведен идентификатор созданного хранилища, например:ID: 100
CODE
Регистрация хранилища образов
Для регистрации хранилища используется следующая команда:
Пример
Пример для Ceph-кластера, развертывание которого описано в подразделе Пример развертывания Ceph-кластера с помощью инструмента командной строки ceph-deploy. Регистрация хранилища образов с использованием конфигурационного файла:
Создать файл
imageds.txt
следующего содержания:NAME = "ceph_images" POOL_NAME = one CEPH_USER = libvirt BRIDGE_LIST = "oneserver" CEPH_HOST = "storage1 storage2 storage3" CEPH_SECRET = "c84b8321-6d49-4b43-8d1b-0efc1686edc4" TYPE = IMAGE_DS DS_MAD = ceph TM_MAD = ceph DISK_TYPE = RBD
CODEВыполнить команду:
onedatastore create imageds.txtПосле выполнения команды будет выведен идентификатор созданного хранилища, например:ID: 101
CODE
Регистрация хранилищ в веб-интерфейсе ПК СВ
Регистрация системного хранилища
- В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
- На открывшейся странице Создать хранилище зарегистрировать хранилище одним из способов:
- во вкладке Расширенный указать непосредственно значения параметров хранилища;
- во вкладке Мастер настройки:
- в поле Название задать наименование хранилища;
- в выпадающем списке Тип хранилища выбрать значение Ceph;
- установить флаг Система;
- прокрутить страницу Создать хранилище ниже;
- в поле Список мостов на узле через пробел перечислить серверы виртуализации, настроенные на использование Ceph-кластера;
- в поле Пул Ceph для хранения образов ввести наименование пула, созданного для хранилища;
- в поле Пользователь Ceph ввести имя Ceph-пользователя;
- в поле Узел Ceph через пробел перечислить узлы кластера Ceph, на которых инициирована служба монитора (MON);
в поле Ceph секрет ввести значение универсального уникального идентификатора (UUID).
Значение UUID можно скопировать из файла/var/lib/one/secret.xml
.Пример для Ceph-кластера, развертывание которого описано в подразделе Пример развертывания Ceph-кластера с помощью инструмента командной строки ceph-deploy.
- во вкладке Расширенный указать непосредственно значения параметров хранилища;
- На странице Создать хранилище нажать на кнопку [Создать].
- Дождаться когда на странице Хранилища для созданного хранилища отобразить актуальный размер.
В представленном примере системному хранилищуceph_system
присвоен идентификатор 100.
Регистрация хранилища образов
- В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
- На открывшейся странице Создать хранилище зарегистрировать хранилище одним из способов:
- во вкладке Расширенный указать непосредственно значения параметров хранилища;
- во вкладке Мастер настройки:
- в поле Название задать наименование хранилища;
- в выпадающем списке Тип хранилища выбрать значение Ceph;
- установить флаг Образы;
- прокрутить страницу Создать хранилище ниже;
- в поле Список мостов на узле через пробел перечислить серверы виртуализации, настроенные на использование Ceph-кластера;
- в поле Пул Ceph для хранения образов ввести наименование пула, созданного для хранилища;
- в поле Пользователь Ceph ввести имя Ceph-пользователя;
- в поле Узел Ceph через пробел перечислить узлы кластера Ceph, на которых инициирована служба монитора (MON);
в поле Ceph секрет ввести значение универсального уникального идентификатора (UUID).
Значение UUID можно скопировать из файла/var/lib/one/secret.xml
.Пример для Ceph-кластера, развертывание которого описано в подразделе Пример развертывания Ceph-кластера с помощью инструмента командной строки ceph-deploy.
- во вкладке Расширенный указать непосредственно значения параметров хранилища;
- На странице Создать хранилище нажать на кнопку [Создать].
- Дождаться когда на странице Хранилища для созданного хранилища отобразить актуальный размер.
В представленном примере хранилищу образовceph_images
присвоен идентификатор 101.