iSCSI арқылы Ceph - немесе гамакта тұрып шаңғы тебу

Біздің арамызда (цефоводов) «кәсіби экстремалды» ұнатпайтындар бар ма?

Бұл екіталай - әйтпесе біз бұл өте қызықты және күлкілі өніммен айналыспас едік.

Ceph операциясына қатысқандардың көпшілігі өте жиі емес (дәлірек айтсақ өте сирек), бірақ кейде сұранысқа ие болған жағдайда - Ceph-ті iSCSI немесе FC арқылы қосуды кездестірді. Не үшін? Мысалы, қандай да бір себептермен әлі виртуализацияланбаған Windows немесе Solaris серверіне Ceph-тен кескінді жіберіңіз. Немесе виртуалдандырылған, бірақ Ceph жасай алмайтын гипервизорды пайдалану - және біз білетіндей, олардың көптігі бар. Мысалы? Мысалы, белсенді түрде қолданылатын HyperV немесе ESXi. Ал егер тапсырма Ceph-тен қонаққа арналған құрылғыға суретке қызмет көрсетуден туындаса, бұл өте қызықты тапсырмаға айналады.

Сонымен, берілген:

  1. қазірдің өзінде жұмыс істеп тұрған Ceph кластері
  2. iSCSI арқылы қызмет көрсету керек бұрыннан бар кескін
  3. Бассейн атауы mypool, сурет атауы бейнесі

БАСТА?

Біріншіден, біз FC немесе iSCSI туралы айтатын болсақ, бізде бастамашы және мақсатты сияқты нысандар бар. Мақсат - бұл сервер, бастамашы - клиент. Біздің міндетіміз - Ceph кескінін бастамашыға ең аз күшпен жіберу. Бұл біз мақсатты кеңейтуіміз керек дегенді білдіреді. Бірақ қайда, қандай компьютерде?

Бақытымызға орай, Ceph кластерінде IP мекенжайы бекітілген және Ceph ең маңызды құрамдастарының бірі конфигурацияланған кем дегенде бір құрамдас бар және бұл компонент монитор болып табылады. Тиісінше, біз мониторға iSCSI нысанасын орнатамыз (және бір уақытта бастамашы, кем дегенде сынақтар үшін). Мен мұны CentOS жүйесінде жасадым, бірақ шешім кез келген басқа тарату үшін де жарамды - жай ғана пакеттерді таратуда қолайлы етіп орнату керек.

# yum -y install iscsi-initiator-utils targetcli

Орнатылған бумалардың мақсаты қандай?

  • targetcli — Linux ядросына енгізілген SCSI мақсатты басқаруға арналған утилита
  • iscsi-initiator-utils — Linux ядросына енгізілген iSCSI бастамашысын басқару үшін пайдаланылатын утилиталары бар пакет

Кескінді iSCSI арқылы бастамашыға жіберу үшін оқиғаларды әзірлеудің екі нұсқасы бар - мақсаттың пайдаланушы кеңістігі серверін пайдаланыңыз немесе кескінді операциялық жүйеге көрінетін блоктық құрылғы ретінде қосыңыз және оны iSCSI арқылы экспорттаңыз. Біз екінші жолмен жүреміз - пайдаланушы кеңістігінің сервері әлі де «эксперименталды» күйде және өнімді пайдалануға дайын емес. Сонымен қатар, онымен көп сөйлесуге және (о, сұмдық!) дауласуға болатын тұзақтар бар.

Егер біз ұзақ қолдау циклі бар біршама тұрақты дистрибуцияны қолданатын болсақ, онда бізде бар ядро ​​​​небір ежелгі, ежелгі нұсқа. Мысалы, CentOS7-де 3.10.*, CentOS8-де 4.19. Бізді кем дегенде 5.3 (дәлірек айтсақ 5.4) және одан да жаңа ядро ​​қызықтырады. Неліктен? Өйткені әдепкі бойынша Ceph кескіндерінде ескі ядролармен үйлесімді емес опциялар жиыны қосылған. Бұл біздің таратуымыз үшін репозиторийді жаңа ядромен қосамыз (мысалы, CentOS үшін бұл elrepo), жаңа ядроны орнатамыз және жаңа ядромен жұмыс істеу үшін жүйені қайта жүктейміз:

  • Эксперимент үшін таңдалған мониторға қосылыңыз
  • Біз elrepo репозиторийлерін нұсқауларға сәйкес қосамыз - elrepo.org/tiki/tiki-index.php
  • Ядроны орнату: yum -y —enablerepo=elrepo-kernel орнату kernel-ml
  • Монитормен серверді қайта жүктеңіз (бізде үш монитор бар, солай ма?)

Кескінді блоктық құрылғы ретінде қосу

# rbd map mypool/myimage
/dev/rbd0

Тек мақсатты конфигурациялау ғана қалады. Бұл мысалда мен мақсатты деп аталатын жерде конфигурациялаймын. демо режимі - аутентификациясыз, көрінетін және барлығына қолжетімді. Өндірістік ортада аутентификацияны конфигурациялағыңыз келуі мүмкін, бірақ бұл бүгінгі жай ғана көңіл көтеру жаттығуы үшін аздап тыс.

/dev/rbd/mypool/myimage файлымен байланысты disk1 деп аталатын серверді жасаңыз. Көрсетілген файл udev демонымен /dev/rbd0-ға автоматты түрде жасалған символдық сілтеме болып табылады. Біз символдық сілтемені қолданамыз, себебі rbd құрылғысының атауы Ceph кескіндерінің хостқа қосылу ретіне байланысты өзгеруі мүмкін.

Backend жасаңыз:

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

iSCSI нысанасын жасаңыз:

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

Біз серверді LUN ретінде мақсатқа қосамыз:

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

Демо режимі үшін мақсатты конфигурациялайық:

# 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

Конфигурацияны сақтаңыз:

# targetcli saveconfig

Мақсаттың қолжетімділігін тексеру:

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

Біз мақсатты байланыстырамыз:

# 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.

Барлығын дұрыс орындасаңыз, серверде SCSI құрылғысына ұқсайтын, бірақ іс жүзінде iSCSI нысанасы арқылы қол жеткізілетін Ceph кескіні болып табылатын жаңа диск пайда болады. Жүктеу проблемаларын болдырмау үшін қосылған дискіні және анықталған мақсатты жергілікті инициатордан алып тастаған дұрыс:

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

Кескін автоматты түрде қосылып, қосылымнан кейін мақсат стратификациялануы үшін конфигурацияны сақтау ғана қалады. Нысананы ұшыру екі қадамнан тұрады - RBD қосу және нысананы іс жүзінде іске қосу.

Алдымен, RBD кескіндерінің хостқа автоматты қосылуын конфигурациялайық. Бұл /etc/ceph/rbdmap файлына келесі жолдарды қосу арқылы орындалады:

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

Мақсатты конфигурацияны қалпына келтіру біршама күрделірек - конфигурацияны қалпына келтіретін systemd үшін бірлікті жазу керек:

# 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

Соңғы сынақ - мониторды қайта жүктеу (бұл енді iSCSI мақсаты). Айта кету керек, егер біз пәрмен арқылы бастамашының дерекқорын тазаламаған болсақ iscsiadm -n discoverydb -o жою ... сіз жүктелмейтін немесе ұзақ уақытты алатын серверге тап болуыңыз мүмкін.

Не қалды?

Мақсатты жібергіміз келетін сервердегі бастамашыны конфигурациялаңыз.

Мақсатымыздың ақауларға төзімділігін қалай қамтамасыз етуге болады?

Басқа мониторлардағы мақсатты конфигурациялауға және көп жолды орнатуға болады (vmware мұны түсінеді және тіпті жұмыс істейді, Hyper-V түсінбейді - бұл SCSI құлыптарын қажет етеді). Ядродағы Ceph клиенті кэштеуді пайдаланбайтындықтан, бұл өте қолайлы. Немесе тағы бір нұсқа - үш құрамдас бөліктен тұратын кластерлік ресурсты жасау - арнайы мақсатты IP мекенжайы және rbdmap және scsi-target қызметтері және бұл ресурсты кластерлеу құралдары арқылы басқару (кардиостимуляторды кім айтты?)

Кейінгі сөздің орнына

Түсінікті, бұл мақала аздап әзіл - бірақ мен «жылдам және мысалдармен» бір уақытта бірнеше танымал тақырыптарды қарастыруға тырыстым - iSCSI мақсаты, ол міндетті түрде Ceph кескіндерін экспорттамауы мүмкін - бірақ, мысалы, LVM көлемдерін экспорттау, iSCSI инициаторымен жұмыс істеу негіздері (мақсатты сканерлеу, мақсатқа қалай қосылу, ажырату, дерекқордан мақсатты жазбаны жою), systemd және басқалар үшін жеке блокты жазу

Осы тәжірибені толығымен қайталамасаңыз да, кем дегенде осы мақаладан бір нәрсе сізге пайдалы болады деп үміттенемін.

Ақпарат көзі: www.habr.com

пікір қалдыру