iSCSI မှတဆင့် Ceph - သို့မဟုတ် ပုခက်ထဲတွင် ရပ်နေစဉ် နှင်းလျှောစီးခြင်း။

"ပရော်ဖက်ရှင်နယ်လွန်ကဲသော" ကိုမကြိုက်သော (tsefovodov) တို့တွင်ကျွန်ုပ်တို့၌ရှိပါသလား။

မဖြစ်နိုင်ဘူး - မဟုတ်ရင် ဒီအလွန်စိတ်ဝင်စားစရာကောင်းပြီး ရယ်စရာကောင်းတဲ့ ထုတ်ကုန်နဲ့ ရှုပ်နေမှာ မဟုတ်ပါဘူး။

Ceph ၏လည်ပတ်မှုတွင်ပါဝင်ပတ်သက်သူအများအပြားသည်မကြာခဏမဟုတ်သော (သို့မဟုတ်အလွန်မကြာခဏပင်) ကိုတွေ့ခဲ့ရသော်လည်း၊ တစ်ခါတစ်ရံတွင်တောင်းဆိုမှုအခြေအနေတွင် - Ceph ကို iSCSI သို့မဟုတ် FC မှတဆင့်ချိတ်ဆက်ခြင်း။ ဘာအတွက်လဲ? ဥပမာအားဖြင့်၊ အကြောင်းတစ်ခုခုကြောင့် virtualized မလုပ်ရသေးသော Windows သို့မဟုတ် Solaris ဆာဗာသို့ Ceph မှ ပုံတစ်ပုံကို ပေးပို့ပါ။ သို့မဟုတ် virtualized တစ်ခု၊ သို့သော် Ceph မလုပ်နိုင်သော hypervisor ကိုအသုံးပြု၍ ကျွန်ုပ်တို့သိသည့်အတိုင်း၊ ၎င်းတို့များစွာရှိသည်။ ဥပမာအားဖြင့်? ဥပမာအားဖြင့်၊ HyperV သို့မဟုတ် ESXi ကို တက်ကြွစွာအသုံးပြုသည်။ Ceph မှ ပုံတစ်ပုံကို ဧည့်သည်စက်သို့ ပေးဆောင်ရသည့် အလုပ်ဖြစ်လာပါက၊ ၎င်းသည် အလွန်စိတ်လှုပ်ရှားစရာကောင်းသော အလုပ်တစ်ခုအဖြစ်သို့ ပြောင်းလဲသွားပါသည်။

ထို့ကြောင့်၊

  1. Ceph အစုအဝေးတစ်ခု လည်ပတ်နေပြီဖြစ်သည်။
  2. iSCSI မှတစ်ဆင့် လုပ်ဆောင်ရမည့် ရှိပြီးသားပုံ
  3. ရေကူးကန်နာမည် mypool၊ ပုံအမည် မင်္ဂလာပါ

အစ?

ပထမဦးစွာ၊ ကျွန်ုပ်တို့သည် FC သို့မဟုတ် iSCSI အကြောင်းပြောသောအခါတွင်၊ ကျွန်ုပ်တို့တွင် အစပြုသူနှင့် ပစ်မှတ်ကဲ့သို့သော အဖွဲ့အစည်းများရှိသည်။ ပစ်မှတ်သည် အမှန်တကယ် ဆာဗာတစ်ခုဖြစ်ပြီး အစပြုသူသည် သုံးစွဲသူဖြစ်သည်။ ကျွန်ုပ်တို့၏တာဝန်မှာ အားထုတ်မှုအနည်းဆုံးဖြင့် စတင်သူထံ Ceph ပုံကို တင်ပြရန်ဖြစ်သည်။ ဆိုလိုတာက ရည်မှန်းချက်ကို ချဲ့ထွင်ရမယ်။ ဒါပေမယ့် ဘယ်မှာ၊ ဘယ်ကွန်ပျူတာမှာလဲ။

ကံကောင်းထောက်မစွာ၊ Ceph အစုအဝေးတစ်ခုတွင် ကျွန်ုပ်တို့တွင် IP လိပ်စာကို ပြုပြင်ထားသည့် အနည်းဆုံး အစိတ်အပိုင်းတစ်ခုရှိပြီး Ceph ၏ အရေးကြီးဆုံး အစိတ်အပိုင်းတစ်ခုကို ပြင်ဆင်သတ်မှတ်ထားပြီး ယင်းအစိတ်အပိုင်းမှာ မော်နီတာဖြစ်သည်။ ထို့ကြောင့်၊ ကျွန်ုပ်တို့သည် မော်နီတာပေါ်တွင် iSCSI ပစ်မှတ် (နှင့် စမ်းသပ်မှုများအတွက် အနည်းဆုံး တစ်ချိန်တည်းတွင် အစပြုသူ) ကို တပ်ဆင်ပါ။ ဒါကို CentOS မှာလုပ်ခဲ့တယ်၊ ဒါပေမယ့် ဖြေရှင်းချက်က တခြားဖြန့်ဖြူးမှုအတွက်လည်း သင့်တော်ပါတယ် - မင်းရဲ့ဖြန့်ဖြူးမှုမှာ လက်ခံနိုင်တဲ့ပုံစံနဲ့ ပက်ကေ့ဂျ်တွေကို ထည့်သွင်းဖို့ပဲလိုတယ်။

# yum -y install iscsi-initiator-utils targetcli

ထည့်သွင်းထားသော ပက်ကေ့ခ်ျများ၏ ရည်ရွယ်ချက်ကား အဘယ်နည်း။

  • ပစ်မှတ် - Linux kernel တွင်တည်ဆောက်ထားသော SCSI ပစ်မှတ်ကို စီမံခန့်ခွဲရန်အတွက် အသုံးဝင်မှုတစ်ခု
  • iscsi-initiator-utils — Linux kernel တွင်တည်ဆောက်ထားသော iSCSI အစပြုသူအား စီမံရန်အသုံးပြုသည့် အသုံးဝင်မှုများပါသည့် ပက်ကေ့ခ်ျတစ်ခု

iSCSI မှတစ်ဆင့် ပုံတစ်ပုံကို စတင်သူထံ ပေးပို့ရန်အတွက်၊ ဖြစ်ရပ်များ ဖွံ့ဖြိုးတိုးတက်မှုအတွက် ရွေးချယ်စရာ နှစ်ခုရှိသည် - ပစ်မှတ်၏ userspace နောက်ခံကို အသုံးပြုပါ သို့မဟုတ် ရုပ်ပုံအား စက်လည်ပတ်မှုစနစ်မှ မြင်နိုင်သော ပိတ်ဆို့ကိရိယာအဖြစ် ချိတ်ဆက်ကာ iSCSI မှတစ်ဆင့် ၎င်းကို ထုတ်ယူပါ။ ဒုတိယနည်းလမ်းကို သွားပါမည် - userspace backend သည် "စမ်းသပ်မှု" အခြေအနေတွင်ရှိနေဆဲဖြစ်ပြီး အကျိုးရှိစွာအသုံးပြုရန်အတွက် အနည်းငယ်အဆင်သင့်မဖြစ်သေးပါ။ ထို့အပြင်၊ သင်အများကြီးပြောနိုင်ပြီး (အိုးထိတ်လန့်စရာ!) ငြင်းခုံနိုင်သည့်အရာနှင့်ပတ်သက်သောအခက်အခဲများရှိသည်။

ရှည်လျားသောပံ့ပိုးမှုစက်ဝန်းဖြင့် အနည်းငယ်တည်ငြိမ်သောဖြန့်ဖြူးမှုကိုပင် ကျွန်ုပ်တို့အသုံးပြုပါက၊ ကျွန်ုပ်တို့တွင်ရှိသော kernel သည် ရှေးခေတ်ဗားရှင်းအချို့ဖြစ်သည်။ ဥပမာ၊ CentOS7 မှာ 3.10.* ဖြစ်ပြီး CentOS8 မှာ 4.19 ဖြစ်ပါတယ်။ ကျွန်ုပ်တို့သည် အနည်းဆုံး 5.3 (သို့မဟုတ် 5.4) နှင့် ထို့ထက်ပိုသော kernel ကို စိတ်ဝင်စားပါသည်။ အဘယ်ကြောင့်? အဘယ်ကြောင့်ဆိုသော် မူရင်းအားဖြင့် Ceph ပုံများတွင် အဟောင်း kernels များနှင့် တွဲဖက်၍မရသော ရွေးချယ်စရာအစုံရှိသောကြောင့်ဖြစ်သည်။ ဆိုလိုသည်မှာ ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ဖြန့်ဖြူးမှုအတွက် kernel အသစ်တစ်ခုနှင့် repository တစ်ခုကို ချိတ်ဆက်ခြင်း (ဥပမာ၊ CentOS အတွက် ဒါက elrepo)၊ kernel အသစ်ကို ထည့်သွင်းပြီး kernel အသစ်နှင့် အလုပ်လုပ်ရန် စနစ်ကို ပြန်လည်စတင်ခြင်းဖြစ်သည်-

  • စမ်းသပ်မှုအတွက် ရွေးချယ်ထားသော မော်နီတာသို့ ချိတ်ဆက်ပါ။
  • ညွှန်ကြားချက်အရ elrepo repositories များကို ကျွန်ုပ်တို့ ချိတ်ဆက်သည် - elrepo.org/tiki/tiki-index.php
  • kernel ကို ထည့်သွင်းပါ- yum -y —enablerepo=elrepo-kernel kernel-ml ကို ထည့်သွင်းပါ
  • ဆာဗာကို မော်နီတာဖြင့် ပြန်ဖွင့်ပါ (ကျွန်ုပ်တို့တွင် မော်နီတာသုံးလုံး ရှိသည် မဟုတ်လား။)

ပုံအား ပိတ်ဆို့သည့်ကိရိယာအဖြစ် ချိတ်ဆက်ခြင်း။

# rbd map mypool/myimage
/dev/rbd0

ကျန်တာအားလုံးက ပစ်မှတ်ကို ပြင်ဆင်ဖို့ပါပဲ။ ဤဥပမာတွင်၊ ငါသည်ဟုခေါ်တွင်ပစ်မှတ်ကို configure လုပ်မည်ဖြစ်သည်။ သရုပ်ပြမုဒ် - စစ်မှန်ကြောင်းအထောက်အထားမရှိဘဲ၊ လူတိုင်းမြင်နိုင်၊ သုံးနိုင်သည်။ ထုတ်လုပ်မှုပတ်ဝန်းကျင်တွင်၊ သင်သည် အထောက်အထားစိစစ်ခြင်းကို ပုံဖော်လိုပေလိမ့်မည် - သို့သော် ယနေ့၏ အပျော်သဘောလေ့ကျင့်ခန်းအတွက် နယ်ပယ်အနည်းငယ်လွဲနေပါသည်။

/dev/rbd/mypool/myimage ဖိုင်နှင့်ဆက်စပ်နေသော disk1 အမည်ရှိ နောက်ခံဖိုင်တစ်ခုကို ဖန်တီးပါ။ သတ်မှတ်ထားသောဖိုင်သည် /dev/rbd0 သို့ udev daemon မှ အလိုအလျောက်ဖန်တီးထားသော သင်္ကေတလင့်ခ်တစ်ခုဖြစ်သည်။ rbd စက်၏အမည်သည် Ceph ပုံများကို host သို့ချိတ်ဆက်ထားသည့်အစီအစဥ်ပေါ်မူတည်၍ ပြောင်းလဲနိုင်သောကြောင့် သင်္ကေတလင့်ခ်တစ်ခုကို ကျွန်ုပ်တို့အသုံးပြုပါသည်။

နောက်ခံတစ်ခု ဖန်တီးပါ-

# 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 စက်နှင့်တူသော ဆာဗာပေါ်တွင် ဒစ်ခ်အသစ်တစ်ခု ပေါ်လာလိမ့်မည်၊ သို့သော် အမှန်တကယ်တွင် Ceph မှ ပုံတစ်ပုံသည် iSCSI ပစ်မှတ်တစ်ခုမှ တစ်ဆင့် ဝင်ရောက်ကြည့်ရှုခြင်းဖြစ်သည်။ boot ပြဿနာများကိုရှောင်ရှားရန်၊ ချိတ်ဆက်ထားသော disk နှင့် local initiator မှတွေ့ရှိထားသောပစ်မှတ်ကိုဖယ်ရှားခြင်းသည်ပိုကောင်းသည်-

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

ကျန်တာအားလုံးသည် ပုံအား အလိုအလျောက်ချိတ်ဆက်ပြီး ချိတ်ဆက်ပြီးနောက်၊ ပစ်မှတ်ကို stratified ဖြစ်စေရန် ဆက်လက်လုပ်ဆောင်ရန် ကျန်ရှိနေသေးသည်။ ပစ်မှတ်တစ်ခုကို စတင်ခြင်းတွင် အဆင့်နှစ်ဆင့် ပါဝင်သည် - RBD ကို ချိတ်ဆက်ကာ ပစ်မှတ်ကို အမှန်တကယ် ပစ်လွှတ်ခြင်း ဖြစ်သည်။

ပထမဦးစွာ၊ host သို့ RBD ပုံများ၏အလိုအလျောက်ချိတ်ဆက်မှုကို configure ကြပါစို့။ ၎င်းကို /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 ဖျက်လိုက်ပါ..။ မတင်နိုင်သော ဆာဗာတစ်ခုဖြင့် သင် ပြီးဆုံးသွားနိုင်သည်။

ဘာကျန်သေးလဲ။

ပစ်မှတ်ကို ပေးပို့လိုသည့် ဆာဗာပေါ်တွင် စတင်သူအား စီစဉ်သတ်မှတ်ပါ။

ကျွန်ုပ်တို့၏ပစ်မှတ်အပေါ် အမှားအယွင်းခံနိုင်ရည်ရှိအောင် မည်သို့ပြုလုပ်ရမည်နည်း။

သင်သည် အခြားသော မော်နီတာများပေါ်တွင် ပစ်မှတ်များကို အလားတူ စီစဉ်သတ်မှတ်နိုင်ပြီး multipath ကို စီစဉ်နိုင်သည် (vmware သည် ၎င်းကို နားလည်ပြီး အလုပ်ပင်ဖြစ်လိမ့်မည်၊ Hyper-V သည် နားလည်မည်မဟုတ် - ၎င်းသည် SCSI သော့ခလောက်များ လိုအပ်သည်)။ kernel မှ Ceph client သည် caching ကိုအသုံးမပြုသောကြောင့်၊ ၎င်းသည်အတော်လေးအလုပ်လုပ်နိုင်သည်။ သို့မဟုတ် အခြားရွေးချယ်စရာမှာ အစိတ်အပိုင်းသုံးခုဖြစ်သော အစုလိုက်အရင်းအမြစ်အရင်းအမြစ်တစ်ခု - သီးခြားပစ်မှတ် IP လိပ်စာနှင့် rbdmap နှင့် scsi-ပစ်မှတ်ဝန်ဆောင်မှုများကို ဖန်တီးရန်နှင့် ဤအရင်းအမြစ်ကို အစုလိုက်အပြုံလိုက်ကိရိယာများမှတစ်ဆင့် စီမံခန့်ခွဲရန်ဖြစ်သည် (ဘယ်သူက pacemaker ကပြောတာလဲ။)

အစားတစ်ဦး epilogue ၏

ရှင်းရှင်းလင်းလင်းသိရသည်နှင့်အမျှ၊ ဤဆောင်းပါးသည် ရယ်စရာနည်းနည်းဖြစ်သည်၊ သို့သော် ကျွန်တော်သည် “လျင်မြန်စွာနှင့် ဥပမာများဖြင့်” ကြိုးပမ်းခဲ့ရာတွင် တစ်ချိန်တည်းတွင် အတော်အတန်ရေပန်းစားသော အကြောင်းအရာအများအပြားကို ထည့်သွင်းစဉ်းစားရန် ကြိုးစားခဲ့သည် - Ceph ပုံများကို တင်ပို့ရန် မလိုအပ်သည့် iSCSI ပစ်မှတ် - ဥပမာ၊ LVM volumes များကို တင်ပို့ခြင်း၊ iSCSI အစပြုသူနှင့် လုပ်ဆောင်ခြင်း၏ အခြေခံအချက်များ (ပစ်မှတ်ကို စကင်န်ဖတ်နည်း၊ ပစ်မှတ်သို့ ချိတ်ဆက်ပုံ၊ အဆက်ဖြတ်ရန်၊ ဒေတာဘေ့စ်မှ ပစ်မှတ်ကို ဖျက်ရန်)၊ systemd နှင့် အခြားအရာများအတွက် သင့်ကိုယ်ပိုင်ယူနစ်ကို ရေးသားခြင်း

ဒီစမ်းသပ်ချက်တစ်ခုလုံးကို အပြည့်အ၀ပြန်မလုပ်ရင်တောင် အနည်းဆုံးတော့ ဒီဆောင်းပါးက သင့်အတွက် အသုံးဝင်လိမ့်မယ်လို့ မျှော်လင့်ပါတယ်။

source: www.habr.com

မှတ်ချက် Add