Apakah ada di antara kita (cefovodov) yang tidak menyukai "profesional ekstrim"?
Tidak mungkin - kalau tidak kita tidak akan jungkir balik dengan produk yang sangat menarik dan lucu ini.
Banyak dari mereka yang terlibat dalam eksploitasi Ceph bertemu dengan seseorang yang tidak terlalu sering (tetapi bahkan sangat jarang) tetapi kadang-kadang menuntut kasus - untuk menghubungkan Ceph melalui iSCSI atau FC. Mengapa Sebagai contoh, kirimkan gambar dari Ceph ke server Windows atau Solaris yang belum tervirtualisasi. Atau divirtualisasi, tetapi melalui hypervisor yang Ceph tidak tahu caranya, dan seperti yang kita tahu, ada cukup banyak. Misalnya? Nah, misalnya, HyperV atau ESXi, yang aktif digunakan. Dan jika tugas muncul untuk mengirimkan gambar dari Ceph ke mesin tamu, ini berubah menjadi tugas yang sangat menarik.
Jadi, diberikan:
- sudah menjalankan cluster Ceph
- gambar yang ada yang harus dikirimkan melalui iSCSI
- Pool nama mypool , nama gambar myimage
Apakah kita akan mulai?
Pertama-tama, ketika kita berbicara tentang FC atau iSCSI, kita mendapatkan entitas seperti inisiator dan target. Target sebenarnya adalah server, inisiator adalah klien. Tugas kita adalah untuk mengirimkan gambar Ceph kepada penggagas dengan kerja minimal. Jadi kita harus mengerahkan target. Tapi di mana, di komputer mana?
Untungnya, di cluster Ceph kami memiliki setidaknya satu komponen yang alamat IP-nya telah diperbaiki dan di mana salah satu komponen Ceph yang paling penting dikonfigurasi, dan komponen ini adalah monitor. Dengan demikian, pada monitor kami menetapkan target iSCSI (dan initator pada saat yang sama, setidaknya untuk tes). Saya melakukannya pada CentOS, tetapi untuk distribusi lainnya solusinya juga cocok - cukup masukkan paket-paket dengan cara yang dapat diterima dalam distribusi Anda.
# yum -y install iscsi-initiator-utils targetcli
Apa tujuan dari paket yang diinstal?
- targetcli - Linux SCSI utilitas manajemen target untuk kernel Linux
- iscsi-initiator-utils - paket dengan utilitas yang digunakan untuk mengontrol inisiator iSCSI yang dibangun di dalam kernel Linux lagi
Untuk mengirimkan gambar melalui iSCSI ke penggagas, ada dua opsi untuk pengembangan acara - gunakan backend userspace dari target atau sambungkan gambar sebagai perangkat blok yang terlihat oleh sistem operasi dan ekspor melalui iSCSI. Kami akan pergi dengan cara kedua - backend userspace masih dalam keadaan "eksperimental" dan tidak siap untuk penggunaan produktif. Selain itu, ada jebakan dengan dia sehingga Anda dapat berbicara banyak tentang dan (oh horor!) Berdebat.
Jika kita menggunakan setidaknya beberapa distribusi stabil dengan siklus dukungan yang panjang, maka kita memiliki inti dari beberapa versi kuno-kuno. Misalnya, pada CentOS7 itu adalah 3,10. *, Pada CentOS8 itu adalah 4,19. Dan kami tertarik pada kernel setidaknya 5,3 (melainkan 5,4) dan yang lebih baru. Mengapa Karena secara default, gambar di Ceph memiliki serangkaian opsi terlampir yang tidak kompatibel dengan kernel yang lebih lama. Jadi, kami menghubungkan repositori dengan kernel baru untuk distribusi kami (misalnya, untuk CentOS itu adalah elrepo), instal kernel baru dan reboot sistem untuk bekerja dengan kernel baru:
- Hubungkan ke monitor yang dipilih untuk percobaan
- Kami menghubungkan repositori elrepo sesuai dengan instruksi - elrepo.org/tiki/tiki-index.php
- Instal kernel: yum -y --enablerepo = elrepo-kernel instal kernel-ml
- Kami me-reboot server dengan monitor (toh, kami punya tiga monitor, kan?)
Hubungkan gambar sebagai perangkat blok
# rbd map mypool/myimage
/dev/rbd0
Tetap hanya untuk mengkonfigurasi target. Dalam contoh ini, saya akan mengkonfigurasi target yang disebut mode demo - tanpa otentikasi, terlihat dan dapat diakses oleh semua orang. Dalam lingkungan yang produktif, kemungkinan besar Anda ingin mengonfigurasi otentikasi - tetapi ini sedikit di luar lingkup latihan just-for-fun hari ini.
Buat backend dengan nama disk1 dipetakan ke file / dev / rbd / mypool / myimage. File yang ditentukan adalah tautan simbolis ke / dev / rbd0 yang dibuat secara otomatis oleh daud udev. Kami menggunakan tautan simbolik karena nama perangkat rbd dapat berubah karena urutan di mana gambar Ceph terhubung ke host.
Buat backend:
# targetcli /backstores/block create disk1 /dev/rbd/mypool/myimage
Buat target iSCSI:
# targetcli /iscsi create iqn.2020-01.demo.ceph:mypool
Hubungkan backend sebagai LUN ke target:
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/luns create /backstores/block/disk1
Kami menyesuaikan target untuk mode 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
Periksa ketersediaan target:
# iscsiadm -m discovery -t st -p 127.0.0.1:3260
127.0.0.1:3260,1 iqn.2020-01.demo.ceph:mypool
Kami menghubungkan target:
# 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 benar, disk baru akan muncul di server, yang terlihat seperti perangkat SCSI, tetapi sebenarnya itu adalah gambar dari Ceph, akses yang melalui target iSCSI. Untuk menghindari masalah boot, lebih baik untuk menghapus drive yang dipetakan dan target yang terdeteksi dari inisiator lokal:
# iscsiadm -m node --logout
# iscsiadm -m discoverydb -o delete -t st -p 127.0.0.1:3260
Yang tersisa hanyalah bertahan konfigurasi sehingga gambar terhubung secara otomatis dan setelah terhubung, target dikelompokkan. Meluncurkan target terdiri dari dua langkah - menghubungkan RBD dan benar-benar meluncurkan target.
Pertama, konfigurasikan koneksi otomatis gambar RBD ke host. Ini dilakukan dengan menambahkan baris ke file / etc / ceph / rbdmap:
# cat /etc/ceph/rbdmap
# RbdDevice Parameters
mypool/myimage id=admin
# systemctl enable rbdmap
Mengembalikan konfigurasi target sedikit lebih rumit - kita perlu menulis unit untuk systemd, yang akan mengembalikan 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
Tes akhir - sekali lagi kita me-reboot monitor kita (sekarang menjadi target iSCSI). Perlu dicatat bahwa jika kita tidak membersihkan basis inisiator dengan perintah
iscsiadm -n discoverydb -o delete ... kita bisa mendapatkan server yang tidak memuat atau memuat untuk waktu yang lama.
Apa yang tersisa
Konfigurasikan inisiator di server tempat kami ingin mengirimkan target.
Bagaimana memastikan ketahanan target kami?
Anda juga dapat mengkonfigurasi target pada monitor lain dan mengatur multipath (vmware akan memahami ini dan bahkan akan bekerja, Hyper-V tidak akan mengerti - kunci SCSI diperlukan di sana). Karena klien Ceph dari kernel tidak menggunakan caching, ini cukup fungsional. Atau opsi lain adalah membuat sumber daya gugus dari tiga komponen - alamat IP target khusus dan layanan rbdmap dan scsi-target, dan mengelola sumber daya ini melalui alat pengelompokan (siapa bilang alat pacu jantung?)
Alih-alih kata penutup
Seperti yang Anda ketahui, artikel ini sedikit bercanda - tetapi di dalamnya saya mencoba untuk "dengan cepat dan dengan contoh" mempertimbangkan beberapa topik yang agak populer pada saat yang sama - target iSCSI, yang mungkin belum tentu mengekspor gambar Ceph - tetapi misalnya mengekspor volume LVM, dasar-dasar bekerja dengan inisiator iSCSI ( cara memindai target, cara menghubungkan ke target, memutuskan koneksi, menghapus catatan target dari database), menulis unit Anda sendiri untuk systemd dan beberapa lainnya
Saya harap bahkan jika Anda tidak mengulangi seluruh percobaan ini secara penuh, setidaknya sesuatu dari artikel ini akan bermanfaat bagi Anda.