Ceph в ProxMox на ZFS

в 8:53, , рубрики: ceph, linux, proxmox, zfs, виртуализация, ит-инфраструктура, Серверное администрирование, хранилища данных

В своей работе (системный администратор) приходится всегда искать вещи и знания, уникальные для своего региона. Одной из таких вещей в нашей конторе является ProxMox, поставленный на файловой системе ZFS, позволяющей использовать неплохой raid массив без использования железных контроллеров. Однажды, думая, чем можно еще удивить и порадовать клиентов, мы решили всё это водрузить на распределенную файловую систему Ceph. Не знаю уж, насколько было такое решение адекватным, но я решил воплотить желание в жизнь. И тут понеслась… Я перелопатил горы статей и форумов, но так и не нашел одного адекватного мануала, описывающего в подробностях что и как делать, поэтому, справившись со всем, родилась эта статья, кому интересно, добро пожаловать под кат.

image

Итак, в принципе, всё делается в консоли и веб-морда ProxMox нам особо не нужна. Делал я всё в тестовом режиме, поэтому было поднято две виртуалки с четырьмя дисками внутри не очень мощного по железу проксмокса (этакая матрёшка). Четыре диска изначально были обусловлены тем, что хотелось поднять, как и на будущем уже не тестовом железе, на ZFS10, но не вышла золотая рыбка по неведомым мне причинам (на самом деле, было лень разбираться). Вышло так, что ProxMox не смог разметить ZFS10 на виртуальных дисках, поэтому было решено использовать немного другую “географию”. На одном из дисков ставился собственно сам ProxMox, на двух других поднимался ZFS1, третий был якобы под журнал Ceph, но я в итоге про него забыл, поэтому пока оставим его в покое. Итак, приступим.

Тут будет небольшая вводная:

Проксмокс у нас свежеустановленный в двух местах. Ноды называются ceph1 и ceph2. Делаем на обеих нодах всё одинаково, кроме тех мест, что я обозначу. Сеть у нас 192.168.111.0/24. Первая нода (ceph1) имеет адрес 192.168.111.1, вторая (ceph2) — 192.168.111.2. Диски на обеих нодам имеют следующие значения: /dev/vda — диск, на котором стоит ProxMox, /dev/vdb и /dev/vdc — диски, предназначенные для ZFS, /dev/vdd — диск для журнала Ceph.

Первое, что нам нужно сделать, это поменять платный репозиторий ProxMox, требующий подписки, на бесплатный:

nano /etc/apt/sources.list.d/pve-enterprise.list

Там комментируем единственную строку и вписываем новую ниже:

deb http://download.proxmox.com/debian jessie pve-no-subscription

Далее обновляем наш ProxMox:

apt update && apt dist-upgrade

Устанавливаем пакеты для работы с Ceph:

pveceph install -version hammer

Следующим шагом нам нужно сделать кластер из проксмоксов.

На первой ноде выполняем последовательно:

pvecm create mycluster

где mycluster — это имя нашего кластера.

На второй ноде:

pvecm add 192.168.111.1

Соглашаемся с тем, что нужно принять ssh ключ и вводим пароль root от первой ноды.

Проверяем всё это дело командой pvecm status

Далее инициализуруем конфигурацию Ceph (делается только на первой ноде, которая будет “главной”):

pveceph init --network 192.168.111.0/24

это создаст нам симлинк на /etc/ceph/ceph.conf, от которого мы будем далее отталкиваться.

Сразу после этого нам надо добавить туда опцию в раздел [osd]:

[osd]
    journal dio = false

Это связано с тем, что ZFS не умеет directIO.

Следующее, чем делаем, это готовим наш ZFS пул. Для этого диски нужно разметить в GPT:

fdisk /dev/vdb

Там последовательно нажимаем g и w (g для создания таблицы GPT и w для принятия изменений). То же самое повторяем на /dev/vdc.

Создаем зеркальный ZFS пул, называться он у нас будет как принято в ProxMox – rpool:

zpool create rpool mirror /dev/vdb /dev/vdc

Проверим командой zpool status -v и получим (по крайней мере должны):

pool: rpool
state: ONLINE
scan: none requested
config:
    NAME    STATE               READ    WRITE   CKSUM
    rpool   ONLINE              0       0       0
        mirror-0    ONLINE          0       0       0
            vdb     ONLINE      0       0       0
            vdc     ONLINE      0       0       0
errors: No known data errors

ZFS пул у нас создан, пришло самое время заняться самым главным — ceph.

Создадим файловую систему (странное название, но оно взято с доки по ZFS) для нашего монитора Ceph:

zfs create -o mountpoint=/var/lib/ceph/mon rpool/ceph-monfs

Создадим сам монитор (сначала на первой ноде, потом на второй):

pveceph createmon

Далее начинается то, с чем пришлось повозиться, а именно то, как сделать блочное устройство для Ceph OSD (а он именно с ними и работает) в ZFS и чтобы оно еще и работало.

А делается всё просто — через zvol:

zfs create -V 90G rpool/ceph-osdfs 

90G — это то, сколько мы отдаем нашему Ceph на растерзание. Так мало потому, что сервер виртуальный и больше 100G я ему не давал.

Ну и сделаем сам Ceph OSD:

ceph-disk prepare --zap-disk --fs-type xfs --cluster ceph --cluster-uuid FSID /dev/zd0

--fs-type у нас выбран XFS потому, что XFS — это дефолтная ФС у Ceph. FSID — это ID нашего Ceph, который можно подсмотреть в /etc/ceph/ceph.conf. Ну, и /dev/zd0 — это наш zvol.

Если после этого у вас df -h не покажет примерно такое:

/dev/zd0p1         85G   35M   85G   1% /var/lib/ceph/osd/ceph-0

значит что-то пошло не так и вам либо нужно перезагрузиться, либо ещё раз нужно выполнить создание ceph OSD.

В общем то, на этом мы уже сделали наш ceph и можно дальше им рулить уже в вебморде ProxMox и создать на нем нужное RDB хранилище, но вы не сможете его использовать (собственно, ради чего всё это затевалось). Лечится простым способом (для этого всё-таки хранилище надо создать) — нужно скопировать ключ ceph с первой ноды во вторую.

Открываем конфиг хранилищ ProxMox:

nano /etc/pve/storage.cfg 

И вписываем туда нужный нам RBD:

rbd: test
    monhost 192.168.111.1:6789;192.168.111.2:6789
    pool rbd
    krbd 1
    username admin
    content images

Здесь test — это имя нашего хранилища, а IP адреса — это то, где находятся ceph мониторы, то есть наши проксмоксы. Остальные опции дефолтные.

Дальше создаем папочку для ключа на второй ноде:

mkdir /etc/pve/priv/ceph

И копируем ключ с первой:

scp ceph1:/etc/ceph/ceph.client.admin.keyring /etc/pve/priv/ceph/test.keyring

Здесь ceph1 — наша первая нода, а test — имя хранилища.

На этом можно ставить точку — хранилище активно и работает, можем пользоваться всеми плюшками ceph.

Спасибо за внимание!

Для того, чтобы всё это поднять, пользовался данными ссылками:

» https://pve.proxmox.com/wiki/Storage:_Ceph
» https://pve.proxmox.com/wiki/Ceph_Server
» http://xgu.ru/wiki/ZFS
» https://forum.proxmox.com

Автор: vankosa

Источник

Поделиться

* - обязательные к заполнению поля