మనలో (Cef డ్రైవర్లలో) “వృత్తిపరమైన తీవ్రత”ను ఇష్టపడని వారు ఎవరైనా ఉన్నారా?
అలా జరిగే అవకాశం లేదు, లేకపోతే మనం ఇంత ఆసక్తికరమైన, వినోదాత్మకమైన ఉత్పత్తితో ప్రయోగాలు చేసేవాళ్ళం కాదు.
చాలా మంది Ceph వినియోగదారులు iSCSI లేదా FC ద్వారా Cephను కనెక్ట్ చేయడం అనే, అంతగా సాధారణం కాని (లేదా బహుశా చాలా అరుదైన) కానీ కొన్నిసార్లు ఉపయోగపడే సందర్భాన్ని ఎదుర్కొన్నారు. ఎందుకు? ఉదాహరణకు, ఇంకా వర్చువలైజ్ చేయని సర్వర్కు Ceph ఇమేజ్ను అందించడం. Windows లేదా సోలారిస్. లేదా వర్చువలైజ్ చేయబడినది, కానీ సెఫ్కు మద్దతు ఇవ్వని హైపర్వైజర్ను ఉపయోగించడం—మరియు, మనకు తెలిసినట్లుగా, అలాంటివి చాలా ఉన్నాయి. ఉదాహరణకు? ఉదాహరణకు, హైపర్వి లేదా ఈఎస్ఎక్స్ఐ, ఇవి చురుకుగా ఉపయోగించబడుతున్నాయి. ఒకవేళ గెస్ట్ మెషీన్కు సెఫ్ ఇమేజ్ను అందించాల్సిన పని వస్తే, అది చాలా ఆసక్తికరమైన సవాలుగా మారుతుంది.
కాబట్టి, ఇచ్చినవి:
- ఇప్పటికే నడుస్తున్న Ceph క్లస్టర్
- iSCSI ద్వారా అందించాల్సిన ఇప్పటికే ఉన్న ఇమేజ్
- కొలను పేరు మైపూల్, చిత్రం పేరు నా చిత్రం
మనం ప్రారంభిద్దామా?
మొట్టమొదటగా, మనం FC లేదా iSCSI గురించి మాట్లాడినప్పుడు, మనకు ఇనిషియేటర్లు మరియు టార్గెట్లు అనే విభాగాలు ఉంటాయి. టార్గెట్ అనేది ప్రాథమికంగా సర్వర్, మరియు ఇనిషియేటర్ అనేది క్లయింట్. కనీస ప్రయత్నంతో ఇనిషియేటర్కు సెఫ్ ఇమేజ్ను అందించడమే మన లక్ష్యం. దీని అర్థం మనం టార్గెట్ను డిప్లాయ్ చేయాలి. కానీ ఎక్కడ? ఏ కంప్యూటర్లో?
అదృష్టవశాత్తూ, ఒక Ceph క్లస్టర్లో, మనకు స్థిరమైన IP చిరునామాతో కనీసం ఒక కాంపోనెంట్ ఉంటుంది మరియు దానిపై అత్యంత ముఖ్యమైన Ceph కాంపోనెంట్లలో ఒకటైన మానిటర్ కాన్ఫిగర్ చేయబడి ఉంటుంది. దానికి అనుగుణంగా, మేము మానిటర్పై ఒక iSCSI టార్గెట్ను (మరియు, కనీసం పరీక్ష ప్రయోజనాల కోసం, ఒక ఇనిషియేటర్ను) సెటప్ చేసాము. నేను దీనిని దీనిపై చేసాను. CentOSఅయితే, ఈ పరిష్కారం ఏ ఇతర డిస్ట్రిబ్యూషన్కు కూడా పనిచేస్తుంది—మీ డిస్ట్రిబ్యూషన్కు ఆమోదయోగ్యమైన పద్ధతిలో ప్యాకేజీలను ఇన్స్టాల్ చేస్తే సరిపోతుంది.
# yum -y install iscsi-initiator-utils targetcli
ప్యాకేజీలను ఇన్స్టాల్ చేయడం యొక్క ఉద్దేశ్యం ఏమిటి?
- టార్గెట్క్లి — అంతర్నిర్మిత కెర్నల్ను నిర్వహించడానికి ఒక యుటిలిటీ Linux SCSI లక్ష్యం
- iscsi-initiator-utils నిర్వహణ కోసం ఉపయోగించే యుటిలిటీలతో కూడిన ప్యాకేజీ, ఇది కూడా కెర్నల్లో అంతర్నిర్మితంగా ఉంటుంది. Linux iSCSI ప్రారంభకుడు
iSCSI ద్వారా ఇనిషియేటర్కు ఒక ఇమేజ్ను అందించడానికి, రెండు మార్గాలు ఉన్నాయి: టార్గెట్ యొక్క యూజర్స్పేస్ బ్యాకెండ్ను ఉపయోగించడం లేదా ఆపరేటింగ్ సిస్టమ్కు కనిపించేలా ఇమేజ్ను ఒక బ్లాక్ డివైస్గా మౌంట్ చేసి, దానిని iSCSI ద్వారా ఎక్స్పోర్ట్ చేయడం. యూజర్స్పేస్ బ్యాకెండ్ ఇంకా ప్రయోగాత్మక దశలోనే ఉంది మరియు ఉత్పాదక వినియోగానికి పూర్తిగా సిద్ధంగా లేదు కాబట్టి, మనం రెండవ పద్ధతినే ఎంచుకుందాం. అంతేకాకుండా, దీనికి దాని స్వంత లోపాలు ఉన్నాయి, అవి విస్తృతమైన చర్చకు మరియు (అయ్యో!) వాదోపవాదాలకు దారితీయవచ్చు.
మనం చాలా సుదీర్ఘమైన సపోర్ట్ సైకిల్ ఉన్న ఏదైనా స్థిరమైన డిస్ట్రిబ్యూషన్ను ఉపయోగిస్తే, అప్పుడు మన కెర్నల్ చాలా పురాతనమైన వెర్షన్ అయి ఉంటుంది. ఉదాహరణకు, CentOS7 అనేది 3.10.*, లో CentOS8 అనేది 4.19. కానీ మాకు కెర్నల్ 5.3 (మరియు చాలా మటుకు 5.4) లేదా అంతకంటే కొత్తది కావాలి. ఎందుకంటే, డిఫాల్ట్గా, Ceph ఇమేజ్లలో పాత కెర్నల్లతో సరిపడని కొన్ని ఆప్షన్లు ఎనేబుల్ చేయబడి ఉంటాయి. దీని అర్థం, మేము మా డిస్ట్రిబ్యూషన్ కోసం ఒక కొత్త కెర్నల్తో రిపోజిటరీని ఎనేబుల్ చేస్తున్నాము (ఉదాహరణకు, CentOS (ఇది ఎల్రెపో), కొత్త కెర్నల్ను ఇన్స్టాల్ చేసి, కొత్త కెర్నల్తో పని చేయడానికి సిస్టమ్ను రీబూట్ చేయండి:
- ప్రయోగం కోసం ఎంచుకున్న మానిటర్కు కనెక్ట్ చేయండి
- సూచనల ప్రకారం elrepo రిపోజిటరీలను అనుసంధానించండి —
- కెర్నల్ను ఇన్స్టాల్ చేయండి: yum -y --enablerepo=elrepo-kernel install 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 పరికరంలా కనిపిస్తుంది, కానీ వాస్తవానికి అది 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
తర్వాత=నెట్వర్క్-ఆన్లైన్.టార్గెట్ rbdmap.service
Before=remote-fs-pre.target
Wants=network-online.target remote-fs-pre.target
[సర్వీస్]
రకం=ఒన్షాట్
RemainAfterExit=yes
ExecStart=/bin/targetcli restoreconfig
[ఇన్స్టాల్]
WantedBy = multi-user.target
# systemctl డెమోన్-రీలోడ్
# systemctl enable scsi-target
మన మానిటర్ను (ఇప్పుడు iSCSI టార్గెట్) మరోసారి రీబూట్ చేయడమే చివరి పరీక్ష. మనం ఆ కమాండ్తో ఇనిషియేటర్ డేటాబేస్ను క్లియర్ చేయకపోయి ఉంటే గమనించాల్సిన విషయం ఏమిటంటే... iscsiadm -n discoverydb -o delete ... అప్పుడు సర్వర్ లోడ్ అవ్వకపోవచ్చు లేదా లోడ్ అవ్వడానికి చాలా సమయం పట్టవచ్చు.
ఇంకా ఏమి మిగిలింది?
మనం టార్గెట్ను సమర్పించాలనుకుంటున్న సర్వర్లో ఇనిషియేటర్ను కాన్ఫిగర్ చేయండి.
మన లక్ష్యం పటిష్టంగా ఉండేలా ఎలా నిర్ధారించుకోవచ్చు?
మీరు అదే విధంగా ఇతర మానిటర్లలో టార్గెట్లను కాన్ఫిగర్ చేయవచ్చు మరియు మల్టీపాథింగ్ను సెటప్ చేయవచ్చు (VMware దీన్ని అర్థం చేసుకుని పనిచేస్తుంది, కానీ Hyper-Vకి SCSI లాక్లు అవసరం కాబట్టి అది పనిచేయదు). కెర్నల్లోని Ceph క్లయింట్ క్యాషింగ్ను ఉపయోగించదు కాబట్టి, ఇది పూర్తిగా సాధ్యమవుతుంది. మరొక ఎంపిక ఏమిటంటే, మూడు భాగాల నుండి ఒక క్లస్టర్ రిసోర్స్ను సృష్టించడం—ఒక ప్రత్యేకమైన IP చిరునామాలు టార్గెట్ మరియు సర్వీసెస్ rbdmap మరియు scsi-target, మరియు క్లస్టరింగ్ టూల్స్ ద్వారా ఈ రిసోర్స్ను నిర్వహించండి (పేస్మేకర్ అని ఎవరు చెప్పారు?)
బదులుగా ఒక పదవీకాలం
మీరు చూడగలిగినట్లుగా, ఈ వ్యాసం కొంతవరకు ఒక హాస్యం లాంటిది, కానీ దీనిలో నేను ఒకేసారి అనేక ప్రసిద్ధ అంశాలను త్వరగా మరియు సులభంగా వివరించడానికి ప్రయత్నించాను: iSCSI టార్గెట్లు, ఇవి తప్పనిసరిగా Ceph ఇమేజ్లను ఎక్స్పోర్ట్ చేయకపోయినా, ఉదాహరణకు, LVM వాల్యూమ్లను ఎక్స్పోర్ట్ చేస్తాయి; ఒక iSCSI ఇనిషియేటర్తో పనిచేయడంలో ప్రాథమిక అంశాలు (ఒక టార్గెట్ను స్కాన్ చేయడం, ఒక టార్గెట్కు కనెక్ట్ అవ్వడం, డిస్కనెక్ట్ అవ్వడం, డేటాబేస్ నుండి ఒక టార్గెట్ ఎంట్రీని తొలగించడం ఎలా); systemd కోసం మీ స్వంత యూనిట్ను రాయడం, మరియు మరికొన్ని.
మీరు ఈ ప్రయోగాన్ని పూర్తిగా పునరావృతం చేయకపోయినా, కనీసం ఈ వ్యాసంలోని కొంత భాగమైనా మీకు ఉపయోగపడుతుందని నేను ఆశిస్తున్నాను.
మూలం: www.habr.com
