Установка и настройка CEPH Ceph FS ceph-fuse & Kernel Drive на ubuntu 16.04

Часто в практике используется NFS в качестве сетевого хранения данных. Это удобно иметь единтичные данные смотнтированные между несколькими серверами, до тех пор пока не начнут появляться требования к хранилищу с несколькими точками входа и в случаи падения ноды не терять возможность писать и читать данные. В данном материале рассмотрим установку и настройку CEPH на ubuntu, часть материала будет взята из официальной документации, но выдана в более копи-паст виде, т.к. многие банальные вещи в ней упушенны или описаны в виде «сделай сам».

Начнем со схемы. Схема будет бюджетная: 1 админ нода (ceph-deploy) — с которого идет управление всеми серверами и подключаемыми клиентами, 3 сервера с данными, на которых мы разместим: mon (мониторы), osd (блочное устройство для хранения данных), mds — хэш суммы. Каждый из трех серверов имеет системный диск (или raid не имеет значения), а также два примонтированных диска по 500 Gb дополнительно. И в качесте дополнения подключим к этой схеме 2 клиентских сервера, которые должны будут обращаться к единому каталогу.

Добавим репозиторий ceph на админ ноду и установим пакет ceph-deploy

Обновим пакеты, систему и установим ceph-deploy

Парралельно приступаем к подготовке серверов с данными иклиентским серверов.

На 3-х наших нодах выполняем:

На всех севрерах нужен ssh, не забываем проверить его наличие или установить его

Задаем севрерам хостнеймы, в дальнейшем мы их будем использовать при управление ими с помощью ceph-deploy

Выполним reboot

Предпочитаю сделать собственный файл /etc/hosts у меня он имеет следующий вид:

Создаем польователя cephuser на всех серверах для доступа по ключам с админ ноды.

!!! Важно !!! Можно создавать пользователя с любым именем кроме имени ceph — это зарезервированное имя.

Добавим пользователя в sudo без пароля

Сгенерируем ssh ключи на admin ноде для пользователя cephuser

Разольем ключ любым удобным способом. Я банальным копирование из файла (cat ./.ssh/id_rsa.pub) по причине отсутсвия аутентификации по паролю. Заходим на каждую ноду и выполняем

Убедимся что firewall разрешено принимать соединения по порту 6789 и диапазону 6800:7300

Возвращаемся на admin ноду и под пользователем cephuser продолжаем настройку

Создаем каталог, где будут храниться ключи и файлы конфигурации:

Создание кластера

Инициализируем мониторы

У нас создался файл ceph.conf в котором видны наши будующие ceph ноды:

Произведем установку необходимых CEPH пакетов на ceph ноды

В результате в консоле мы увидим установку пакетов и зависимостей на наши будующие ноды, в завершении вывод будет выглядет следующим образом

​_

Мы установлили версию 10.2.10.

Произведем деплой наших мониторов и разольем ключи

Присупим к подклчению наших устройст в кластер

На каждой ноде мыимеем примерно следующие устройства, на примере ceph1

Наши диски по 500Gb вданом примере /dev/xvdf /dev/xvdg

Пройдем по всем нодам, и далее выполним команду c admin севрер, в которой перечислим все наши сервера и их будующие osd

Успешное выполнение

С admin сервера мы можем проверить состояние нашего кластера, выполнив команду

HEALTH_OK — нормальное состояние кластера

Для использования CephFS, который намнеобходим, нам необходимо создать также метаданные — mds

Создание файловой системы — CEPH FS

Выполняеться на любом из 3-х наших серверов с данными

Создаем нашу FS и присваем ей произвольное имя:

ceph fs new <fs_name> cephfs_metadata cephfs_data

я присваиваю имя cephfs

Настройка клиентов — CEPH FS (ceph-fuse)

Установим нужные пакеты на наши два клиента c admin ноды.

Необходимо скопировать ключи на наши агенты, с из серверов с данными (одна из 3-х нод) забираем ключик:

и помещаем его в файл на агенте:

результат

Создаем на нашем клиенте каталог куда будем монтироваться и

устанавливаем пакет ceph-fuse

Подключаем к нашему клиенту наш ceph кластер, используем любой из IP адресов текущего монитора, например, который находиться на 2-м сервере (ceph2) — 172.31.38.230. При монтировании укажим путь к файлу с ключем

Результат успешного монтирования видно в df -h

Добавим в /etc/fstab для автоматического монтирования при загрузке системы.

Настройка клиентов — CEPH FS (Kernel Drive)

После месяца использования cephfs смотнтированного через fuse начали появляться ошибки связзанные с отпадающим ceph-fuse клиентом, в логах примерно следующая ситуация:

Было принято решение перейти на способ монтирования Kernel Drive

В данном способе нам надо подготовить отедльный файл с ключем, ключ получаем следующей командой:

Вывод записываем в файл:

Далее правим /etc/fstab добавляем:

где 192.168.1.2,192.168.1.3,192.168.1.4 — IP наших трех серверов mon

Результат на графиках, как изменилась нагрузка на клиенте после изменения способа монтирования с ceph-fuse на kernel drive

 

Crash тесты

Сгенерируем несколько файлов, проверим что они есть на наших агентах

client1

client2

Мы сгенерировали файлов на ~10Gb, посмотрим, что в нашем кластере

Мы видим избыточность х3:

 

Предлагаю «потерять» 1 сервер с данными и вместо него установить новый. Статус кластера после выключения изменился:

Выключением/удалением — моделируем полную потерю сервера ceph3. Вместо него необходимо ввести в кластер сервер ceph4 c аналогичной конфигурацией как и первые 3 сервера.

На сервере ceph4 прроделываем все с самого начала по аналогии ceph1-3 (см. выше).

Обновляем на /etc/hosts на наших нодах, добавляем в него ceph4.

Переходим на севрер ceph-admin

На новом сервере над надо добавить — mon, osd, mds — все что мы потеряли на ceph3 севрере.

Установим пакеты ceph

Скопируем ключи/конфиги

Создаем на новом сервере osd

Переопределяем наши мониторы

перезаписываем иразливаем конфиги

состояние кластера в текущий момент

конфиг на ceph нода сейчас выглядит так

у нас в наличие есть еще ceph3 mon которого уже нет в конфиге

удаляем его с одной из нод ceph

или же с admin ноды

состояние кластера в текущий момент

Удаляем потерянные osd

необходимо удалить osd.4 и osd.5

После этого кластер перестраиваеться

Наше дерево после удаления osd находящихся на ceph3

Добавим mds на новый сервер ceph4

Удаление OSD в случаи необходимости замены HDD

Смотрим листинг OSD

Сопостовляем со списком всех смонтированных OSD

Помечаем целевой osd как ‘out’

Если получаем сообщение ‘osd.11 is already out’ —  все ок.

Помечаем как ‘down’

Удаляем

Если не удаляеться, пишет ‘Error EBUSY: osd.11 is still up; must be down before removal.’

Выполняем команду

и повторяем процедуру удаления

Теперь в списке OSD он помечен как ‘DNE’

Удаляем из crush map

удаляем из авторизации для предотвращения проблемы ‘couldn’t add new osd with same number’

удаляем из ceph-volume lvm

 

 

Результат тистирования удалени и добавления в CEPH кластер mds ноды

В данный момент условно говоря 2 mds на ceph1 и ceph2

Добавляем mds на ceph4, результат:

Добавлен mds на ceph4, смотрим dump

Выключаем ноду ceph2 и смотрим dump

а также заглянем в stat с текущим выключеным ceph2

Каков итог. mds всегда 1, все остальные находятся в статусе standby, если сервер с mds пропадает/выключаеться/удаляеться — то ceph более не считает его резервным или вообще какием-то запасным — просто выкидывает.

Рекомендации по тюнингу системных переменных — PID Count

В случае когда одна нода включае в себя более 20 OSD рекомендуеться увеличить значение переменно kernel.pid_max

Значение по-умолчанию — 32768

Отключить кеш для дисков OSD

Результат на графиках

Фактически до использования CEPHfs, NFS имел вот такой график:

На NFS сервере использовать софтварный 6-й рейд, когда происходили еженедельный системный проверки целостности массива — все приложения умирали, но как мы видим сняв часть нагрузки на CEPH мы получили живой NFS и рабочий CEPH для критичных данных.

Нагрузка на CEPH за ~20 дней:

Еще один график, на нем показана нагрузка, когда в CEPH шла загрузка файла размером 0.5 Tb

 

Ошибки, возможные при варианты вытаскивания OSD и неудачной попытке ребилда

3 объекта потеряны, попробуем сделать им revert, если ничего не изменить — удаляем с вероятностью потери данных

В моем случаи успешно прошел revert

у pg 1e.6 началась процедура восстановления, pg 1.1 стал в очередь

По завершению наш health статус уже не такой страшный:

 

 

 

Ссылки на официальный мануал:

http://docs.ceph.com/docs/master/start/quick-start-preflight/

http://docs.ceph.com/docs/master/start/quick-ceph-deploy/

http://docs.ceph.com/docs/master/start/quick-cephfs/

http://docs.ceph.com/docs/master/cephfs/createfs/

 

Добавить комментарий

Ваш адрес email не будет опубликован.