Когда данных больше, чем может поместиться на одном диске, пора подумать о RAID. В детстве я часто слышал от старших: «однажды RAID уйдет в прошлое, объектные хранилища заполонят мир, а вы даже не знаете, что такое CEPH», так что первое в моей самостоятельной жизни было создать свой собственный кластер.
Целью эксперимента было познакомиться с внутренним устройством ceph и понять сферу его применения.
Насколько оправдано внедрение Ceph в среднем бизнесе и в малом? После нескольких лет эксплуатации и пары необратимых потерь данных возникло понимание тонкостей, что не все так просто.
Особенности CEPH создают препятствия для его широкого внедрения, и из-за них эксперименты зашли в тупик.
Ниже приводится описание всех предпринятых шагов, полученного результата и сделанных выводов.
Если знающие люди поделятся своим опытом и разъяснят некоторые моменты, буду благодарен.
Примечание.
Комментаторы выявили серьезные ошибки в некоторых предположениях, требующие пересмотра всей статьи.
Стратегия CEPH
Кластер CEPH объединяет произвольное количество K дисков произвольного размера и хранит на них данные, дублируя каждый кусок (по умолчанию 4 МБ) заданное число N раз.Рассмотрим простейший случай с двумя одинаковыми дисками.
Из них можно либо собрать RAID 1, либо кластер с N=2 — результат будет тот же.
Если дисков три и они разного размера, то собрать кластер с N=2 несложно: часть данных будет на дисках 1 и 2, часть — на дисках 1 и 3, часть — на 2 и 3, при этом RAID не будет (собрать такой RAID можно, но это будет извращение).
Если дисков еще больше, то можно создать RAID 5; CEPH имеет аналог — Erasure_code, который противоречит ранним концепциям разработчиков, поэтому не рассматривается.
RAID 5 предполагает наличие небольшого количества дисков, все из которых находятся в хорошем состоянии.
Если один выйдет из строя, остальные должны продержаться до замены диска и восстановления на нем данных.
CEPH, при N> =3, поощряет использование старых дисков, в частности, если вы держите несколько хороших дисков для хранения одной копии данных, а остальные две-три копии храните на большом количестве старых дисков, то информация будет безопасно, так как пока новые диски живы - проблем нет, а если один из них сломается, то одновременный выход из строя трех дисков со сроком службы более пяти лет, желательно с разных серверов, крайне маловероятен.
событие.
Есть тонкость в распространении копий.
По умолчанию предполагается, что данные разделены на большее количество (~100 на диск) групп распределения PG, каждая из которых дублируется на несколько дисков.
Допустим, K=6, N=2, тогда при выходе из строя любых двух дисков данные гарантированно будут потеряны, так как по теории вероятностей будет хотя бы один PG, который будет располагаться на этих двух дисках.
А потеря одной группы делает недоступными все данные в пуле.
Если диски разделить на три пары и хранить данные разрешено только на дисках в пределах одной пары, то такое распределение также устойчиво к выходу из строя любого одного диска, но при выходе из строя двух дисков вероятность потери данных невелика.
100%, но всего 3/15, а даже в случае выхода из строя трех дисков - всего 12/20. Следовательно, энтропия в распределении данных не способствует отказоустойчивости.
Также обратите внимание, что для файлового сервера свободная оперативная память существенно увеличивает скорость ответа.
Чем больше памяти в каждом узле и чем больше памяти во всех узлах, тем быстрее это будет. Это несомненное преимущество кластера перед одиночным сервером и тем более аппаратным NAS, где встроен очень малый объем памяти.
Отсюда следует, что CEPH — это хороший способ создать надежную систему хранения данных на десятки ТБ с возможностью масштабирования с минимальными вложениями за счет устаревшего оборудования (здесь, конечно, потребуются затраты, но небольшие по сравнению с коммерческими СХД).
Реализация кластера
Для эксперимента возьмем списанный компьютер Intel DQ57TM + Intel Core i3 540 + 16 ГБ ОЗУ.Четыре диска по 2 ТБ организуем в нечто вроде RAID10, после успешного теста добавим второй узел и столько же дисков.
Установка Линукса.
Дистрибутив требует возможности настройки и стабильности.
Debian и Suse соответствуют требованиям.
У Suse более гибкий установщик, позволяющий отключить любой пакет; К сожалению, мне не удалось выяснить, какие из них можно выбросить, не повредив систему.
Установите Debian с помощью debootstrap buster. Опция min-base устанавливает сломанную систему, в которой отсутствуют драйверы.
Разница в размерах по сравнению с полной версией не настолько велика, чтобы смущаться.
Так как работа ведется на физической машине, то хочется делать снимки, как на виртуальных машинах.
Эту опцию предоставляет либо LVM, либо btrfs (или xfs, или zfs — разница невелика).
Снимки LVM не являются сильной стороной.
Установите бтрфс.
А загрузчик находится в MBR. Нет смысла загромождать диск объемом 50 МБ разделом FAT, когда его можно запихнуть в область таблицы разделов размером 1 МБ и выделить все пространство под систему.
Заняло на диске 700 Мб.
Не помню, сколько у базовой установки SUSE, думаю, где-то 1,1 или 1,4 ГБ.
Установите ЦЕФ.
Игнорируем 12 версию в репозитории debian и подключаемся напрямую с сайта 15.2.3. Следуем инструкциям из раздела «Установка CEPH вручную» со следующими оговорками:
- Перед подключением репозитория необходимо установить ca-сертификаты gnupg wget.
- После подключения репозитория, но перед установкой кластера, установка пакетов опускается: apt -y --no-install-recommends install ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
- Во время установки ceph-osd по (уже понятным) причинам попытается установить lvm2. Острой необходимости в этом нет. Если у вас возникли проблемы с установкой пакета, вы можете отказаться от него, удалив зависимость в /var/lib/dpkg/status для ceph-osd. При написании статьи использовался менее гуманный патч:
cat << EOF >> /var/lib/dpkg/status Package: lvm2 Status: install ok installed Priority: important Section: admin Installed-Size: 0 Maintainer: Debian Adduser Developers <[email protected]> Architecture: all Multi-Arch: foreign Version: 113.118 Description: No-install EOF
Обзор кластера
ceph-osd — отвечает за хранение данных на диске.Для каждого диска запускается сетевой сервис, который принимает и выполняет запросы на чтение или запись объектов.
В этой статье рассматривается хранилище bluestore как самое низкоуровневое.
В каталоге сервиса создаются служебные файлы, описывающие идентификатор кластера, хранилища, его тип и т.д., а также необходимый файл блока — эти файлы не изменяются.
Если файл физический, то osd создаст в нем файловую систему и будет накапливать данные.
Если файл является ссылкой, то данные будут находиться на устройстве, на которое указывает ссылка.
Помимо основного устройства, дополнительно можно указать блок.
db — метаданные (RocksDB) и блок.
wal — журнал (журнал упреждающей записи RocksDB).
Если дополнительные устройства не указаны, то метаданные и журнал будут храниться на основном устройстве.
Очень важно убедиться, что у вас есть свободное место для RocksDB, иначе OSD не запустится! При создании osd стандартно в старых версиях диск делится на два раздела: первый - xfs размером 100 МБ, смонтирован в /var/lib/.
и содержит служебную информацию, второй отведен под основное хранилище.
В новой версии используется lvm. Теоретически можно не монтировать миниатюрный раздел, а разместить файлы в /var/lib/.
, продублировав их на всех узлах, и выделить под данные весь диск, не создавая при этом ни GPT, ни LVM-заголовка.
При добавлении OSD вручную вы должны убедиться, что у пользователя ceph есть права на запись для блокировки устройств с данными, а каталог со служебными данными автоматически монтируется в /var/lib., если вы решите разместить его там.
Также желательно указать целевой параметр памяти OSD, чтобы было достаточно физической памяти.
цеф-MDS. На низком уровне CEPH — это объектное хранилище.
Возможности блочного хранилища сводятся к хранению каждого блока размером 4 МБ как объекта.
Хранилище файлов работает по тому же принципу.
Создаются два пула: один для метаданных, другой для данных.
Они объединены в файловую систему.
В этот момент создается какая-то запись, поэтому если вы удалите файловую систему, но сохраните оба пула, восстановить ее не получится.
Есть процедура извлечения файлов по блокам, я ее не проверял.
За доступ к файловой системе отвечает служба ceph-mds. Для каждой файловой системы требуется отдельный экземпляр службы.
Есть опция «ранг», позволяющая создать подобие нескольких файловых систем в одной — тоже не проверялось.
Ceph-mon — этот сервис хранит карту кластера.
В него входит информация обо всех OSD, алгоритм распределения PG по OSD и самое главное информация обо всех объектах (детали этого механизма мне не ясны: есть каталог /var/lib/ceph/mon/.
.
/store.db, в котором большой файл - 26Мб, а в кластере из 105К объектов получается чуть больше 256 байт на объект - думаю монитор хранит список всех объектов и ГУ в котором они расположены).
Повреждение этого каталога приведет к потере всех данных в кластере.
Отсюда был сделан вывод, что CRUSH показывает, как располагаются PG в OSD, и как располагаются объекты в PG в базе данных (вывод оказался неверным, что именно в нем содержится, требует уточнения).
В результате, во-первых, мы не можем установить систему на флэшку в режиме RO, так как база данных постоянно записывается, для этих данных нужен дополнительный диск (чуть больше 1 Гб), во-вторых, необходимо иметь копию этой базы данных в реальном времени.
Если мониторов несколько, то отказоустойчивость обеспечивается ими, а если монитор один, максимум два, то необходимо обеспечить защиту данных.
Существует теоретическая процедура восстановления монитора по данным OSD; на данный момент удалось восстановить его на уровне объекта; на данный момент восстановить файловую систему не удалось.
Пока мы не можем полагаться на этот механизм.
rados-gw — экспортирует объектное хранилище по протоколу S3 и тому подобное.
Создает много пулов, непонятно зачем.
Я особо не экспериментировал.
ceph-mgr — При установке этого сервиса запускается несколько модулей.
Один из них — автомасштабирование, которое нельзя отключить.
Он стремится поддерживать правильное количество PG/OSD. Если вы хотите контролировать соотношение вручную, вы можете отключить масштабирование для каждого пула, но в этом случае модуль вылетает с делением на 0, а статус кластера становится ОШИБКА.
Модуль написан на Python, и если в нем закомментировать нужную строку, это приводит к его отключению.
Лень вспоминать подробности.
Литература: Установка ЦЭФХ Восстановление после полного отказа монитора Статья о BlueStore в Ceph Описание архитектуры цефа.
Сейдж А.
Вейль
Списки сценариев: Установка системы через дебутстрап
blkdev=sdb1
mkfs.btrfs -f /dev/$blkdev
mount /dev/$blkdev /mnt
cd /mnt
for i in {@,@var,@home}; do btrfs subvolume create $i; done
mkdir snapshot @/{var,home}
for i in {var,home}; do mount -o bind @${i} @/$i; done
debootstrap buster @ http://deb.debian.org/debian ; echo $?
for i in {dev,proc,sys}; do mount -o bind /$i @/$i; done
cp /etc/bash.bashrc @/etc/
chroot /mnt/@ /bin/bash
echo rbd1 > /etc/hostname
passwd
uuid=`blkid | grep $blkdev | cut -d "\"" -f 2`
cat << EOF > /etc/fstab
UUID=$uuid / btrfs noatime,nodiratime,subvol=@ 0 1
UUID=$uuid /var btrfs noatime,nodiratime,subvol=@var 0 2
UUID=$uuid /home btrfs noatime,nodiratime,subvol=@home 0 2
EOF
cat << EOF >> /var/lib/dpkg/status
Package: lvm2
Status: install ok installed
Priority: important
Section: admin
Installed-Size: 0
Maintainer: Debian Adduser Developers <[email protected]>
Architecture: all
Multi-Arch: foreign
Version: 113.118
Description: No-install
Package: sudo
Status: install ok installed
Priority: important
Section: admin
Installed-Size: 0
Maintainer: Debian Adduser Developers <[email protected]>
Architecture: all
Multi-Arch: foreign
Version: 113.118
Description: No-install
EOF
exit
grub-install --boot-directory=@/boot/ /dev/$blkdev
init 6
apt -yq install --no-install-recommends linux-image-amd64 bash-completion ed btrfs-progs grub-pc iproute2 ssh smartmontools ntfs-3g net-tools man
exit
grub-install --boot-directory=@/boot/ /dev/$blkdev
init 6
Создание кластера apt -yq install --no-install-recommends gnupg wget ca-certificates
echo 'deb https://download.ceph.com/debian-octopus/ buster main' >> /etc/apt/sources.list
wget -q -O- ' https://download.ceph.com/keys/release.asc ' | apt-key add -
apt update
apt -yq install --no-install-recommends ceph-common ceph-mon
echo 192.168.11.11 rbd1 >> /etc/hosts
uuid=`cat /proc/sys/kernel/random/uuid`
cat << EOF > /etc/ceph/ceph.conf
[global]
fsid = $uuid
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
mon allow pool delete = true
mon host = 192.168.11.11
mon initial members = rbd1
mon max pg per osd = 385
osd crush update on start = false
#osd memory target = 2147483648
osd memory target = 1610612736
osd scrub chunk min = 1
osd scrub chunk max = 2
osd scrub sleep = .
2
osd pool default pg autoscale mode = off
osd pool default size = 1
osd pool default min size = 1
osd pool default pg num = 1
osd pool default pgp num = 1
[mon]
mgr initial modules = dashboard
EOF
ceph-authtool --create-keyring ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
ceph-authtool --create-keyring ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
cp ceph.client.admin.keyring /etc/ceph/
ceph-authtool --create-keyring bootstrap-osd.ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
cp bootstrap-osd.ceph.keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
ceph-authtool ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
ceph-authtool ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
monmaptool --create --add rbd1 192.168.11.11 --fsid $uuid monmap
rm -R /var/lib/ceph/mon/ceph-rbd1/*
ceph-mon --mkfs -i rbd1 --monmap monmap --keyring ceph.mon.keyring
chown ceph:ceph -R /var/lib/ceph
systemctl enable ceph-mon@rbd1
systemctl start ceph-mon@rbd1
ceph mon enable-msgr2
ceph status
# dashboard
apt -yq install --no-install-recommends ceph-mgr ceph-mgr-dashboard python3-distutils python3-yaml
mkdir /var/lib/ceph/mgr/ceph-rbd1
ceph auth get-or-create mgr.rbd1 mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-rbd1/keyring
systemctl enable ceph-mgr@rbd1
systemctl start ceph-mgr@rbd1
ceph config set mgr mgr/dashboard/ssl false
ceph config set mgr mgr/dashboard/server_port 7000
ceph dashboard ac-user-create root 1111115 administrator
systemctl stop ceph-mgr@rbd1
systemctl start ceph-mgr@rbd1
Добавление OSD (часть) apt install ceph-osd
osdnum=`ceph osd create`
mkdir -p /var/lib/ceph/osd/ceph-$osdnum
mkfs -t xfs /dev/sda1
mount -t xfs /dev/sda1 /var/lib/ceph/osd/ceph-$osdnum
cd /var/lib/ceph/osd/ceph-$osdnum
ceph auth get-or-create osd.0 mon 'profile osd' mgr 'profile osd' osd 'allow *' > /var/lib/ceph/osd/ceph-$osdnum/keyring
ln -s /dev/disk/by-partuuid/d8cc3da6-02 block
ceph-osd -i $osdnum --mkfs
#chown ceph:ceph /dev/sd?2
chown ceph:ceph -R /var/lib/ceph
systemctl enable ceph-osd@$osdnum
systemctl start ceph-osd@$osdnum
Краткое содержание
Главным маркетинговым преимуществом CEPH является CRUSH — алгоритм расчета местоположения данных.Мониторы раздают этот алгоритм клиентам, после чего клиенты напрямую запрашивают нужный узел и нужное OSD. CRUSH гарантирует отсутствие централизации.
Это небольшой файл, который можно даже распечатать и повесить на стену.
Практика показала, что CRUSH не является исчерпывающей картой.
Если уничтожить и воссоздать мониторы, сохранив все OSD и CRUSH, то для восстановления кластера этого будет недостаточно.
Отсюда делается вывод, что каждый монитор хранит некоторые метаданные обо всем кластере.
Небольшой объем этих метаданных не накладывает ограничений на размер кластера, но требует обеспечения их безопасности, что исключает экономию дисков при установке системы на флэш-накопитель и исключает кластеры с числом узлов менее трех.
Агрессивная политика разработчика в отношении дополнительных функций.
Далеко не минимализм.
Документация на уровне «спасибо за то, что есть, но очень и очень скудно».
Возможность взаимодействия с сервисами на низком уровне предусмотрена, но документация затрагивает эту тему слишком поверхностно, так что скорее нет, чем да.
Шансов на восстановление данных в экстренной ситуации практически нет (благодаря разъяснениям сообщества шанс все же есть).
Варианты дальнейших действий: отказаться от CEPH и использовать банальный многодисковый btrfs (или xfs, zfs), узнать новую информацию о CEPH, которая позволит эксплуатировать его в заданных условиях, попробовать записать собственное хранилище как расширенное обучение.
Теги: #*nix #Хранилище данных #it-инфраструктура #ceph
-
Китайский Интернет-Магазин Изнутри
19 Oct, 24 -
Работа Сервиса Яндекс.новости
19 Oct, 24 -
Дартс Своими Руками
19 Oct, 24 -
Местная Валюта В Социальной Сети
19 Oct, 24