Thank you for reading this post, don't forget to subscribe!
Ceph —
распределенное кластерное хранилище данных. Собирается из нескольких серверов; обладает такими преимуществами, как масштабируемость, отказоустойчивость, высокая скорость, бесплатность, тонкая настройка, поддержка различного оборудования и операционных систем. Будет полезна в случаях, когда нужно собрать большой, недорогой и лишенный узких мест дисковый массив. Является достойной альтернативой системам хранения данных.
Ceph разработан для систем на базе Linux и BSD. Установку можно выполнить из дополнительного репозитория или собрав из исходника, который можно скачать на официальном сайте.
Другая похожая реализация распределенной файловой системы — GlusterFS. В отличие от Ceph, работает поверх файловых систем (extX, XFS, reiserfs, …), используя технологию FUSE. GlusterFS не размазывает файлы по серверам, храня их целиком.
____________________
Подготовка системы
Обновление пакетов
Обновим установленные пакеты на сервере следующей командой:
yum update
Синхронизация времени
Для корректной работы Ceph требуется, чтобы на нодах кластера было одинаковое время, поэтому на всех серверах настраиваем синхронизацию последнего.
Для этого сначала установим ntp следующей командой:
yum install ntp
После задаем временную зону:
cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
* в данном примере московское время.
Теперь открываем на редактирование cron:
crontab -e
И добавляем следующую строку:
0 0 * * * /sbin/ntpdate ru.pool.ntp.org
* в данной настройке cron каждую ночь в 00:00 будет выполняться синхронизация времени с сервером ru.pool.ntp.org
Чтобы не ждать ночи, разово актуализируем время:
ntpdate ru.pool.ntp.org
Чтобы время не сбивалось после перезагрузки, настроим аппаратное время:
hwclock --systohc
Отключение SELinux
Рекомендуется отключить дополнительную систему безопасности SELinux.
Настройка брандмауэра
Для корректной работы монитора Ceph требуется открыть порт 6789. Это делается следующей командой:
Также, для серверов хранения открываем порты 6800-7100:
* в нашем примере мониторы ceph и хранилища будут устанавливаться на одни и те же сервера, поэтому вышеописанные команды вводим на всех нодах.
Создание пользователей
На всех серверах кластера создаем пользователя следующей командой:
useradd ceph -m
И задаем ему пароль (желательно, сложный):
passwd ceph
У созданной учетной записи должны быть привилегии суперпользователя. Для этого создаем следующий файл:
vi /etc/sudoers.d/ceph
И добавляем в него следующее:
ceph ALL = (root) NOPASSWD:ALL
Defaults:ceph !requiretty
* в данном примере учетной записи ceph предоставлены права суперпользователя без необходимости повторного ввода пароля.
Задаем следующие права на созданный файл:
chmod 0440 /etc/sudoers.d/ceph
Настройка распознования имен
Если мы работаем в среде без DNS, узлы кластера не смогут обращаться друг к другу по имени, поэтому необходимо открыть на редактирование следующий файл:
vi /etc/hosts
и добавить следующие строки:
192.168.0.10 server1
192.168.0.11 server2
192.168.0.12 server3
* где 192.168.0.10 (11, 12) — IP-адреса серверов в моей тестовой среде; server1, 2, 3 — имена этих серверов.
Установка Ceph
Подключаемся к серверу CentOS 7, с которого будем устанавливать Ceph. Это может быть одна из нод кластера или отдельный компьютер. Все последующие команды выполняем с него.
Установка Ceph-deploy
Распространение Ceph на все узлы кластера происходит при помощи Ceph-deploy. Чтобы его установить, создаем следующий файл:
vi /etc/yum.repos.d/ceph.repo
и добавляем в него следующее:
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-hammer/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
* где Hammer — LTS версия ceph; el7 — релиз CentOS 7. Эти значения нужно заменить на другие, если используемые версии отличаются. Релиз Linux CentOS можно посмотреть командой uname -r, а актуальную версию Ceph по ссылке http://docs.ceph.com/docs/jewel/releases/
Обновляем список пакетов:
yum update
Теперь можно установить ceph-admin следующей командой:
yum install ceph-deploy
Чтобы заранее обойти ошибку «[ceph_deploy][ERROR ] RuntimeError: NoSectionError: No section: 'ceph'», переименовываем наш репозиторий ceph:
mv /etc/yum.repos.d/ceph.repo /etc/yum.repos.d/ceph-deploy.repo
Настройка беспарольного подключения по SSH
Заходим в систему под учетной записью ceph:
su - ceph
Генерируем ключ следующей командой:
ssh-keygen
* система задаст несколько вопросов относительно расположения ключа — оставляем значения по умолчанию, нажимая Enter.
и распространяем его на участников кластера:
ssh-copy-id ceph@server1
ssh-copy-id ceph@server2
ssh-copy-id ceph@server3
* где ceph — созданная ранее на всех узлах учетная запись; server1, 2, 3 — имена серверов в моей тестовой среде.
** после ввода каждой команды система запросит разрешение принять сертификат — отвечаем yes. Также будет запрошен пароль от ранее созданной записи ceph.
Установка Ceph и создание кластера на всех нодах
Создаем рабочий каталог следующей командой:
mkdir ceph-admin
и переходим в него:
cd ceph-admin
Все последующие команды по управлению кластером стоит выполнять, находясь в нем.
Создаем новый кластер:
ceph-deploy new server1 server2 server3
* напомню, что server1,2,3 — названия серверов в моей тестовой среде.
Устанавливаем Ceph на все узлы кластера:
ceph-deploy install server1 server2 server3
Так как ceph-deploy не всегда устанавливает свежую версию ceph, обновим каждую ноду:
ssh ceph@server1 'sudo yum update -y'
ssh ceph@server2 'sudo yum update -y'
ssh ceph@server3 'sudo yum update -y'
Настройка кластера Ceph
Создание и запуск мониторов
Выполним начальную настройку сервера монитора Ceph:
ceph-deploy mon create-initial
Подготовка дисков
Диски, доступные на сервере можно посмотреть следующей командой:
ceph-deploy disk list server1
Готовим диски для использования их системой Ceph:
ceph-deploy osd prepare server1:sdb server1:sdc server2:sdb server2:sdc server3:sdb server3:sdc
* в данном примере на каждом из серверов есть по два диска — sdb и sdc. Их мы и задействеум в качестве Ceph-хранилища.
И активируем их:
ceph-deploy osd activate server1:sdb1 server1:sdc1 server2:sdb1 server2:sdc1 server3:sdb1 server3:sdc1
* обратите внимание, что при активации мы уже добавляем 1 к дискам, так как в процессе подготовки система создает два раздела — 1 для данных, 2 для журнала.
Проверка работоспособности
Для начала разрешим чтение файла ceph.client.admin.keyring:
sudo chmod +r /etc/ceph/ceph.client.admin.keyring
Смотрим состояние дисков OSD:
ceph osd tree
Состояние дисков должно быть up, например:
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.01999 root default
-2 0.01999 host server1
0 0.00999 osd.0 up 1.00000 1.00000
1 0.00999 osd.1 up 1.00000 1.00000
Смотрим состояние кластера:
ceph -s
Система должна показать, примерно следующее:
cluster e67ce522-eb15-481e-8d8a-9448b5e31e04
health HEALTH_OK
Очень часто отображается предупреждение clock skew detected. Это означает, что не на всех серверах синхронизировано время. На всех серверах выполните команду
ntpdate ru.pool.ntp.org
и подождите около 15 минут.