Содержание
VSE (черновики)
Ceph
Называть кластер: ceph (иначе баги и путаница)
MON
Важные советы:
Нечетное количество: Всегда держите нечетное число мониторов (3 или 5) для обеспечения кворума и предотвращения ситуации "split-brain".
Сеть: Убедитесь, что новый хост имеет доступ к public_network кластера.
Конфиг: После добавления обновите ceph.conf на всех узлах, добавив IP нового монитора в секцию mon_host.
Создание кластера
apt install ceph-mon
FSID="$(cat /proc/sys/kernel/random/uuid)" HOST="$(hostname -s)" ADDR="$(hostname -i)" CNET="$(ip r | grep $ADDR | awk '{print $1}')" PNET="$CNET" cat > /etc/ceph/ceph.conf << EOF [global] fsid = $FSID mon_initial_members = $HOST mon_host = $ADDR cluster_network = $CNET public_network = $PNET auth_allow_insecure_global_id_reclaim = false osd_pool_default_pg_autoscale_mode = on osd_pool_default_size = 1 osd_pool_default_min_size = 1 EOF cat /etc/ceph/ceph.conf
Ключ Администратора кластера:
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring \ --gen-key --name client.admin \ --cap mon 'allow *' \ --cap osd 'allow *' \ --cap mds 'allow *' \ --cap mgr 'allow *'
Временное хранилище (keyring) для первого MON:
ceph-authtool --create-keyring /tmp/ceph.mon.keyring \ --gen-key --name mon. \ --cap mon 'allow *' ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
Начальная карта мониторов:
monmaptool --create --add $HOST $ADDR --fsid $FSID /tmp/monmap monmaptool --print /tmp/monmap
Создание и запуск первого MON:
mkdir -pv /var/lib/ceph/mon/ceph-$HOST ceph-mon --mkfs --id $HOST --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring chown -Rv ceph:ceph /var/lib/ceph/mon systemctl enable ceph-mon.target systemctl --now enable ceph-mon@$HOST
Настройки:
sed -i "/mon_initial_members/d" /etc/ceph/ceph.conf ceph mon enable-msgr2
Проверки:
ceph -s ceph mon dump ceph daemon mon.$(hostname -s) mon_status ceph daemon mon.$(hostname -s) config show ceph auth list
Добавление
apt install ceph-mon
Скопировать ключ администратора и конфигурационный файл:
# /etc/ceph/ceph.client.admin.keyring # /etc/ceph/ceph.conf scp h1:/etc/ceph/ceph.* /etc/ceph/
ceph auth get mon. -o /tmp/ceph.mon.keyring ceph mon getmap -o /tmp/monmap
HOST=$(hostname -s) mkdir -pv /var/lib/ceph/mon/ceph-$HOST ceph-mon --mkfs --id $HOST --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring chown -Rv ceph:ceph /var/lib/ceph/mon systemctl enable ceph-mon.target systemctl --now enable ceph-mon@$HOST
Добавить в конфигурацию /etc/ceph/ceph.conf и растиражировать:
mon_host = 10.0.1.11, 10.0.1.12
Удаление
Если хост «живой»:
systemctl --now disable ceph-mon@$(hostname -s) rm -rfv /var/lib/ceph/mon/ceph-$(hostname -s)
На любом «живом»:
ceph mon remove <id_монитора>
Убрать в /etc/ceph/ceph.conf упоминания об удаленном MON на всех оставшихся
OSD
Добавление
apt install ceph-osd ceph-volume
ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring ceph-volume lvm create --data /dev/...
Основные команды для получения информации (часть команд "зависнет" если нет ни одного пула):
ceph osd tree — выводит иерархическую структуру OSD, привязку к хостам, их текущий статус (up/down) и вес в алгоритме CRUSH.
ceph osd status — показывает краткую сводку по всем OSD: состояние, использование объема и основные метрики производительности.
ceph osd dump — отображает детальную техническую информацию, включая эпохи карты OSD, список пулов и флаги управления.
ceph osd df — предоставляет статистику по использованию дискового пространства (общий объем, занято, свободно) и вариацию заполнения между OSD.
Статусы OSD:
Up / Down: запущен ли процесс демона и доступен ли он по сети.
In / Out: включен ли OSD в кластер для хранения данных (если out, данные с него переносятся на другие узлы)
Удаление
MGR
Обязательный…, нужно хранилище для своего пула .mgr, …
Добавление
apt install ceph-mgr ceph-mgr-dashboard python3-distutils
Безадмин -------- ceph auth get client.bootstrap-mgr -o /var/lib/ceph/bootstrap-mgr/ceph.keyring ==> ceph -n client.bootstrap-mgr -k /var/lib/ceph/bootstrap-mgr/ceph.keyring \ auth get-or-create mgr.$(hostname -s) \ mon 'allow profile mgr' \ osd 'allow *' \ mds 'allow *' \ -o /var/lib/ceph/mgr/ceph-$(hostname -s)/keyring
mkdir -pv /var/lib/ceph/mgr/ceph-$(hostname -s) ceph auth get-or-create mgr.$(hostname -s) mon 'allow profile mgr' osd 'allow *' mds 'allow *' \ -o /var/lib/ceph/mgr/ceph-$(hostname -s)/keyring chown -Rv ceph:ceph /var/lib/ceph/mgr systemctl enable ceph-mgr.target systemctl --now enable ceph-mgr@$(hostname -s) Dashboard ceph mgr module ls ceph mgr module enable dashboard ceph dashboard create-self-signed-cert echo 'password' > /tmp/password.txt ceph dashboard ac-user-create admin -i /tmp/password.txt administrator ss -lntp | grep 443 Browser -> https://host:8443 -> admin/password
Ceph
# astra-version -b; ceph -v 1.8.4.48 ceph version 17.2.6 quincy (stable)
Идея заключается в установке работоспособного хранилища на один узел.
Начать можно даже не с боевого хоста, а с временного рабочего места администратора - узла без настоящих дисков хранилища, но с ПО управления (MON+MGR)
Затем, добавляя/удаляя хосты и службы MON/MGR/OSD, можно выйти на необходимую рабочую конфигурацию.
Первый (или административный/временный) узел
Можно развернуть на отдельной ВМ, создать с его помощью хранилище, а потом - удалить.
Потребуется отдельный диск или раздел для первого OSD, например:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS vda 252:0 0 8G 0 disk ├─vda1 252:1 0 6G 0 part / └─vda2 252:2 0 2G 0 part
На административном (или первом) узле будут три обязательные сущности: MON, OSD и MGR.
Поэтому можно установить метапакет и несколько вспомогательных:
apt install ceph \
ceph-volume ceph-mgr-dashboard python3-distutils
reboot
ADM
Основной конфигурационный файл:
CEPH="ceph" UUID="$(cat /proc/sys/kernel/random/uuid)" HOST="$(hostname -s)" ADDR="$(hostname -i)" CNET="$(ip r | grep $ADDR | awk '{print $1}')" PNET="$CNET" cat > /etc/ceph/$CEPH.conf << EOF [global] fsid = $UUID mon initial members = $HOST mon host = $ADDR public network = $PNET cluster network = $CNET auth_allow_insecure_global_id_reclaim = false osd_pool_default_pg_autoscale_mode = on osd_pool_default_size = 1 osd_pool_default_min_size = 1 EOF
Создание администратора кластера/ключа с помощью ceph-authtool (ceph auth использовать не получится, т.к. кластера еще нет):
ceph-authtool --create-keyring /etc/ceph/$CEPH.client.admin.keyring \ --gen-key --name client.admin \ --cap mon 'allow *' \ --cap osd 'allow *' \ --cap mds 'allow *' \ --cap mgr 'allow *'
MON #1
Хранилище ключей (во временном каталоге, можно удалить после создания MON):
ceph-authtool --create-keyring /tmp/$CEPH.mon.keyring \ --gen-key --name mon. \ --cap mon 'allow *' ceph-authtool /tmp/$CEPH.mon.keyring --import-keyring /etc/ceph/$CEPH.client.admin.keyring
Начальная карта:
monmaptool --create --add $HOST $ADDR --fsid $UUID /tmp/monmap monmaptool --print /tmp/monmap
Запуск:
mkdir -pv /var/lib/ceph/mon/$CEPH-$HOST ceph-mon --mkfs --id $HOST --monmap /tmp/monmap --keyring /tmp/$CEPH.mon.keyring chown -Rv ceph:ceph /var/lib/ceph/mon systemctl enable ceph-mon.target systemctl --now enable ceph-mon@$HOST
Проверки и настройки:
ceph -s
ceph mon enable-msgr2
ceph auth list
Дополнительное право будущему MGR:
ceph auth get client.bootstrap-osd ceph auth caps client.bootstrap-osd mon 'profile bootstrap-osd' mgr 'allow r' ceph auth get client.bootstrap-osd
OSD #1
Получить ключ и создать OSD:
ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/$CEPH.keyring ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring ceph-volume lvm create --data /dev/vda2
MGR #1
Нужен OSD для собственного пула .mgr
mkdir -pv /var/lib/ceph/mgr/$CEPH-$HOST ceph auth get-or-create mgr.$HOST \ mon 'allow profile mgr' \ osd 'allow *' \ mds 'allow *' \ -o /var/lib/ceph/mgr/$CEPH-$HOST/keyring chown -Rv ceph:ceph /var/lib/ceph/mgr
Запуск:
systemctl enable ceph-mgr.target systemctl --now enable ceph-mgr@$HOST
Dashboard
ceph mgr module ls ceph mgr module enable dashboard ceph dashboard create-self-signed-cert echo 'password' > /tmp/password.txt ceph dashboard ac-user-create admin -i /tmp/password.txt administrator ss -lntp | grep 443
Browser -> https://host:8443 -> admin/password
Добавление/удаление MON/OSD/MGR
# ceph osd pool ls .mgr # ceph osd pool set .mgr size 3 set pool 1 size to 3
ceph osd tree ceph osd ls ceph osd df ceph osd dump +OSD ---- См. выше -OSD ----
Подключение к libvirt
Название RBD-пула:
POOL="libvirt"
Создание:
ceph osd pool create $POOL ceph osd pool set $POOL pg_autoscale_mode on ceph osd pool application enable $POOL rbd rbd pool init $POOL #ceph auth get-or-create client.$POOL mon "allow r" osd "allow rwx pool=$POOL" #ceph auth get-or-create client.$POOL mon "profile rbd" osd "profile rbd pool=$POOL" echo; ceph auth get-key client.$POOL; echo; echo
Последняя строка - это значение SECRET (см. далее)
Подготовка libvirt:
apt install libvirt-daemon-driver-storage-rbd qemu-block-extra
systemctl restart libvirtd
Регистрация «секрета»:
SECRET='(см.выше)' SECRET_UUID="$(cat /proc/sys/kernel/random/uuid)" virsh secret-list cat > /tmp/secret.xml << EOF <secret ephemeral='no' private='no'> <uuid>$SECRET_UUID</uuid> <usage type='ceph'> <name>client.libvirt secret</name> </usage> </secret> EOF virsh secret-define /tmp/secret.xml virsh secret-set-value --secret $SECRET_UUID --base64 "$SECRET" virsh secret-list
Подключение :
MON="<mon-ip>" POOL="libvirt" virsh pool-define-as ceph-pool rbd \ --source-host $MON \ --source-name $POOL \ --auth-type ceph \ --auth-username libvirt \ --secret-uuid $SECRET_UUID virsh pool-start ceph-pool virsh pool-autostart ceph-pool virsh pool-info ceph-pool
Пример:
<pool type="rbd"> <name>ceph-pool</name> <uuid>f33ffc11-5258-42d9-a3b4-29d56deae4d4</uuid> <capacity unit="bytes">16101933056</capacity> <allocation unit="bytes">4096</allocation> <available unit="bytes">16073302016</available> <source> <host name="192.168.0.1" port='6789'/> <host name="192.168.0.2"/> <host name="192.168.0.3"/> <name>libvirt</name> <auth type="ceph" username="libvirt"> <secret uuid="fd293801-a4c6-486a-a741-430a947f2824"/> </auth> </source> </pool>
Удаление пула
ceph config set global mon_allow_pool_delete true ceph osd pool ls ceph osd pool delete libvirt libvirt --yes-i-really-really-mean-it ceph osd pool ls
. . . РАЗОБРАТЬ . . .
/var/lib/ceph/crash
# systemctl status ceph-crash
○ ceph-crash.service - Ceph crash dump collector
Loaded: loaded (/lib/systemd/system/ceph-crash.service; disabled; preset: enabled)
Active: inactive (dead)
<pool type='rbd'>
<name>my_rbd_pool</name>
<source>
<name>rbd_pool_name_in_ceph</name>
<host name='monitor1.example.org' port='6789'/>
<host name='monitor2.example.org' port='6789'/>
<auth type='ceph' username='libvirt_user'>
<secret usage='libvirt_user_secret'/>
</auth>
</source>
<target>
<path>/dev/rbd/rbd_pool_name_in_ceph</path>
</target>
</pool>
ceph mgr module disable restful
