ceph файловая система

Thank you for reading this post, don't forget to subscribe!

Создание и монтирование файловой системы Ceph

  1. Создай­те MDS (сер­вер мета­дан­ных) на узле, для кото­ро­го вы хоти­те уста­но­вить MDS.

Выпол­нять необ­хо­ди­мо из дирек­то­рии с кон­фи­гу­ра­ци­ей Ceph.

ceph-deploy mds create swarm_node1_183
ceph-deploy mds create swarm_node2_184
ceph-deploy mds create swarm_node3_185

  1. Создай­те как мини­мум 2 пула RADOS на узле MDS и акти­ви­руй­те сер­вер MetaData. Для pg_num, кото­рый ука­зан в кон­це коман­ды созда­ния, обра­ти­тесь к офи­ци­аль­но­му доку­мен­ту и выбе­ри­те соот­вет­ству­ю­щее зна­че­ние. 

# create pools

[root@swarm_node1_183~]$ ceph osd pool create cephfs_data 128 

pool 'cephfs_data' created

[root@swarm_node1_183~]$ ceph osd pool create cephfs_metadata 128 

pool 'cephfs_metadata' created

# enable pools (вклю­ча­ем пул)

[root@swarm_node1_183~]$ ceph fs new cephfs cephfs_metadata cephfs_data 

new fs with metadata pool 2 and data pool 1

# show list

[root@swarm_node1_183~]$ ceph fs ls 

name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

[root@swarm_node1_183 ~]$ ceph mds stat 

e4: 1/1/1 up {0=node01=up:creating}

  1. Смон­ти­руй­те CephFS на кли­ен­те.
    Созда­дим директорию:
    mkdir /ceph-DATA
    Cко­пи­ру­ем secret из файла:

    cat /etc/ceph/ceph.client.admin.keyring
    и выпол­ним сле­ду­ю­щую команду:

    mount -t ceph swarm_node1_183:/ /ceph-DATA -o name=admin,secret=AQD++lxdDfy/BRAA6QEzEanMTxw92eS2HfNW/g==
    на тач­ках swarm_node2_184 и swarm_node3_185 выпол­ня­ем тоже самое:


    [root@swarm_node2_184 ~]# mount -t ceph swarm_node2_184:/ /ceph-DATA -o name=admin,secret=AQD++lxdDfy/BRAA6QEzEanMTxw92eS2HfNW/g==
    [root@ swarm_node3_185 ~]# mount -t ceph swarm_node3_185:/ /ceph-DATA -o name=admin,secret=AQD++lxdDfy/BRAA6QEzEanMTxw92eS2HfNW/g==[root@swarm_master1_180 ~]# mount -t ceph swarm_node2_184:/ /ceph-DATA -o name=admin,secret=AQD++lxdDfy/BRAA6QEzEanMTxw92eS2HfNW/g==[root@swarm_master2_181 ~]# mount -t ceph swarm_node2_184:/ /ceph-DATA -o name=admin,secret=AQD++lxdDfy/BRAA6QEzEanMTxw92eS2HfNW/g==[root@swarm_master3_182 ~]# mount -t ceph swarm_node2_184:/ /ceph-DATA -o name=admin,secret=AQD++lxdDfy/BRAA6QEzEanMTxw92eS2HfNW/g==

Как видим,доступный объ­ём 2.8 Gb, теперь мы можем добав­лять дан­ные в дирек­то­рию /ceph-DATA и они будут доступ­ны на всех нодах

Что­бы дан­ный раз­дел мон­ти­ро­вал­ся авто­ма­ти­че­ски при перезагрузке(на кли­ен­тах), посмот­рим secretkey в файле:
[root@swarm_master1_180 ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQD++lxdDfy/BRAA6QEzEanMTxw92eS2HfNW/g==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"

и доба­вим в файл: /etc/fstab сле­ду­ю­щую запись:

На масте­рах соответственно:

[root@swarm_node1_183 ~]# cat /etc/fstab | grep ceph-DATA
192.168.1.183:6789:/ /ceph-DATA ceph name=admin,secret=AQD++lxdDfy/BRAA6QEzEanMTxw92eS2HfNW/g==,_netdev,noatime 0 2
[root@swarm_node2_184 ~]# cat /etc/fstab | grep ceph-DATA
192.168.1.184:6789:/ /ceph-DATA ceph name=admin,secret=AQD++lxdDfy/BRAA6QEzEanMTxw92eS2HfNW/g==,_netdev,noatime 0 2
[root@swarm_node3_185 ~]# cat /etc/fstab | grep ceph-DATA
192.168.1.185:6789:/ /ceph-DATA ceph name=admin,secret=AQD++lxdDfy/BRAA6QEzEanMTxw92eS2HfNW/g==,_netdev,noatime 0 2

Гото­во, теперь в дирек­то­рии /ceph-DATA дан­ные будут реп­ли­ци­ро­вать­ся меж­ду нодами.

Расширяем доступный дисковый объём:

после чего пере­за­пус­ка­ем все сер­ви­сы на нодах:
systemctl restart ceph\*.service
systemctl restart ceph\*.target

воз­мож­но потре­бу­ет­ся ребут­нуть тачки:
reboot

обя­за­тель­но после пере­за­гу­зок ждём когда вос­ста­но­вит­ся ceph кла­стер и проверяем:
[root@swarm_node2_184 ~]# ceph health
HEALTH_OK

[root@swarm_node1_183 ~]# ceph osd pool set-quota cephfs_data max_bytes 0
[root@swarm_node1_183 ~]# ceph osd pool set-quota cephfs_data max_objects 0
[root@swarm_node1_183 ~]# ceph osd pool get-quota cephfs_data
quotas for pool 'cephfs_data':
max objects: N/A
max bytes : N/A

 

Меняем уровень репликации с 3х на 2:

необ­хо­ди­мо попра­вить кон­фиг файл на ноде отку­да про­из­во­ди­лась установка:
/var/ceph-admin/ceph.conf доба­вив строку:
osd pool default size = 2
после чего выпол­нить команду:
[ceph@swarm_node1_183 ceph-admin]$ ceph-deploy --overwrite-conf config push swarm_node1_183 swarm_node2_184 swarm_node3_185

и выпол­ним сле­ду­ю­щие команды:
[root@swarm_node1_183 ceph-admin]# ceph osd pool set ИМЯ_ПУЛА size 2
[root@swarm_node1_183 ceph-admin]# ceph osd pool set ИМЯ_ПУЛА min_size 1

 

Изменяем правила "дробления" (CRUSH)

В основ­ной кон­фиг /var/ceph-admin/ceph.conf доба­вим стро­ку osd pool default size = 2 она гово­рит о том, что мы будем исполь­зо­вать репли­ка­цию с коэф­фи­ци­ен­том 2, по умол­ча­нию ceph исполь­зу­ет репли­ку 3. Запись osd_crush_update_on_start = false запре­ща­ет ceph управ­лять CRUSH кар­той кла­сте­ра. Ее мы будем пра­вить рука­ми и импор­ти­ро­вать в кластер.

зай­мем­ся созда­ни­ем CRUSH кар­ты. Вытя­ги­ва­ем теку­щую кар­ту кла­сте­ра командой:

Деком­пи­ли­ру­ем ее в чело­ве­че­ский формат:

И при­во­дим ее к тако­му виду:

[codesyntax lang="bash" blockstate="collapsed"]

[/codesyntax]

Ком­пи­ли­ру­ем ее обрат­но и скарм­ли­ва­ем ceph:

Возможные проблемы и их решения:

[root@swarm_master2_181 ~]# ceph -s
cluster:
id: 4e3f0791-34d7-4576-add4-ec632275fb3f
health: HEALTH_WARN
insufficient standby MDS daemons available

services:
mon: 3 daemons, quorum swarm_node1_183,swarm_node2_184,swarm_node3_185
mgr: swarm_node2_184(active), standbys: swarm_node3_185, swarm_node1_183
mds: cephfs-1/1/1 up {0=swarm_node2_184=up:active}
osd: 3 osds: 3 up, 3 in

data:
pools: 3 pools, 224 pgs
objects: 173 objects, 402 MiB
usage: 10 GiB used, 9.7 GiB / 20 GiB avail
pgs: 224 active+clean

io:
client: 24 KiB/s wr, 0 op/s rd, 3 op/s wr

смот­рим статус:

ука­зы­ва­ем коли­че­ство актив­ных mds
[root@swarm_master2_181 ~]# ceph fs set cephfs max_mds 3
захо­дим на одну из нод:
[root@swarm_master1_180 ceph]# ssh swarm_node1_183
запус­ка­ем сервис:
[root@swarm_node1_183 ~]# systemctl start ceph-mds@swarm_node1_183
про­ве­ря­ем статус:

спу­стя ещё вре­мя, повтор­но проверям:

и на тре­тьей ноде:
[root@swarm_node3_185 ~]# systemctl startceph-mds@swarm_node3_185

у нас полу­чи­лось 3 актив­ные ноды и ни одной Standby, испра­вим это:
[root@swarm_node1_183 ~]# ceph fs set cephfs max_mds 2

как видим, 2 актив­ные ноды и 1 нода Standby

 

Снятие снапшота блочного устройства и откат

В момент когда у нас еще всё смон­ти­ро­ва­но и еще всё рабо­та­ет мож­но снять снап­шот коман­дой:

rbd snap create rbd/jenkins@snapshot1 --name client.admin

Затем мож­но поуда­лять всё из смон­ти­ро­ван­ной дирек­то­рии.

Что­бы вос­ста­но­вить­ся из снап­шо­та необ­хо­ди­мо:

  1. umount /mnt/cephtest/
  2. sudo rbd unmap jenkins --name client.admin -m tst-vsrv-ceph1,tst-vsrv-ceph2,tst-vsrv-ceph3
  3. rbd snap rollback rbd/jenkins@snapshot1 --name client.admin

Rolling back to snapshot: 100% complete…done.

  1. sudo rbd map jenkins --name client.admin -m node1,node2,node3
  2. mount /dev/rbd/rbd/jenkins /mnt/cephtest/

Все мани­пу­ля­ции с mount umount, map unmap необ­хо­ди­мы для того что бы систе­ма была не была забло­ки­ро­ва­на на запись.

Захо­дим в дирек­то­рию и видим, что все уда­лен­ные фай­лы восстановились