astra:ceph
Содержание
Ceph: черновики
Общие сведения
# astra-version -b; ceph -v 1.8.3.8 ceph version 17.2.6 quincy (stable)
Минимальная система с одним диском:
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS vda 252:0 0 20G 0 disk ├─vda1 252:1 0 5G 0 part / └─vda2 252:2 0 15G 0 part
Идея заключается в установке работоспособного хранилища на один узел (сервер) с одним диском
В данном случае ОС + ПО располагаются на первом отформатированном разделе диска, а второй сырой раздел будет отдан под данные
Первый узел
MON
Так как на первом узле будут три обязательные сущности (MON, OSD и MGR), то можно установить метапакет ceph и несколько вспомогательных:
apt install ceph \
ceph-volume ceph-mgr-dashboard python3-distutils
Подготовка ключей и конфигураций :
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 = off osd_pool_default_size = 1 osd_pool_default_min_size = 1 EOF ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring \ --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *' ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring \ --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r' ceph-authtool --create-keyring /tmp/ceph.mon.keyring \ --gen-key -n mon. --cap mon 'allow *' ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring monmaptool --create --add $HOST $ADDR --fsid $UUID /tmp/monmap mkdir -pv /var/lib/ceph/mon/$CEPH-$HOST ceph-mon --mkfs -i $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 mon enable-msgr2 ceph --status
OSD
ceph-volume lvm create --data /dev/vda2 ceph --status
MGR
Нужен 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
Настройка:
ceph mgr module disable restful 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
Подключение к 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>
