Настройка кластера Ceph на Linux CentOS 7
Что такое Ceph, Linux и CentOS простыми словами.
Подготовка системы
Обновление пакетов
Обновим установленные пакеты на сервере следующей командой:
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.
Подробнее читайте статью Как отключить SELinux.
Настройка брандмауэра
Для корректной работы монитора Ceph требуется открыть порт 6789. Это делается следующей командой:
firewall-cmd —permanent —add-port=6789/tcp
Также, для серверов хранения открываем порты 6800-7100:
firewall-cmd —permanent —add-port=6800-7100/tcp
* в нашем примере мониторы ceph и хранилища будут устанавливаться на одни и те же сервера, поэтому вышеописанные команды вводим на всех нодах.
Чтобы изменения вступили в силу, вводим команду:
firewall-cmd —reload
Создание пользователей
На всех серверах кластера создаем пользователя следующей командой:
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:
Генерируем ключ следующей командой:
ssh-keygen
* система задаст несколько вопросов относительно расположения ключа — оставляем значения по умолчанию, нажимая Enter.
и распространяем его на участников кластера:
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
* где 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 [email protected] ‘sudo yum update -y’
ssh [email protected] ‘sudo yum update -y’
ssh [email protected] ‘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
Смотрим состояние кластера:
Система должна показать, примерно следующее:
cluster e67ce522-eb15-481e-8d8a-9448b5e31e04
health HEALTH_OK
Очень часто отображается предупреждение clock skew detected. Это означает, что не на всех серверах синхронизировано время. На всех серверах выполните команду
ntpdate ru.pool.ntp.org
и подождите около 15 минут.