iSCSI വഴി Ceph - അല്ലെങ്കിൽ ഒരു ഊഞ്ഞാൽ നിൽക്കുമ്പോൾ സ്കീയിംഗ്

"പ്രൊഫഷണൽ എക്സ്ട്രീം" ഇഷ്ടപ്പെടാത്തവർ (tsefovodov) നമ്മുടെ ഇടയിൽ ഉണ്ടോ?

ഇത് അസംഭവ്യമാണ് - അല്ലാത്തപക്ഷം വളരെ രസകരവും രസകരവുമായ ഈ ഉൽപ്പന്നവുമായി ഞങ്ങൾ ചുറ്റിക്കറങ്ങില്ല.

Ceph-ൻ്റെ പ്രവർത്തനത്തിൽ ഏർപ്പെട്ടിരുന്നവരിൽ പലരും വളരെ ഇടയ്ക്കിടെ (അല്ലെങ്കിൽ വളരെ അപൂർവ്വമായി പോലും) കാണാറുണ്ട്, എന്നാൽ ചിലപ്പോൾ ഡിമാൻഡ് സന്ദർഭങ്ങളിൽ - iSCSI അല്ലെങ്കിൽ FC വഴി Ceph-നെ ബന്ധിപ്പിക്കുന്നു. എന്തിനുവേണ്ടി? ഉദാഹരണത്തിന്, ചില കാരണങ്ങളാൽ ഇതുവരെ വിർച്വലൈസ് ചെയ്തിട്ടില്ലാത്ത ഒരു വിൻഡോസ് അല്ലെങ്കിൽ സോളാരിസ് സെർവറിലേക്ക് സെഫിൽ നിന്ന് ഒരു ചിത്രം സമർപ്പിക്കുക. അല്ലെങ്കിൽ വെർച്വലൈസ് ചെയ്ത ഒന്ന്, എന്നാൽ Ceph ചെയ്യാൻ കഴിയാത്ത ഒരു ഹൈപ്പർവൈസർ ഉപയോഗിക്കുന്നു - കൂടാതെ, നമുക്കറിയാവുന്നതുപോലെ, അവയിൽ ധാരാളം ഉണ്ട്. ഉദാഹരണത്തിന്? നന്നായി, ഉദാഹരണത്തിന്, സജീവമായി ഉപയോഗിക്കുന്ന HyperV അല്ലെങ്കിൽ ESXi. സെഫിൽ നിന്ന് ഒരു ഗസ്റ്റ് മെഷീനിലേക്ക് ഒരു ചിത്രം നൽകുകയെന്ന ടാസ്ക് ഉയർന്നുവരുന്നുവെങ്കിൽ, ഇത് വളരെ ആവേശകരമായ ഒരു ജോലിയായി മാറുന്നു.

അതിനാൽ, നൽകിയിരിക്കുന്നു:

  1. ഇതിനകം പ്രവർത്തിക്കുന്ന ഒരു സെഫ് ക്ലസ്റ്റർ
  2. iSCSI വഴി നൽകേണ്ട ഇതിനകം നിലവിലുള്ള ഒരു ചിത്രം
  3. കുളത്തിൻ്റെ പേര് mypool, ചിത്രത്തിൻ്റെ പേര് എന്റെ ചിത്രം

ആരംഭിക്കുന്നു?

ഒന്നാമതായി, നമ്മൾ FC അല്ലെങ്കിൽ iSCSI യെ കുറിച്ച് സംസാരിക്കുമ്പോൾ, നമുക്ക് ഇനീഷ്യേറ്ററും ടാർഗെറ്റും പോലുള്ള എൻ്റിറ്റികൾ ഉണ്ട്. ടാർഗെറ്റ് യഥാർത്ഥത്തിൽ ഒരു സെർവറാണ്, ഇനീഷ്യേറ്റർ ഒരു ക്ലയൻ്റാണ്. കുറഞ്ഞ പ്രയത്നത്തോടെ സെഫ് ഇമേജ് ഇനീഷ്യേറ്ററിന് സമർപ്പിക്കുക എന്നതാണ് ഞങ്ങളുടെ ചുമതല. ഇതിനർത്ഥം നമ്മൾ ലക്ഷ്യം വിപുലീകരിക്കണം എന്നാണ്. എന്നാൽ എവിടെ, ഏത് കമ്പ്യൂട്ടറിൽ?

ഭാഗ്യവശാൽ, ഒരു Ceph ക്ലസ്റ്ററിൽ ഞങ്ങൾക്ക് കുറഞ്ഞത് ഒരു ഘടകമെങ്കിലും ഉണ്ട്, അതിൻ്റെ IP വിലാസം ഉറപ്പിച്ചിരിക്കുന്നു, അതിൽ Ceph-ൻ്റെ ഏറ്റവും പ്രധാനപ്പെട്ട ഘടകങ്ങളിലൊന്നാണ് കോൺഫിഗർ ചെയ്തിരിക്കുന്നത്, ആ ഘടകം മോണിറ്ററാണ്. അതനുസരിച്ച്, മോണിറ്ററിൽ ഞങ്ങൾ ഒരു iSCSI ടാർഗെറ്റ് ഇൻസ്റ്റാൾ ചെയ്യുന്നു (അതേ സമയം ഒരു ഇനീഷ്യേറ്ററും, കുറഞ്ഞത് ടെസ്റ്റുകൾക്കെങ്കിലും). ഞാൻ ഇത് CentOS-ൽ ചെയ്തു, എന്നാൽ മറ്റേതെങ്കിലും വിതരണത്തിനും പരിഹാരം അനുയോജ്യമാണ് - നിങ്ങളുടെ വിതരണത്തിൽ സ്വീകാര്യമായ രീതിയിൽ നിങ്ങൾ പാക്കേജുകൾ ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതുണ്ട്.

# yum -y install iscsi-initiator-utils targetcli

ഇൻസ്റ്റാൾ ചെയ്ത പാക്കേജുകളുടെ ഉദ്ദേശ്യം എന്താണ്?

  • ടാർഗെറ്റ്ക്ലി — ലിനക്സ് കേർണലിൽ നിർമ്മിച്ച SCSI ടാർഗെറ്റ് കൈകാര്യം ചെയ്യുന്നതിനുള്ള ഒരു യൂട്ടിലിറ്റി
  • iscsi-itiator-utils — ലിനക്സ് കേർണലിൽ നിർമ്മിച്ചിരിക്കുന്ന 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-ലേക്ക് സ്വയമേവ സൃഷ്‌ടിച്ച ഒരു പ്രതീകാത്മക ലിങ്കാണ് നിർദ്ദിഷ്ട ഫയൽ. ഞങ്ങൾ ഒരു പ്രതീകാത്മക ലിങ്ക് ഉപയോഗിക്കുന്നു, കാരണം Ceph ഇമേജുകൾ ഹോസ്റ്റിലേക്ക് കണക്റ്റുചെയ്‌തിരിക്കുന്ന ക്രമത്തെ ആശ്രയിച്ച് rbd ഉപകരണത്തിൻ്റെ പേര് മാറാം.

ഒരു ബാക്കെൻഡ് സൃഷ്ടിക്കുക:

# 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 ടാർഗെറ്റ് വഴി ആക്സസ് ചെയ്യപ്പെടുന്നു. ബൂട്ട് പ്രശ്നങ്ങൾ ഒഴിവാക്കാൻ, ലോക്കൽ ഇനീഷ്യേറ്ററിൽ നിന്ന് കണക്റ്റുചെയ്‌ത ഡിസ്കും കണ്ടെത്തിയ ലക്ഷ്യവും നീക്കം ചെയ്യുന്നതാണ് നല്ലത്:

# 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 delete... ലോഡുചെയ്യാത്തതോ ലോഡുചെയ്യാൻ വളരെയധികം സമയമെടുക്കുന്നതോ ആയ ഒരു സെർവറിൽ നിങ്ങൾക്ക് അവസാനിക്കാം.

എന്താണ് ബാക്കിയുള്ളത്?

ഞങ്ങൾ ടാർഗെറ്റ് അയയ്ക്കാൻ ആഗ്രഹിക്കുന്ന സെർവറിൽ ഇനീഷ്യേറ്റർ കോൺഫിഗർ ചെയ്യുക.

ഞങ്ങളുടെ ലക്ഷ്യത്തിൻ്റെ തെറ്റ് സഹിഷ്ണുത എങ്ങനെ ഉറപ്പാക്കാം?

നിങ്ങൾക്ക് മറ്റ് മോണിറ്ററുകളിൽ ടാർഗെറ്റുകൾ കോൺഫിഗർ ചെയ്യാനും മൾട്ടിപാത്ത് സജ്ജീകരിക്കാനും കഴിയും (vmware ഇത് മനസിലാക്കുകയും പ്രവർത്തിക്കുകയും ചെയ്യും, ഹൈപ്പർ-വിക്ക് മനസ്സിലാകില്ല - ഇതിന് SCSI ലോക്കുകൾ ആവശ്യമാണ്). കേർണലിൽ നിന്നുള്ള Ceph ക്ലയൻ്റ് കാഷിംഗ് ഉപയോഗിക്കാത്തതിനാൽ, ഇത് തികച്ചും പ്രവർത്തനക്ഷമമാണ്. അല്ലെങ്കിൽ മൂന്ന് ഘടകങ്ങളുടെ ഒരു ക്ലസ്റ്റർ റിസോഴ്‌സ് സൃഷ്‌ടിക്കുക എന്നതാണ് മറ്റൊരു ഓപ്ഷൻ - ഒരു സമർപ്പിത ടാർഗെറ്റ് ഐപി വിലാസവും rbdmap, scsi-ടാർഗെറ്റ് സേവനങ്ങളും, കൂടാതെ ക്ലസ്റ്ററിംഗ് ടൂളുകൾ വഴി ഈ റിസോഴ്‌സ് കൈകാര്യം ചെയ്യുക (ആരാണ് പേസ്മേക്കർ പറഞ്ഞത്?)

എപ്പിലോഗിന് പകരം

വ്യക്തമാണ്, ഈ ലേഖനം ഒരു തമാശയാണ് - എന്നാൽ അതിൽ ഞാൻ "വേഗത്തിലും ഉദാഹരണങ്ങളോടെയും" ഒരേ സമയം വളരെ ജനപ്രിയമായ നിരവധി വിഷയങ്ങൾ പരിഗണിക്കാൻ ശ്രമിച്ചു - iSCSI ടാർഗെറ്റ്, അത് Ceph ഇമേജുകൾ കയറ്റുമതി ചെയ്യണമെന്നില്ല - എന്നാൽ ഉദാഹരണത്തിന്, എൽവിഎം വോള്യങ്ങൾ എക്‌സ്‌പോർട്ടുചെയ്യുക, ഒരു iSCSI ഇനീഷ്യേറ്ററുമായി പ്രവർത്തിക്കുന്നതിൻ്റെ അടിസ്ഥാനകാര്യങ്ങൾ (ഒരു ടാർഗെറ്റ് എങ്ങനെ സ്കാൻ ചെയ്യാം, ഒരു ടാർഗെറ്റിലേക്ക് എങ്ങനെ കണക്റ്റുചെയ്യാം, വിച്ഛേദിക്കാം, ഡാറ്റാബേസിൽ നിന്ന് ഒരു ടാർഗെറ്റ് എൻട്രി ഇല്ലാതാക്കാം), systemd-നും മറ്റു ചിലതിനുമായി നിങ്ങളുടെ സ്വന്തം യൂണിറ്റ് എഴുതുക

നിങ്ങൾ ഈ പരീക്ഷണം മുഴുവനായി ആവർത്തിക്കുന്നില്ലെങ്കിലും, ഈ ലേഖനത്തിൽ നിന്നുള്ള എന്തെങ്കിലും നിങ്ങൾക്ക് ഉപയോഗപ്രദമാകുമെന്ന് ഞാൻ പ്രതീക്ഷിക്കുന്നു.

അവലംബം: www.habr.com

ഒരു അഭിപ്രായം ചേർക്കുക