iSCSI vasitəsilə Ceph - və ya hamakda dayanarkən xizək sürmək

Aramızda (tsefovodov) “peşəkar ifratı” sevməyənlər varmı?

Bu, çətin ki, əks halda bu son dərəcə maraqlı və gülməli məhsulla dolaşmazdıq.

Ceph-in əməliyyatında iştirak edənlərin çoxu çox tez-tez deyil (daha doğrusu, çox nadir hallarda), lakin bəzən tələb olunan vəziyyətdə - Ceph-i iSCSI və ya FC vasitəsilə birləşdirən birinə rast gəldilər. Nə üçün? Yaxşı, məsələn, Ceph-dən bir Windows və ya Solaris serverinə nədənsə hələ virtuallaşdırılmamış bir şəkil təqdim edin. Və ya virtuallaşdırılmış, lakin Ceph edə bilməyən bir hipervizordan istifadə etməklə - və bildiyimiz kimi, onlardan çoxu var. Misal üçün? Yaxşı, məsələn, aktiv şəkildə istifadə olunan HyperV və ya ESXi. Və vəzifə Ceph-dən qonaq maşınına bir görüntü təqdim etməkdən yaranarsa, bu çox maraqlı bir işə çevrilir.

Beləliklə, verilmişdir:

  1. artıq işləyən Ceph klasteri
  2. iSCSI vasitəsilə təqdim edilməli olan artıq mövcud olan şəkil
  3. Hovuzun adı mypool, şəkil adı görüntü

başlasın?

Əvvəla, biz FC və ya iSCSI haqqında danışarkən, təşəbbüskar və hədəf kimi obyektlərə sahibik. Hədəf əslində serverdir, təşəbbüskar isə müştəridir. Bizim vəzifəmiz Ceph şəklini minimum səylə təşəbbüskara təqdim etməkdir. Bu o deməkdir ki, biz hədəfi genişləndirməliyik. Bəs harada, hansı kompüterdə?

Xoşbəxtlikdən, Ceph klasterində IP ünvanı sabit olan və Ceph-in ən vacib komponentlərindən birinin konfiqurasiya edildiyi ən azı bir komponentimiz var və həmin komponent monitordur. Müvafiq olaraq, monitorda bir iSCSI hədəfi quraşdırırıq (və eyni zamanda, ən azı testlər üçün bir təşəbbüskar). Mən bunu CentOS-da etdim, lakin həll hər hansı digər paylama üçün də uyğundur - sadəcə paketləri paylamanızda məqbul olan şəkildə quraşdırmaq lazımdır.

# yum -y install iscsi-initiator-utils targetcli

Quraşdırılmış paketlərin məqsədi nədir?

  • targetcli — Linux nüvəsində quraşdırılmış SCSI hədəfini idarə etmək üçün bir yardım proqramı
  • iscsi-initiator-utils — Linux nüvəsinə daxil edilmiş iSCSI təşəbbüskarını idarə etmək üçün istifadə olunan kommunal proqramları olan paket

Şəkili iSCSI vasitəsilə təşəbbüskara təqdim etmək üçün hadisələrin inkişafı üçün iki variant var - hədəfin istifadəçi sahəsinin arxa ucundan istifadə edin və ya təsviri əməliyyat sisteminə görünən blok cihazı kimi birləşdirin və iSCSI vasitəsilə ixrac edin. İkinci yolla gedəcəyik - istifadəçi sahəsinin arxa hissəsi hələ də "eksperimental" vəziyyətdədir və məhsuldar istifadəyə bir qədər hazır deyil. Bundan əlavə, onunla çox danışa biləcəyiniz və (oh dəhşət!) mübahisə edə biləcəyiniz tələlər var.

Əgər uzun bir dəstək dövrü ilə bir qədər sabit paylamadan istifadə etsək, onda bizdə olan nüvə hansısa qədim, qədim versiyadır. Məsələn, CentOS7-də 3.10.*, CentOS8-də 4.19-dur. Bizi isə ən azı 5.3 (daha doğrusu 5.4) və daha yeni bir nüvə maraqlandırır. Niyə? Çünki defolt olaraq Ceph şəkillərində köhnə nüvələrlə uyğun olmayan bir sıra seçimlər aktivləşdirilib. Bu o deməkdir ki, biz bölüşdürməmiz üçün deponu yeni nüvə ilə birləşdiririk (məsələn, CentOS üçün bu elrepo), yeni nüvəni quraşdırırıq və yeni nüvə ilə işləmək üçün sistemi yenidən işə salırıq:

  • Təcrübə üçün seçilmiş monitora qoşulun
  • Elrepo depolarını təlimatlara uyğun olaraq bağlayırıq - elrepo.org/tiki/tiki-index.php
  • Kerneli quraşdırın: yum -y —enablerepo=elrepo-kernel install kernel-ml
  • Monitor ilə serveri yenidən başladın (bizim üç monitorumuz var, elə deyilmi?)

Şəklin blok cihazı kimi qoşulması

# rbd map mypool/myimage
/dev/rbd0

Yalnız hədəfi konfiqurasiya etmək qalır. Bu nümunədə hədəfi sözdə konfiqurasiya edəcəyəm. demo rejimi - autentifikasiya olmadan, görünən və hər kəs üçün əlçatandır. İstehsal mühitində, çox güman ki, autentifikasiyanı konfiqurasiya etmək istəyəcəksiniz - lakin bu, bugünkü əyləncə üçün məşq üçün bir qədər kənardadır.

/dev/rbd/mypool/myimage faylı ilə əlaqəli disk1 adlı backend yaradın. Göstərilən fayl udev demonu tərəfindən /dev/rbd0-a avtomatik yaradılmış simvolik keçiddir. Biz simvolik keçiddən istifadə edirik, çünki rbd cihazının adı Ceph şəkillərinin hosta qoşulma ardıcıllığından asılı olaraq dəyişə bilər.

Backend yaradın:

# targetcli /backstores/block create disk1 /dev/rbd/mypool/myimage

iSCSI hədəfi yaradın:

# targetcli /iscsi create iqn.2020-01.demo.ceph:mypool

Arxa ucunu LUN olaraq hədəfə bağlayırıq:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/luns create /backstores/block/disk1

Demo rejimi üçün hədəfi konfiqurasiya edək:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute demo_mode_write_protect=0
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute generate_node_acls=1
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute cache_dynamic_acls=1

Konfiqurasiyanı yadda saxla:

# targetcli saveconfig

Hədəfin varlığının yoxlanılması:

# iscsiadm -m discovery -t st -p 127.0.0.1:3260
127.0.0.1:3260,1 iqn.2020-01.demo.ceph:mypool

Hədəfi bağlayırıq:

# iscsiadm -m node --login
Logging in to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] (multiple)
Login to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] successful.

Hər şeyi düzgün etmisinizsə, serverdə SCSI cihazına bənzəyən yeni disk görünəcək, lakin əslində Ceph-dən bir görüntüdür və iSCSI hədəfi vasitəsilə əldə edilir. Yükləmə ilə bağlı problemlərin qarşısını almaq üçün bağlı diski və aşkar edilmiş hədəfi yerli başlatıcıdan çıxarmaq daha yaxşıdır:

# iscsiadm -m node --logout
# iscsiadm -m discoverydb -o delete -t st -p 127.0.0.1:3260

Qalan şey konfiqurasiyanı davam etdirməkdir ki, şəkil avtomatik qoşulsun və qoşulduqdan sonra hədəf təbəqələşsin. Hədəfin atılması iki addımdan ibarətdir - RBD-ni birləşdirmək və hədəfi əslində işə salmaq.

Əvvəlcə RBD şəkillərinin hosta avtomatik qoşulmasını konfiqurasiya edək. Bu, /etc/ceph/rbdmap faylına aşağıdakı sətirləri əlavə etməklə həyata keçirilir:

# cat /etc/ceph/rbdmap
# RbdDevice Parameters
mypool/myimage id=admin
# systemctl enable rbdmap

Hədəf konfiqurasiyasını bərpa etmək bir az daha mürəkkəbdir - konfiqurasiyanı bərpa edəcək systemd üçün vahid yazmalıyıq:

# cat /usr/lib/systemd/system/scsi-target.service
[Unit] Description=Start iSCSI target

After=network-online.target rbdmap.service
Before=remote-fs-pre.target
Wants=network-online.target remote-fs-pre.target

[Service] Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/targetcli restoreconfig

[Install] WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl enable scsi-target

Son sınaq monitorumuzu yenidən işə salmaqdır (indi iSCSI hədəfidir). Qeyd etmək lazımdır ki, əmrlə təşəbbüsçünün məlumat bazasını təmizləməsəydik iscsiadm -n discoverydb -o sil... yüklənməyən və ya yüklənməsi çox vaxt aparan bir serverlə nəticələnə bilərsiniz.

Nə qaldı?

Hədəfi göndərmək istədiyimiz serverdə təşəbbüskarı konfiqurasiya edin.

Hədəfimizin səhvlərə dözümlülüyünü necə təmin etmək olar?

Siz eyni şəkildə digər monitorlarda hədəfləri konfiqurasiya edə və çox yollu qura bilərsiniz (vmware bunu başa düşəcək və hətta işləyəcək, Hyper-V başa düşməyəcək - bunun üçün SCSI kilidləri tələb olunur). Kerneldən olan Ceph müştərisi keşləmədən istifadə etmədiyi üçün bu olduqca işləkdir. Və ya başqa bir seçim, üç komponentdən ibarət klaster resursu yaratmaqdır - xüsusi hədəf IP ünvanı və rbdmap və scsi-hədəf xidmətləri və bu resursu klasterləşdirmə alətləri vasitəsilə idarə etmək (kardiostimulyatoru kim dedi?)

Bir sözlə yerinə

Aydın olduğu kimi, bu məqalə bir az zarafatdır - amma mən "tez və misallarla" eyni anda bir neçə kifayət qədər populyar mövzunu nəzərdən keçirməyə çalışdım - iSCSI hədəfi, bu mütləq Ceph şəkillərini ixrac etməyə bilər - amma məsələn, LVM həcmlərini ixrac edin, iSCSI təşəbbüskarı ilə işləməyin əsasları (hədəfi necə skan etmək, hədəfə necə qoşulmaq, əlaqəni kəsmək, verilənlər bazasından hədəf girişini silmək), systemd və digərləri üçün öz vahidinizi yazmaq

Ümid edirəm ki, bütün bu təcrübəni tam şəkildə təkrarlamasanız belə, heç olmasa bu məqalədən bir şey sizin üçün faydalı olacaqdır.

Mənbə: www.habr.com

Добавить комментарий