Ceph melalui iSCSI - atau bermain ski sambil berdiri di buaian

Adakah di kalangan kita (tsefovodov) yang tidak suka "ekstrem profesional"?

Tidak mungkin - jika tidak, kami tidak akan bermain-main dengan produk yang sangat menarik dan kelakar ini.

Ramai daripada mereka yang terlibat dalam operasi Ceph telah menemui satu yang tidak terlalu kerap (atau lebih tepatnya sangat jarang) tetapi kadangkala dalam kes permintaan - menghubungkan Ceph melalui iSCSI atau FC. Untuk apa? Baik, sebagai contoh, serahkan imej dari Ceph ke pelayan Windows atau Solaris yang masih belum dimayakan atas sebab tertentu. Atau maya, tetapi menggunakan hipervisor yang tidak boleh melakukan Ceph - dan, seperti yang kita tahu, terdapat banyak daripadanya. Sebagai contoh? Nah, sebagai contoh, HyperV atau ESXi, yang digunakan secara aktif. Dan jika timbul tugas untuk menyampaikan imej dari Ceph kepada mesin tetamu, ini bertukar menjadi tugas yang sangat menarik.

Jadi, diberikan:

  1. kluster Ceph yang sudah berjalan
  2. imej sedia ada yang mesti disampaikan melalui iSCSI
  3. Nama kolam mypool, nama imej gambaran saya

Mulakan?

Pertama sekali, apabila kita bercakap tentang FC atau iSCSI, kita mempunyai entiti seperti inisiator dan sasaran. Sasaran sebenarnya adalah pelayan, pemula adalah pelanggan. Tugas kami ialah menyerahkan imej Ceph kepada pemula dengan usaha yang minimum. Ini bermakna kita mesti mengembangkan sasaran. Tetapi di mana, pada komputer apa?

Nasib baik, dalam kluster Ceph kami mempunyai sekurang-kurangnya satu komponen yang alamat IPnya ditetapkan dan yang mana salah satu komponen Ceph yang paling penting dikonfigurasikan, dan komponen itu ialah monitor. Sehubungan itu, kami memasang sasaran iSCSI pada monitor (dan pemula pada masa yang sama, sekurang-kurangnya untuk ujian). Saya melakukan ini pada CentOS, tetapi penyelesaiannya juga sesuai untuk mana-mana pengedaran lain - anda hanya perlu memasang pakej dengan cara yang boleh diterima dalam pengedaran anda.

# yum -y install iscsi-initiator-utils targetcli

Apakah tujuan pakej yang dipasang?

  • targetcli β€” utiliti untuk menguruskan sasaran SCSI yang dibina ke dalam kernel Linux
  • iscsi-inisiator-utils - pakej dengan utiliti yang digunakan untuk mengurus pemula iSCSI yang dibina ke dalam kernel Linux

Untuk menyerahkan imej melalui iSCSI kepada pemula, terdapat dua pilihan untuk pembangunan acara - gunakan bahagian belakang ruang pengguna sasaran atau sambungkan imej sebagai peranti blok yang boleh dilihat oleh sistem pengendalian dan eksportnya melalui iSCSI. Kami akan pergi ke cara kedua - bahagian belakang ruang pengguna masih dalam keadaan "percubaan" dan sedikit tidak bersedia untuk kegunaan produktif. Di samping itu, terdapat perangkap dengannya, yang anda boleh bercakap banyak dan (oh seram!) Berhujah.

Jika kita menggunakan walaupun pengedaran yang agak stabil dengan kitaran sokongan yang panjang, maka kernel yang kita ada adalah versi kuno dan kuno. Sebagai contoh, dalam CentOS7 ia adalah 3.10.*, dalam CentOS8 ia adalah 4.19. Dan kami berminat dengan kernel sekurang-kurangnya 5.3 (atau lebih tepat 5.4) dan lebih baru. kenapa? Kerana secara lalai imej Ceph mempunyai set pilihan yang didayakan yang tidak serasi dengan kernel lama. Ini bermakna kami menyambungkan repositori dengan kernel baharu untuk pengedaran kami (contohnya, untuk CentOS ini adalah elrepo), pasang kernel baharu dan but semula sistem untuk berfungsi dengan kernel baharu:

  • Sambungkan ke monitor yang dipilih untuk percubaan
  • Kami menyambungkan repositori elrepo mengikut arahan - elrepo.org/tiki/tiki-index.php
  • Pasang kernel: yum -y β€”enablerepo=elrepo-kernel install kernel-ml
  • But semula pelayan dengan monitor (kami mempunyai tiga monitor, bukan?)

Menyambungkan imej sebagai peranti blok

# rbd map mypool/myimage
/dev/rbd0

Yang tinggal hanyalah mengkonfigurasi sasaran. Dalam contoh ini, saya akan mengkonfigurasi sasaran dalam apa yang dipanggil. mod demo - tanpa pengesahan, boleh dilihat dan boleh diakses oleh semua orang. Dalam persekitaran pengeluaran, anda mungkin ingin mengkonfigurasi pengesahan - tetapi itu agak di luar skop untuk latihan hari ini yang hanya untuk berseronok.

Buat bahagian belakang bernama disk1 yang dikaitkan dengan fail /dev/rbd/mypool/myimage. Fail yang ditentukan ialah pautan simbolik yang dicipta secara automatik oleh daemon udev ke /dev/rbd0. Kami menggunakan pautan simbolik kerana nama peranti rbd boleh berubah bergantung pada susunan imej Ceph disambungkan kepada hos.

Buat bahagian belakang:

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

Buat sasaran iSCSI:

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

Kami menyambungkan bahagian belakang sebagai LUN kepada sasaran:

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

Mari konfigurasikan sasaran untuk mod demo:

# 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

Simpan konfigurasi:

# targetcli saveconfig

Memeriksa kehadiran sasaran:

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

Kami menyambungkan sasaran:

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

Jika anda melakukan semuanya dengan betul, cakera baharu akan muncul pada pelayan, yang kelihatan seperti peranti SCSI, tetapi sebenarnya imej daripada Ceph, diakses melalui sasaran iSCSI. Untuk mengelakkan masalah but, adalah lebih baik untuk mengalih keluar cakera yang disambungkan dan sasaran yang dikesan daripada pemula setempat:

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

Apa yang tinggal adalah untuk mengekalkan konfigurasi supaya imej disambungkan secara automatik dan, selepas sambungan, sasaran berstrata. Melancarkan sasaran terdiri daripada dua langkah - menyambungkan RBD dan sebenarnya melancarkan sasaran.

Mula-mula, mari kita konfigurasikan sambungan automatik imej RBD kepada hos. Ini dilakukan dengan menambah baris berikut pada fail /etc/ceph/rbdmap:

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

Memulihkan konfigurasi sasaran adalah sedikit lebih rumit - kita perlu menulis unit untuk systemd yang akan memulihkan konfigurasi:

# 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

Ujian terakhir adalah untuk but semula monitor kami (kini sasaran iSCSI). Perlu diingatkan bahawa jika kami tidak mengosongkan pangkalan data pemula dengan arahan iscsiadm -n discoverydb -o padam ... anda boleh berakhir dengan pelayan yang tidak memuatkan atau mengambil masa yang lama untuk dimuatkan.

Apa yang tinggal?

Konfigurasikan pemula pada pelayan di mana kita ingin menghantar sasaran.

Bagaimana untuk memastikan toleransi kesalahan sasaran kita?

Anda juga boleh mengkonfigurasi sasaran pada monitor lain dan menyediakan berbilang laluan (vmware akan memahami ini dan juga berfungsi, Hyper-V tidak akan faham - ia memerlukan kunci SCSI). Memandangkan klien Ceph dari kernel tidak menggunakan caching, ini agak boleh dilaksanakan. Atau pilihan lain ialah mencipta sumber kluster tiga komponen - alamat IP sasaran khusus dan perkhidmatan rbdmap dan sasaran scsi, dan mengurus sumber ini melalui alat pengelompokan (siapa kata perentak jantung?)

bukannya epilog

Seperti yang jelas, artikel ini adalah sedikit jenaka - tetapi di dalamnya saya cuba "dengan cepat dan dengan contoh" mempertimbangkan beberapa topik yang agak popular pada masa yang sama - sasaran iSCSI, yang mungkin tidak semestinya mengeksport imej Ceph - tetapi sebagai contoh, eksport volum LVM, asas bekerja dengan pemula iSCSI ( cara mengimbas sasaran, cara menyambung ke sasaran, memutuskan sambungan, memadam masukan sasaran daripada pangkalan data), menulis unit anda sendiri untuk systemd dan beberapa yang lain

Saya berharap walaupun anda tidak mengulangi keseluruhan percubaan ini sepenuhnya, sekurang-kurangnya sesuatu daripada artikel ini akan berguna kepada anda.

Sumber: www.habr.com

Tambah komen