ఒక దశాబ్దానికి పైగా అభివృద్ధి చెందుతున్న ఉత్పత్తికి వస్తున్నప్పుడు, దానిలో పాత సాంకేతికతలను కనుగొనడంలో ఆశ్చర్యం లేదు. కానీ ఆరు నెలల్లో మీరు లోడ్ 10 రెట్లు ఎక్కువగా ఉంచవలసి వస్తే, మరియు పడిపోయే ఖర్చు వందల రెట్లు పెరుగుతుంది? ఈ సందర్భంలో, మీకు కూల్ హైలోడ్ ఇంజనీర్ అవసరం. కానీ పనిమనిషి లేకపోవడంతో సమస్యను పరిష్కరించే బాధ్యతను నాకు అప్పగించారు. వ్యాసం యొక్క మొదటి భాగంలో మేము రెడిస్ నుండి రెడిస్-క్లస్టర్కి ఎలా మారాము అని నేను మీకు చెప్తాను మరియు రెండవ భాగంలో క్లస్టర్ను ఎలా ఉపయోగించడం ప్రారంభించాలో మరియు దానిని ఉపయోగిస్తున్నప్పుడు ఏమి శ్రద్ధ వహించాలో సలహా ఇస్తాను.
సాంకేతికత ఎంపిక
ఇది అంత చెడ్డదా? ప్రత్యేక Redis (స్వతంత్ర రెడిస్) 1 మాస్టర్ మరియు N బానిసల కాన్ఫిగరేషన్లో ఉందా? నేను దీన్ని వాడుకలో లేని సాంకేతికత అని ఎందుకు పిలుస్తాను?
లేదు, రెడిస్ అంత చెడ్డది కాదు... అయితే, విస్మరించలేని కొన్ని లోపాలు ఉన్నాయి.
-
మొదటిది, మాస్టర్ వైఫల్యం తర్వాత విపత్తు రికవరీ మెకానిజమ్లకు Redis మద్దతు ఇవ్వదు. ఈ సమస్యను పరిష్కరించడానికి, మేము కొత్త మాస్టర్కు VIPలను స్వయంచాలకంగా బదిలీ చేసే కాన్ఫిగరేషన్ను ఉపయోగించాము, బానిసలలో ఒకరి పాత్రను మార్చడం మరియు మిగిలిన వాటిని మార్చడం. ఈ యంత్రాంగం పనిచేసింది, కానీ దానిని నమ్మదగిన పరిష్కారం అని పిలవలేము. మొదట, తప్పుడు అలారాలు సంభవించాయి, మరియు రెండవది, ఇది పునర్వినియోగపరచదగినది, మరియు ఆపరేషన్ తర్వాత మాన్యువల్ చర్యలు వసంతాన్ని ఛార్జ్ చేయడానికి అవసరం.
-
రెండవది, ఒకే ఒక మాస్టర్ను కలిగి ఉండటం వల్ల షేడింగ్ సమస్య ఏర్పడింది. మేము "1 మాస్టర్ మరియు N బానిసలు" అనే అనేక స్వతంత్ర క్లస్టర్లను సృష్టించాలి, ఆపై ఈ మెషీన్ల మధ్య డేటాబేస్లను మాన్యువల్గా పంపిణీ చేయండి మరియు రేపు డేటాబేస్లలో ఒకటి అంతగా ఉబ్బిపోదని, దానిని ప్రత్యేక ఉదాహరణకి తరలించాల్సి ఉంటుందని ఆశిస్తున్నాము.
ఎంపికలు ఏమిటి?
- అత్యంత ఖరీదైన మరియు ధనిక పరిష్కారం Redis-Enterprise. ఇది పూర్తి సాంకేతిక మద్దతుతో బాక్స్డ్ పరిష్కారం. ఇది సాంకేతిక కోణం నుండి ఆదర్శంగా కనిపిస్తున్నప్పటికీ, సైద్ధాంతిక కారణాల వల్ల ఇది మాకు సరిపోలేదు.
- రెడిస్-క్లస్టర్. బాక్స్ వెలుపల మాస్టర్ ఫెయిల్ఓవర్ మరియు షార్డింగ్కు మద్దతు ఉంది. ఇంటర్ఫేస్ సాధారణ వెర్షన్ నుండి దాదాపు భిన్నంగా లేదు. ఇది ఆశాజనకంగా ఉంది, మేము ఆపదల గురించి తరువాత మాట్లాడుతాము.
- టరాన్టూల్, మెమ్కాష్, ఏరోస్పైక్ మరియు ఇతరులు. ఈ సాధనాలన్నీ దాదాపు ఒకే పనిని చేస్తాయి. కానీ ప్రతి దాని స్వంత లోపాలు ఉన్నాయి. మేము మా గుడ్లన్నింటినీ ఒకే బుట్టలో వేయకూడదని నిర్ణయించుకున్నాము. మేము ఇతర పనుల కోసం Memcache మరియు Tarantoolని ఉపయోగిస్తాము మరియు ముందుకు చూస్తే, మా ఆచరణలో వాటితో మరిన్ని సమస్యలు ఉన్నాయని నేను చెబుతాను.
ఉపయోగం యొక్క ప్రత్యేకతలు
మేము Redisతో చారిత్రాత్మకంగా ఏ సమస్యలను పరిష్కరించాము మరియు మేము ఏ కార్యాచరణను ఉపయోగించాము అని చూద్దాం:
- 2GIS వంటి రిమోట్ సేవలకు అభ్యర్థనలకు ముందు కాష్ | గోలాంగ్
MGET MSETని సెట్ చేయండి "DBని ఎంచుకోండి"
- MYSQL ముందు కాష్ | PHP
సెట్ MGET MSET స్కాన్ "కీని నమూనా ద్వారా" పొందండి "DBని ఎంచుకోండి"
- సెషన్లు మరియు డ్రైవర్ కోఆర్డినేట్లతో పని చేసే సేవ కోసం ప్రధాన నిల్వ | గోలాంగ్
MGET MSETని సెట్ చేయండి "DBని ఎంచుకోండి" "జియో కీని జోడించు" "జియో కీని పొందండి" స్కాన్ చేయండి
మీరు చూడగలిగినట్లుగా, ఉన్నత గణితం లేదు. అప్పుడు కష్టం ఏమిటి? ప్రతి పద్ధతిని విడిగా చూద్దాం.
పద్ధతి
వివరణ
Redis-క్లస్టర్ యొక్క లక్షణాలు
నిర్ణయం
తయారుగా ఉండండి
కీని వ్రాయండి / చదవండి
MGET MSET
బహుళ కీలను వ్రాయండి/చదవండి
కీలు వేర్వేరు నోడ్లలో ఉంటాయి. రెడీమేడ్ లైబ్రరీలు ఒక నోడ్లో మాత్రమే బహుళ-ఆపరేషన్లను నిర్వహించగలవు
MGETని N GET కార్యకలాపాల పైప్లైన్తో భర్తీ చేయండి
డిబిని ఎంచుకోండి
మేము పని చేసే ఆధారాన్ని ఎంచుకోండి
బహుళ డేటాబేస్లకు మద్దతు ఇవ్వదు
అన్నింటినీ ఒకే డేటాబేస్లో ఉంచండి. కీలకు ఉపసర్గలను జోడించండి
స్కాన్
డేటాబేస్లోని అన్ని కీల ద్వారా వెళ్ళండి
మాకు ఒక డేటాబేస్ ఉన్నందున, క్లస్టర్లోని అన్ని కీల ద్వారా వెళ్లడం చాలా ఖరీదైనది
ఒక కీలో మార్పులేని దానిని నిర్వహించండి మరియు ఈ కీపై HSCAN చేయండి. లేదా పూర్తిగా తిరస్కరించండి
GEO
జియోకీతో కార్యకలాపాలు
జియోకీ పగిలిపోలేదు
నమూనా ద్వారా కీ
నమూనా ద్వారా కీ కోసం శోధిస్తోంది
మాకు ఒక డేటాబేస్ ఉన్నందున, మేము క్లస్టర్లోని అన్ని కీలలో శోధిస్తాము. చాలా ఖరీదైనది
SCAN విషయంలో వలె మార్పులేని దానిని తిరస్కరించండి లేదా నిర్వహించండి
రెడిస్ vs రెడిస్-క్లస్టర్
క్లస్టర్కి మారినప్పుడు మనం ఏమి కోల్పోతాము మరియు మనం ఏమి పొందుతాము?
- ప్రతికూలతలు: మేము అనేక డేటాబేస్ల కార్యాచరణను కోల్పోతాము.
- మేము ఒక క్లస్టర్లో తార్కికంగా సంబంధం లేని డేటాను నిల్వ చేయాలనుకుంటే, మేము ఉపసర్గ రూపంలో క్రచెస్ను తయారు చేయాలి.
- మేము SCAN, DBSIZE, CLEAR DB మొదలైన అన్ని "బేస్" కార్యకలాపాలను కోల్పోతాము.
- బహుళ-ఆపరేషన్లను అమలు చేయడం చాలా కష్టంగా మారింది ఎందుకంటే దీనికి అనేక నోడ్లకు యాక్సెస్ అవసరం కావచ్చు.
- ప్రయోజనాలు:
- మాస్టర్ ఫెయిల్ఓవర్ రూపంలో తప్పు సహనం.
- Redis వైపు షార్డింగ్.
- నోడ్ల మధ్య అటామిక్గా మరియు డౌన్టైమ్ లేకుండా డేటాను బదిలీ చేయండి.
- డౌన్టైమ్ లేకుండా సామర్థ్యం మరియు లోడ్లను జోడించండి మరియు పునఃపంపిణీ చేయండి.
మీరు అధిక స్థాయి తప్పు సహనాన్ని అందించనవసరం లేకపోతే, క్లస్టర్కు వెళ్లడం విలువైనది కాదని నేను నిర్ధారించాను, ఎందుకంటే ఇది చిన్నవిషయం కాని పని కావచ్చు. కానీ మీరు మొదట్లో ప్రత్యేక వెర్షన్ మరియు క్లస్టర్ వెర్షన్ మధ్య ఎంచుకుంటే, మీరు క్లస్టర్ను ఎంచుకోవాలి, ఎందుకంటే ఇది అధ్వాన్నంగా ఉండదు మరియు అదనంగా, మీకు తలనొప్పి నుండి ఉపశమనం లభిస్తుంది.
తరలించడానికి సిద్ధమవుతోంది
తరలించడానికి అవసరాలతో ప్రారంభిద్దాం:
- ఇది అతుకులుగా ఉండాలి. 5 నిమిషాల పాటు సర్వీస్ని పూర్తిగా ఆపివేయడం మాకు సరిపోదు.
- ఇది సాధ్యమైనంత సురక్షితంగా మరియు క్రమంగా ఉండాలి. నేను పరిస్థితిపై కొంత నియంత్రణ కలిగి ఉండాలనుకుంటున్నాను. మేము అన్నింటినీ ఒకేసారి డంప్ చేసి, రోల్బ్యాక్ బటన్పై ప్రార్థన చేయకూడదనుకుంటున్నాము.
- కదిలేటప్పుడు కనిష్ట డేటా నష్టం. పరమాణుపరంగా తరలించడం చాలా కష్టమని మేము అర్థం చేసుకున్నాము, కాబట్టి మేము సాధారణ మరియు క్లస్టర్డ్ Redisలో డేటా మధ్య కొంత డీసింక్రొనైజేషన్ని అనుమతిస్తాము.
క్లస్టర్ నిర్వహణ
తరలించడానికి ముందు, మేము క్లస్టర్కు మద్దతు ఇవ్వగలమా అనే దాని గురించి ఆలోచించాలి:
- చార్ట్లు. CPU లోడ్, మెమరీ వినియోగం, క్లయింట్ల సంఖ్య, GET సంఖ్య, SET, AUTH కార్యకలాపాలు మొదలైనవాటిని గ్రాఫ్ చేయడానికి మేము ప్రోమేతియస్ మరియు గ్రాఫానాని ఉపయోగిస్తాము.
- నైపుణ్యం. రేపు మీ బాధ్యత కింద మీకు భారీ క్లస్టర్ ఉంటుందని ఊహించుకోండి. అది విచ్ఛిన్నమైతే, మీరు తప్ప మరెవరూ దాన్ని పరిష్కరించలేరు. అతను వేగాన్ని తగ్గించడం ప్రారంభిస్తే, అందరూ మీ వైపుకు పరిగెత్తుతారు. మీరు వనరులను జోడించాలనుకుంటే లేదా లోడ్ను పునఃపంపిణీ చేయాలనుకుంటే, మీ వద్దకు తిరిగి రండి. 25 వద్ద బూడిద రంగులోకి మారకుండా ఉండటానికి, ఈ కేసులను అందించడం మరియు సాంకేతికత నిర్దిష్ట చర్యలలో ఎలా ప్రవర్తిస్తుందో ముందుగానే తనిఖీ చేయడం మంచిది. దీని గురించి “నిపుణత” విభాగంలో మరింత వివరంగా మాట్లాడుదాం.
- పర్యవేక్షణ మరియు హెచ్చరికలు. క్లస్టర్ విచ్ఛిన్నమైనప్పుడు, మీరు దాని గురించి మొదట తెలుసుకోవాలనుకుంటున్నారు. ఇక్కడ మేము అన్ని నోడ్లు క్లస్టర్ స్థితి గురించి ఒకే సమాచారాన్ని తిరిగి ఇచ్చే నోటిఫికేషన్కు పరిమితం చేసాము (అవును, ఇది భిన్నంగా జరుగుతుంది). మరియు ఇతర సమస్యలను Redis క్లయింట్ సేవల నుండి హెచ్చరికల ద్వారా మరింత త్వరగా గమనించవచ్చు.
కదులుతోంది
మేము ఎలా తరలిస్తాము:
- అన్నింటిలో మొదటిది, మీరు క్లస్టర్తో పని చేయడానికి లైబ్రరీని సిద్ధం చేయాలి. మేము గో వెర్షన్కు గో-రెడిస్ని ప్రాతిపదికగా తీసుకున్నాము మరియు దానిని మనకు సరిపోయేలా కొద్దిగా మార్చుకున్నాము. మేము పైప్లైన్ల ద్వారా బహుళ-పద్ధతులను అమలు చేసాము మరియు అభ్యర్థనలను పునరావృతం చేయడానికి నియమాలను కూడా కొద్దిగా సరిదిద్దాము. PHP సంస్కరణలో మరిన్ని సమస్యలు ఉన్నాయి, కానీ మేము చివరికి php-redisలో స్థిరపడ్డాము. వారు ఇటీవల క్లస్టర్ సపోర్ట్ని ప్రవేశపెట్టారు మరియు ఇది మా అభిప్రాయం ప్రకారం బాగుంది.
- తదుపరి మీరు క్లస్టర్ను అమలు చేయాలి. ఇది కాన్ఫిగరేషన్ ఫైల్ ఆధారంగా రెండు ఆదేశాలలో అక్షరాలా చేయబడుతుంది. మేము క్రింద మరింత వివరంగా సెట్టింగ్ గురించి చర్చిస్తాము.
- క్రమంగా కదిలేందుకు మేము డ్రై-మోడ్ని ఉపయోగిస్తాము. మేము ఒకే ఇంటర్ఫేస్తో లైబ్రరీ యొక్క రెండు వెర్షన్లను కలిగి ఉన్నందున (ఒకటి సాధారణ వెర్షన్కు, మరొకటి క్లస్టర్కి), ప్రత్యేక వెర్షన్తో పని చేసే రేపర్ను రూపొందించడానికి మరియు క్లస్టర్కి అన్ని అభ్యర్థనలను సమాంతరంగా నకిలీ చేయడానికి ఖర్చు చేయదు, ప్రతిస్పందనలను సరిపోల్చండి మరియు లాగ్లలో వ్యత్యాసాలను వ్రాయండి (మా విషయంలో న్యూరెలిక్లో). అందువల్ల, రోల్ అవుట్ సమయంలో క్లస్టర్ వెర్షన్ విచ్ఛిన్నమైనప్పటికీ, మా ఉత్పత్తి ప్రభావితం కాదు.
- డ్రై మోడ్లో క్లస్టర్ను రూపొందించిన తర్వాత, ప్రతిస్పందన వ్యత్యాసాల గ్రాఫ్ను మనం ప్రశాంతంగా చూడవచ్చు. లోపం రేటు నెమ్మదిగా కానీ ఖచ్చితంగా ఏదైనా చిన్న స్థిరాంకం వైపు కదులుతున్నట్లయితే, అప్పుడు అంతా బాగానే ఉంటుంది. ఇంకా వైరుధ్యాలు ఎందుకు ఉన్నాయి? ప్రత్యేక సంస్కరణలో రికార్డింగ్ క్లస్టర్ కంటే కొంచెం ముందుగా జరుగుతుంది మరియు మైక్రోలాగ్ కారణంగా, డేటా వేరుగా ఉండవచ్చు. వ్యత్యాసాల లాగ్లను చూడటమే మిగిలి ఉంది మరియు అవన్నీ రికార్డ్ యొక్క అణురహితం ద్వారా వివరించబడితే, మనం కొనసాగవచ్చు.
- ఇప్పుడు మీరు డ్రై-మోడ్ని వ్యతిరేక దిశలో మార్చవచ్చు. మేము క్లస్టర్ నుండి వ్రాస్తాము మరియు చదువుతాము మరియు దానిని ప్రత్యేక సంస్కరణలో నకిలీ చేస్తాము. దేనికోసం? వచ్చే వారంలో నేను క్లస్టర్ పనిని గమనించాలనుకుంటున్నాను. పీక్ లోడ్లో సమస్యలు ఉన్నాయని అకస్మాత్తుగా తేలితే లేదా మేము ఏదైనా పరిగణనలోకి తీసుకోకపోతే, మేము ఎల్లప్పుడూ పాత కోడ్కి అత్యవసర రోల్బ్యాక్ మరియు డ్రై-మోడ్ కారణంగా ప్రస్తుత డేటాను కలిగి ఉంటాము.
- డ్రై-మోడ్ని నిలిపివేయడం మరియు ప్రత్యేక సంస్కరణను విడదీయడం మాత్రమే మిగిలి ఉంది.
నైపుణ్యం
ముందుగా, క్లస్టర్ డిజైన్ గురించి క్లుప్తంగా.
అన్నింటిలో మొదటిది, Redis ఒక కీ-విలువ స్టోర్. ఏకపక్ష తీగలు కీలుగా ఉపయోగించబడతాయి. సంఖ్యలు, స్ట్రింగ్లు మరియు మొత్తం నిర్మాణాలను విలువలుగా ఉపయోగించవచ్చు. తరువాతి వాటిలో చాలా ఉన్నాయి, కానీ సాధారణ నిర్మాణాన్ని అర్థం చేసుకోవడానికి ఇది మాకు ముఖ్యమైనది కాదు.
కీల తర్వాత సంగ్రహణ యొక్క తదుపరి స్థాయి స్లాట్లు (SLOTS). ప్రతి కీ 16 స్లాట్లలో ఒకదానికి చెందినది. ప్రతి స్లాట్ లోపల ఎన్ని కీలు ఉండవచ్చు. ఈ విధంగా, అన్ని కీలు 383 డిస్జాయింట్ సెట్లుగా విభజించబడ్డాయి.
తర్వాత, క్లస్టర్లో తప్పనిసరిగా N మాస్టర్ నోడ్లు ఉండాలి. ప్రతి నోడ్ను క్లస్టర్లోని ఇతర నోడ్ల గురించి ప్రతిదీ తెలిసిన ప్రత్యేక రెడిస్ ఉదాహరణగా భావించవచ్చు. ప్రతి మాస్టర్ నోడ్ అనేక స్లాట్లను కలిగి ఉంటుంది. ప్రతి స్లాట్ ఒక మాస్టర్ నోడ్కు మాత్రమే చెందినది. అన్ని స్లాట్లను నోడ్ల మధ్య పంపిణీ చేయాలి. కొన్ని స్లాట్లు కేటాయించబడకపోతే, వాటిలో నిల్వ చేయబడిన కీలు ప్రాప్యత చేయబడవు. ప్రతి మాస్టర్ నోడ్ను ప్రత్యేక లాజికల్ లేదా ఫిజికల్ మెషీన్లో అమలు చేయడం అర్ధమే. ప్రతి నోడ్ ఒక కోర్పై మాత్రమే నడుస్తుందని గుర్తుంచుకోవడం విలువ, మరియు మీరు ఒకే లాజికల్ మెషీన్లో బహుళ రెడిస్ ఇన్స్టాన్స్లను అమలు చేయాలనుకుంటే, అవి వేర్వేరు కోర్లలో నడుస్తాయని నిర్ధారించుకోండి (మేము దీనిని ప్రయత్నించలేదు, కానీ సిద్ధాంతపరంగా ఇది పని చేస్తుంది) . ముఖ్యంగా, మాస్టర్ నోడ్లు రెగ్యులర్ షార్డింగ్ను అందిస్తాయి మరియు మరిన్ని మాస్టర్ నోడ్లు స్కేల్ చేయడానికి అభ్యర్థనలను వ్రాయడానికి మరియు చదవడానికి అనుమతిస్తాయి.
అన్ని కీలు స్లాట్ల మధ్య పంపిణీ చేయబడిన తర్వాత మరియు మాస్టర్ నోడ్ల మధ్య స్లాట్లు చెల్లాచెదురుగా ఉన్న తర్వాత, ప్రతి మాస్టర్ నోడ్కు ఏకపక్ష సంఖ్యలో స్లేవ్ నోడ్లను జోడించవచ్చు. అటువంటి ప్రతి మాస్టర్-స్లేవ్ లింక్లో, సాధారణ ప్రతిరూపం పని చేస్తుంది. రీడ్ రిక్వెస్ట్లను స్కేల్ చేయడానికి మరియు మాస్టర్ ఫెయిల్యూర్ విషయంలో ఫెయిల్ఓవర్ కోసం స్లేవ్లు అవసరం.
ఇప్పుడు చేయగలిగితే బాగుండే ఆపరేషన్ల గురించి మాట్లాడుకుందాం.
మేము Redis-CLI ద్వారా సిస్టమ్ను యాక్సెస్ చేస్తాము. Redisకి ఒకే ఎంట్రీ పాయింట్ లేదు కాబట్టి, మీరు ఈ క్రింది కార్యకలాపాలను ఏదైనా నోడ్లో చేయవచ్చు. ప్రతి పాయింట్ వద్ద నేను లోడ్ కింద ఆపరేషన్ చేసే అవకాశంపై ప్రత్యేకంగా దృష్టి సారిస్తాను.
- మనకు అవసరమైన మొదటి మరియు అతి ముఖ్యమైన విషయం క్లస్టర్ నోడ్స్ ఆపరేషన్. ఇది క్లస్టర్ స్థితిని అందిస్తుంది, నోడ్ల జాబితా, వాటి పాత్రలు, స్లాట్ పంపిణీ మొదలైనవాటిని చూపుతుంది. క్లస్టర్ సమాచారం మరియు క్లస్టర్ స్లాట్లను ఉపయోగించి మరింత సమాచారాన్ని పొందవచ్చు.
- నోడ్లను జోడించడం మరియు తీసివేయడం మంచిది. ఈ ప్రయోజనం కోసం క్లస్టర్ మీట్ మరియు క్లస్టర్ మర్చిపోయే కార్యకలాపాలు ఉన్నాయి. క్లస్టర్ మర్చిపోతే తప్పనిసరిగా మాస్టర్లు మరియు ప్రతిరూపాలు రెండింటికీ ప్రతి నోడ్కు వర్తింపజేయాలని దయచేసి గమనించండి. మరియు క్లస్టర్ మీట్ను ఒక నోడ్లో మాత్రమే పిలవాలి. ఈ వ్యత్యాసం కలవరపరుస్తుంది, కాబట్టి మీరు మీ క్లస్టర్తో ప్రత్యక్ష ప్రసారం చేయడానికి ముందు దీని గురించి తెలుసుకోవడం ఉత్తమం. నోడ్ను జోడించడం అనేది యుద్ధంలో సురక్షితంగా జరుగుతుంది మరియు క్లస్టర్ యొక్క ఆపరేషన్ను ఏ విధంగానూ ప్రభావితం చేయదు (ఇది తార్కికం). మీరు క్లస్టర్ నుండి నోడ్ను తీసివేయబోతున్నట్లయితే, దానిపై స్లాట్లు లేవని మీరు నిర్ధారించుకోవాలి (లేకపోతే మీరు ఈ నోడ్లోని అన్ని కీలకు యాక్సెస్ను కోల్పోయే ప్రమాదం ఉంది). అలాగే, బానిసలను కలిగి ఉన్న యజమానిని తొలగించవద్దు, లేకుంటే కొత్త యజమాని కోసం అనవసరమైన ఓటు వేయబడుతుంది. నోడ్లకు ఇకపై స్లాట్లు లేనట్లయితే, ఇది చిన్న సమస్య, అయితే మనం ముందుగా స్లేవ్లను తొలగించగలిగితే మనకు అదనపు ఎంపికలు ఎందుకు అవసరం.
- మీరు మాస్టర్ మరియు స్లేవ్ స్థానాలను బలవంతంగా మార్చుకోవాల్సిన అవసరం ఉంటే, అప్పుడు క్లస్టర్ ఫెయిల్ఓవర్ కమాండ్ చేస్తుంది. దానిని యుద్ధంలో పిలిచినప్పుడు, ఆపరేషన్ సమయంలో మాస్టర్ అందుబాటులో ఉండదని మీరు అర్థం చేసుకోవాలి. సాధారణంగా స్విచ్ సెకను కంటే తక్కువ సమయంలో జరుగుతుంది, కానీ పరమాణువు కాదు. ఈ సమయంలో మాస్టర్కి కొన్ని అభ్యర్థనలు విఫలమవుతాయని మీరు ఆశించవచ్చు.
- క్లస్టర్ నుండి నోడ్ను తీసివేయడానికి ముందు, దానిపై స్లాట్లు ఉండకూడదు. క్లస్టర్ రీషార్డ్ కమాండ్ ఉపయోగించి వాటిని పునఃపంపిణీ చేయడం మంచిది. స్లాట్లు ఒక మాస్టర్ నుండి మరొక మాస్టర్కు బదిలీ చేయబడతాయి. మొత్తం ఆపరేషన్ చాలా నిమిషాలు పట్టవచ్చు, ఇది బదిలీ చేయబడిన డేటా పరిమాణంపై ఆధారపడి ఉంటుంది, అయితే బదిలీ ప్రక్రియ సురక్షితంగా ఉంటుంది మరియు క్లస్టర్ యొక్క ఆపరేషన్ను ఏ విధంగానూ ప్రభావితం చేయదు. అందువలన, మొత్తం డేటాను ఒక నోడ్ నుండి మరొక నోడ్కు నేరుగా లోడ్ కింద బదిలీ చేయవచ్చు మరియు దాని లభ్యత గురించి చింతించకుండా. అయితే, సూక్ష్మబేధాలు కూడా ఉన్నాయి. ముందుగా, డేటా బదిలీ అనేది గ్రహీత మరియు పంపినవారి నోడ్లపై నిర్దిష్ట లోడ్తో అనుబంధించబడుతుంది. గ్రహీత నోడ్ ఇప్పటికే ప్రాసెసర్లో భారీగా లోడ్ చేయబడి ఉంటే, మీరు కొత్త డేటాను స్వీకరించడంతో దాన్ని లోడ్ చేయకూడదు. రెండవది, పంపే మాస్టర్పై ఒక్క స్లాట్ కూడా మిగిలిపోనందున, దాని బానిసలందరూ వెంటనే ఈ స్లాట్లను బదిలీ చేసిన యజమాని వద్దకు వెళతారు. మరియు సమస్య ఏమిటంటే, ఈ బానిసలందరూ ఒకేసారి డేటాను సమకాలీకరించాలనుకుంటున్నారు. మరియు ఇది పూర్తి సమకాలీకరణ కంటే పాక్షికంగా ఉంటే మీరు అదృష్టవంతులు అవుతారు. దీన్ని పరిగణనలోకి తీసుకుని, స్లాట్లను బదిలీ చేయడం మరియు బానిసలను నిలిపివేయడం/బదిలీ చేయడం వంటి కార్యకలాపాలను కలపండి. లేదా మీకు తగినంత భద్రత ఉందని ఆశిస్తున్నాము.
- బదిలీ సమయంలో, మీరు ఎక్కడైనా మీ స్లాట్లను కోల్పోయినట్లు గుర్తిస్తే మీరు ఏమి చేయాలి? ఈ సమస్య మిమ్మల్ని ప్రభావితం చేయదని నేను ఆశిస్తున్నాను, అయితే అది ఉంటే, క్లస్టర్ ఫిక్స్ ఆపరేషన్ ఉంది. కనీసం, ఆమె యాదృచ్ఛిక క్రమంలో నోడ్స్లో స్లాట్లను చెల్లాచెదురు చేస్తుంది. క్లస్టర్ నుండి పంపిణీ చేయబడిన స్లాట్లతో నోడ్ను మొదట తీసివేయడం ద్వారా దాని ఆపరేషన్ను తనిఖీ చేయాలని నేను సిఫార్సు చేస్తున్నాను. కేటాయించబడని స్లాట్లలోని డేటా ఇప్పటికే అందుబాటులో లేనందున, ఈ స్లాట్ల లభ్యతతో సమస్యల గురించి ఆందోళన చెందడం చాలా ఆలస్యం. క్రమంగా, ఆపరేషన్ పంపిణీ చేయబడిన స్లాట్లను ప్రభావితం చేయదు.
- మరొక ఉపయోగకరమైన ఆపరేషన్ మానిటర్. ఇది నోడ్కి వెళ్లే అభ్యర్థనల మొత్తం జాబితాను నిజ సమయంలో చూడటానికి మిమ్మల్ని అనుమతిస్తుంది. అదనంగా, మీరు దానిని గుర్తించవచ్చు మరియు అవసరమైన ట్రాఫిక్ ఉందో లేదో తెలుసుకోవచ్చు.
మాస్టర్ ఫెయిల్ఓవర్ విధానాన్ని కూడా ప్రస్తావించడం విలువ. సంక్షిప్తంగా, ఇది ఉనికిలో ఉంది మరియు, నా అభిప్రాయం ప్రకారం, ఇది గొప్పగా పనిచేస్తుంది. అయితే, మీరు మాస్టర్ నోడ్తో మెషీన్లో పవర్ కార్డ్ను అన్ప్లగ్ చేస్తే, Redis వెంటనే స్విచ్ అవుతుందని మరియు క్లయింట్లు నష్టాన్ని గమనించరని అనుకోకండి. నా ఆచరణలో, మార్పిడి కొన్ని సెకన్లలో జరుగుతుంది. ఈ సమయంలో, కొన్ని డేటా అందుబాటులో ఉండదు: మాస్టర్ యొక్క లభ్యత కనుగొనబడింది, నోడ్లు కొత్తదానికి ఓటు వేస్తాయి, బానిసలు మారారు, డేటా సమకాలీకరించబడుతుంది. పథకం పని చేస్తుందని మీరే నిర్ధారించుకోవడానికి ఉత్తమ మార్గం స్థానిక వ్యాయామాలను నిర్వహించడం. మీ ల్యాప్టాప్లో క్లస్టర్ను పెంచండి, దానికి కనీస లోడ్ ఇవ్వండి, క్రాష్ను అనుకరించండి (ఉదాహరణకు, పోర్ట్లను నిరోధించడం ద్వారా) మరియు మారే వేగాన్ని అంచనా వేయండి. నా అభిప్రాయం ప్రకారం, ఒకటి లేదా రెండు రోజులు ఈ విధంగా ఆడిన తర్వాత మాత్రమే మీరు సాంకేతికత యొక్క ఆపరేషన్లో నమ్మకంగా ఉండగలరు. సరే, లేదా ఇంటర్నెట్లో సగం మంది ఉపయోగించే సాఫ్ట్వేర్ బహుశా పని చేస్తుందని ఆశిస్తున్నాము.
ఆకృతీకరణ
తరచుగా, మీరు సాధనంతో పని చేయడం ప్రారంభించాల్సిన మొదటి విషయం కాన్ఫిగరేషన్. మరియు ప్రతిదీ పని చేసినప్పుడు, మీరు కాన్ఫిగరేషన్ను తాకడం కూడా ఇష్టం లేదు. సెట్టింగ్లకు తిరిగి వెళ్లమని మరియు వాటిని జాగ్రత్తగా చూసేందుకు మిమ్మల్ని బలవంతం చేయడానికి కొంత ప్రయత్నం అవసరం. నా జ్ఞాపకార్థం, కాన్ఫిగరేషన్పై అజాగ్రత్త కారణంగా మేము కనీసం రెండు తీవ్రమైన వైఫల్యాలను కలిగి ఉన్నాము. కింది అంశాలకు ప్రత్యేక శ్రద్ధ వహించండి:
- సమయం ముగిసింది 0
నిష్క్రియ కనెక్షన్లు మూసివేయబడిన సమయం (సెకన్లలో). 0 - మూసివేయవద్దు
మా ప్రతి లైబ్రరీ కనెక్షన్లను సరిగ్గా మూసివేయలేకపోయింది. ఈ సెట్టింగ్ని నిలిపివేయడం ద్వారా, మేము క్లయింట్ల సంఖ్యపై పరిమితిని తాకే ప్రమాదం ఉంది. మరోవైపు, అటువంటి సమస్య ఉంటే, కోల్పోయిన కనెక్షన్ల స్వయంచాలక రద్దు దానిని ముసుగు చేస్తుంది మరియు మేము గమనించకపోవచ్చు. అదనంగా, పెర్సిస్ట్ కనెక్షన్లను ఉపయోగిస్తున్నప్పుడు మీరు ఈ సెట్టింగ్ను ప్రారంభించకూడదు. - xy & అనుబంధం మాత్రమే అవును అని సేవ్ చేయండి
RDB స్నాప్షాట్ను సేవ్ చేస్తోంది.
మేము RDB/AOF సమస్యలను క్రింద వివరంగా చర్చిస్తాము. - స్టాప్-రైట్స్-ఆన్-బిజిసేవ్-ఎర్రర్ నో & స్లేవ్-సర్వ్-స్టేల్-డేటా అవును
ప్రారంభించబడితే, RDB స్నాప్షాట్ విచ్ఛిన్నమైతే, మాస్టర్ మార్పు అభ్యర్థనలను అంగీకరించడం ఆపివేస్తుంది. యజమానికి కనెక్షన్ పోయినట్లయితే, బానిస అభ్యర్థనలకు ప్రతిస్పందించడం కొనసాగించవచ్చు (అవును). లేదా ప్రతిస్పందించడం ఆపివేస్తుంది (లేదు)
రెడిస్ గుమ్మడికాయగా మారిన పరిస్థితి మాకు సంతోషంగా లేదు. - repl-ping-slave-period 5
ఈ కాలం తరువాత, మాస్టర్ విచ్ఛిన్నమైందని మేము ఆందోళన చెందడం ప్రారంభిస్తాము మరియు ఫెయిల్ఓవర్ విధానాన్ని నిర్వహించే సమయం ఇది.
మీరు తప్పుడు పాజిటివ్లు మరియు ఫెయిల్ఓవర్ను ప్రేరేపించడం మధ్య సమతుల్యతను మాన్యువల్గా కనుగొనవలసి ఉంటుంది. మా ఆచరణలో ఇది 5 సెకన్లు. - repl-backlog-size 1024mb & epl-backlog-ttl 0
మేము విఫలమైన ప్రతిరూపం కోసం బఫర్లో సరిగ్గా ఇంత డేటాను నిల్వ చేయవచ్చు. బఫర్ అయిపోతే, మీరు పూర్తిగా సమకాలీకరించవలసి ఉంటుంది.
అధిక విలువను సెట్ చేయడం మంచిదని ప్రాక్టీస్ సూచిస్తుంది. ప్రతిరూపం లాగ్ అవ్వడానికి చాలా కారణాలు ఉన్నాయి. ఇది వెనుకబడి ఉంటే, అప్పుడు మీ మాస్టర్ ఇప్పటికే భరించవలసి కష్టపడుతున్నారు మరియు పూర్తి సమకాలీకరణ చివరి గడ్డి అవుతుంది. - maxclients 10000
వన్-టైమ్ క్లయింట్ల గరిష్ట సంఖ్య.
మా అనుభవంలో, అధిక విలువను సెట్ చేయడం మంచిది. Redis 10k కనెక్షన్లను చక్కగా నిర్వహిస్తుంది. సిస్టమ్లో తగినంత సాకెట్లు ఉన్నాయని నిర్ధారించుకోండి. - maxmemory-policy volatile-ttl
అందుబాటులో ఉన్న మెమరీ పరిమితిని చేరుకున్నప్పుడు కీలు తొలగించబడే నియమం.
ఇక్కడ ముఖ్యమైనది నియమం కాదు, ఇది ఎలా జరుగుతుందో అర్థం చేసుకోవడం. మెమొరీ పరిమితిని చేరుకున్నప్పుడు సాధారణంగా పని చేయగల సామర్థ్యం కోసం Redisని ప్రశంసించవచ్చు.
RDB మరియు AOF సమస్యలు
Redis స్వయంగా RAMలో మొత్తం సమాచారాన్ని నిల్వ చేసినప్పటికీ, డిస్క్లో డేటాను సేవ్ చేయడానికి ఒక మెకానిజం కూడా ఉంది. మరింత ఖచ్చితంగా, మూడు యంత్రాంగాలు:
- RDB-స్నాప్షాట్ - మొత్తం డేటా యొక్క పూర్తి స్నాప్షాట్. SAVE XY కాన్ఫిగరేషన్ని ఉపయోగించి సెట్ చేయండి మరియు "కనీసం Y కీలు మారినట్లయితే ప్రతి X సెకన్లకు మొత్తం డేటా యొక్క పూర్తి స్నాప్షాట్ను సేవ్ చేయండి" అని చదవండి.
- అనుబంధం-మాత్రమే ఫైల్ - అవి నిర్వహించబడే క్రమంలో కార్యకలాపాల జాబితా. ఫైల్కి ప్రతి X సెకన్లు లేదా ప్రతి Y ఆపరేషన్లకు కొత్త ఇన్కమింగ్ ఆపరేషన్లను జోడిస్తుంది.
- RDB మరియు AOF మునుపటి రెండింటి కలయిక.
అన్ని పద్ధతులకు వాటి ప్రయోజనాలు మరియు అప్రయోజనాలు ఉన్నాయి, నేను వాటన్నింటినీ జాబితా చేయను, నా అభిప్రాయం ప్రకారం, స్పష్టంగా లేని పాయింట్లకు నేను దృష్టిని ఆకర్షిస్తాను.
ముందుగా, RDB స్నాప్షాట్ను సేవ్ చేయడానికి FORKకి కాల్ చేయడం అవసరం. చాలా డేటా ఉంటే, ఇది కొన్ని మిల్లీసెకన్ల నుండి సెకను వరకు అన్ని రెడిస్ను హ్యాంగ్ చేయగలదు. అదనంగా, సిస్టమ్ అటువంటి స్నాప్షాట్ కోసం మెమరీని కేటాయించాల్సిన అవసరం ఉంది, ఇది లాజికల్ మెషీన్లో RAM యొక్క డబుల్ సరఫరాను ఉంచవలసిన అవసరానికి దారి తీస్తుంది: Redis కోసం 8 GB కేటాయించబడితే, అప్పుడు 16 GB వర్చువల్ మెషీన్లో అందుబాటులో ఉండాలి అది.
రెండవది, పాక్షిక సమకాలీకరణతో సమస్యలు ఉన్నాయి. AOF మోడ్లో, స్లేవ్ మళ్లీ కనెక్ట్ చేయబడినప్పుడు, పాక్షిక సమకాలీకరణకు బదులుగా, పూర్తి సమకాలీకరణను నిర్వహించవచ్చు. ఇది ఎందుకు జరుగుతుంది, నేను అర్థం చేసుకోలేకపోయాను. కానీ దీన్ని గుర్తుంచుకోవడం విలువ.
ప్రతిదీ ఇప్పటికే బానిసలచే నకిలీ చేయబడి ఉంటే డిస్క్లో మనకు నిజంగా ఈ డేటా అవసరమా అనే దాని గురించి ఈ రెండు పాయింట్లు ఇప్పటికే ఆలోచించేలా చేస్తాయి. అన్ని బానిసలు విఫలమైతే మాత్రమే డేటాను కోల్పోతారు మరియు ఇది "DCలో అగ్ని" స్థాయి సమస్య. రాజీగా, మీరు బానిసలపై మాత్రమే డేటాను సేవ్ చేయాలని ప్రతిపాదించవచ్చు, అయితే ఈ సందర్భంలో మీరు ఈ బానిసలు విపత్తు పునరుద్ధరణ సమయంలో ఎప్పటికీ మాస్టర్గా మారరని నిర్ధారించుకోవాలి (దీని కోసం వారి కాన్ఫిగరేషన్లో బానిస ప్రాధాన్యత సెట్టింగ్ ఉంది). మన కోసం, ప్రతి నిర్దిష్ట సందర్భంలో డిస్క్కు డేటాను సేవ్ చేయడం అవసరమా అని మేము ఆలోచిస్తాము మరియు చాలా తరచుగా సమాధానం “లేదు”.
తీర్మానం
ముగింపులో, రెడిస్-క్లస్టర్ గురించి వినని వారికి ఎలా పనిచేస్తుందనే దాని గురించి నేను ఒక సాధారణ ఆలోచనను ఇవ్వగలిగానని మరియు దానిని ఉపయోగిస్తున్న వారికి కొన్ని స్పష్టమైన విషయాలపై దృష్టిని ఆకర్షించానని నేను ఆశిస్తున్నాను. చాలా కాలం వరకు.
మీ సమయానికి ధన్యవాదాలు మరియు ఎప్పటిలాగే, అంశంపై వ్యాఖ్యలు స్వాగతం.
మూలం: www.habr.com