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 орнотуу ядро-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-максат кызматтары жана бул ресурсту кластердик инструменттер аркылуу башкаруу (кардиостимуляторду ким айтты?)

ордуна эпилогунда жөнүндө

Көрүнүп тургандай, бул макала бир аз тамаша - бирок анда мен "тез жана мисалдар менен" бир эле учурда бир нече абдан популярдуу темаларды карап чыгууга аракет кылдым - iSCSI максаттуу, ал сөзсүз түрдө Ceph сүрөттөрүн экспорттоо мүмкүн эмес - бирок, мисалы, LVM көлөмдөрүн экспорттоо, iSCSI демилгечиси менен иштөөнүн негиздери (бутаны кантип сканерлөө керек, бутага кантип туташуу керек, ажыратуу, маалымат базасынан максаттуу жазууну жок кылуу), systemd үчүн өз бирдигин жазуу жана башкалар

Бул экспериментти толугу менен кайталабасаңыз да, жок дегенде ушул макаладан бир нерсе сизге пайдалуу болот деп ишенем.

Source: www.habr.com

Комментарий кошуу