Виртуальный диск виртуальной машины представляет собой образ жёсткого диска. Виртуальные диски хранятся на локальном или сетевом устройстве — хранилище. Ceph RBD — сетевое отказоустойчивое хранилище. В статье описан алгоритм настройки Ceph-кластера. Подробнее о сетевых хранилищах см. в статье Сетевые хранилища.
Ceph-кластер
Рекомендуем создавать кластер Ceph в соответствии с официальной документацией. В этой статье только обобщённая информация об установке.
Кластер Ceph должен располагаться отдельно от VMmanager. Понятия "узлы" и "кластер" не имеют ничего общего с "узлами кластера" VMmanager.
Системные требования
Для создания кластера требуется:
- физические или виртуальные сервера (минимум — 4): один сервер с данными (OSD), минимум два сервера-монитора и административный сервер (он же первый клиент);
- все серверы должны находиться как можно ближе друг к другу. Желательно, в одной стойке и в одном сегменте сети;
- для кластера Ceph желательно использовать высокоскоростное сетевое подключение как между узлами кластера, так и с клиентскими узлами;
- на всех серверах должна быть установлена одна операционная система.
Подготовка узлов
На всех узлах кластера:
- Установите openssh.
-
Создайте пользователя ceph:
# ssh user@ceph-server # useradd -d /home/ceph -m ceph # passwd ceph
-
Созданному пользователю присвойте все привилегии:
# echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph # chmod 0440 /etc/sudoers.d/ceph
На административном сервере:
-
Создайте ключи ssh, чтобы иметь доступ на все узлы кластера. Для этого создайте директорию /ceph-client и перейдите в неё:
# ssh root@adm # cd /ceph-client
-
Создайте ключи ssh:
# ssh-keygen -f ./id_rsa
Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in ./id_rsa. Your public key has been saved in ./id_rsa.pub. The key fingerprint is: 23:2c:d9:5c:64:4f:ea:43:5b:48:b3:69:3d:e8:25:a4 root@adm The key's randomart image is: +--[ RSA 2048]----+ | * . | | * @ | | E @ * | | = * = . | | o = S | | . . o | | | | | | | +-----------------+
-
Если узлы кластера не разрешаются в DNS, обновите /etc/hosts. Шаблон корректного файла выглядит следующим образом:
# getent hosts | grep ceph 172.31.240.91 adm.ceph.ispsystem.net adm 172.31.240.87 mon-1.ceph.ispsystem.net mon-1 172.31.240.84 mon-2.ceph.ispsystem.net mon-2 172.31.240.28 osd-1.ceph.ispsystem.net osd-1 172.31.240.44 osd-2.ceph.ispsystem.net osd-2 172.31.240.90 mds-1.ceph.ispsystem.net mds-1
-
Удобно завести переменную:
# nodes=`getent hosts | grep ceph | grep -v 'adm' | awk '{print $3}' | xargs echo` # echo $nodes mon-1 mon-2 osd-1 osd-2 mds-1
-
Тогда скопировать ключи ssh на узлы кластера можно следующим образом:
# for i in $nodes; do ssh-copy-id -i /ceph-client/id_rsa.pub ceph@$i ; done
-
Отредактируйте файл конфигурации ~/.ssh/config. Шаблон корректного файла выглядит следующим образом:
# cat ~/.ssh/config Host mon-1 Hostname mon-1.ceph.ispsystem.net IdentityFile /ceph-client/id_rsa User ceph Host mon-2 Hostname mon-2.ceph.ispsystem.net IdentityFile /ceph-client/id_rsa User ceph Host osd-1 Hostname osd-1.ceph.ispsystem.net IdentityFile /ceph-client/id_rsa User ceph Host osd-2 Hostname osd-2.ceph.ispsystem.net IdentityFile /ceph-client/id_rsa User ceph Host mds-1 Hostname mds-1.ceph.ispsystem.net IdentityFile /ceph-client/id_rsa User ceph
Установка ПО и создание кластера
На административном сервере:
-
Установите ceph-deploy:
wget -q -O- 'https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc' | apt-key add — echo deb http://ceph.com/debian-cuttlefish/ $(lsb_release -sc) main | tee /etc/apt/sources.list.d/ceph.list apt-get update apt-get install ceph-deploy
-
Инициализируйте узлы-мониторы для создания кластера:
ceph-deploy new mon-1 mon-2
-
Обратите внимание: для использования Ceph-хранилища с одним узлом кластера нужно в конфигурационном файле Ceph (ceph.conf) значение параметра osd crush chooseleaf type по умолчанию ("1") изменить на "0":
osd crush chooseleaf type = 0
-
Установите ceph на узлы кластера:
# ceph-deploy install --stable cuttlefish $nodes OK OK OK OK OK
-
Установите ПО для мониторов кластера:
# ceph-deploy mon create mon-1 mon-2
-
Получите ключи мониторов кластера:
# ceph-deploy gatherkeys mon-1 # ls -l ... -rw-r--r-- 1 root root 72 Jul 12 05:01 ceph.bootstrap-mds.keyring -rw-r--r-- 1 root root 72 Jul 12 05:01 ceph.bootstrap-osd.keyring -rw-r--r-- 1 root root 64 Jul 12 05:01 ceph.client.admin.keyring ...
-
Подготовьте хранилище (в случае, рассматриваемом для примера, на узлах хранилища есть пустой диск /dev/sdb):
# ceph-deploy osd prepare osd-1:sdb osd-2:sdb # ceph-deploy osd activate osd-1:sdb osd-2:sdb
-
Очистите диски /dev/sdb на хранилищах. Все данные на дисках будут удалены:
# ceph-deploy disk zap osd-1:sdb osd-2:sdb
-
Подготовьте узлы метаданных:
# ceph-deploy mds create mds-1