ఆర్టికల్ డైరెక్టరీ
HestiaCP వాతావరణాలలో తరచుగా Apache2 క్రాష్లు లేదా Monit ఆటో-రీస్టార్ట్ వైఫల్యాలు ఎదురవుతున్నాయా? ఈ వ్యాసం, Monitతో Apache2ను పర్యవేక్షించేటప్పుడు ఎదురయ్యే సాధారణ పొరపాట్లను నివారించడానికి ఒక ఆచరణాత్మక మార్గదర్శిని అందిస్తుంది. ఇది PID పాత్ సరిపోలకపోవడం మరియు అనుమతులను నిరోధించడం వంటి సాధారణ సమస్యలను లోతుగా విశ్లేషించి, ప్రొడక్షన్-గ్రేడ్ Monit ఆటోమేషన్ కాన్ఫిగరేషన్ ఫైళ్లను కూడా అందిస్తుంది. ఇప్పుడే హై-అవైలబిలిటీ సర్వర్ నిర్వహణ పద్ధతులను నేర్చుకోండి మరియు వైఫల్యాల నుండి రెండవ-స్థాయి ఆటోమేటిక్ రికవరీని సాధించండి!
Apache2ని పర్యవేక్షించడానికి Monitని ఉపయోగిస్తున్నప్పుడు నేను ఎదుర్కొన్న ఇబ్బందులు
గత శుక్రవారం, అర్ధరాత్రి సమయంలో సర్వర్ నాకు మోనిట్ అలర్ట్ ఇచ్చింది.
నేను దిగ్భ్రాంతితో ప్యానెల్ వైపు చూశాను, అపాచీ2 స్టేటస్ కాలమ్లో ఎర్రటి టైమ్అవుట్ కనిపించింది.

నేను దాని గురించి కాసేపు ఆలోచించాను. ఈ పగటిపూటనే సర్వర్కు మోనిట్ మానిటరింగ్ను జోడించాను, మరియు ఒక ఆన్లైన్ ట్యుటోరియల్ నుండి కాన్ఫిగరేషన్ను కాపీ చేసి పేస్ట్ చేశాను. ఎలాంటి సమస్యలు ఉండకూడదు, కదా?
మరుసటి ఉదయం, అది మళ్ళీ టైమ్ అవుట్ అయింది. మూడవసారి తర్వాత, మానిటర్ పూర్తిగా పనిచేయడం మానేసింది, మరియు ప్యానెల్ "మానిటర్ చేయబడలేదు" అని ప్రదర్శించింది.
నేను...
నిజం చెప్పాలంటే, మొదట్లో నేను దాన్ని అంత సీరియస్గా తీసుకోలేదు. అపాచీ2 పర్యవేక్షణా? ఆన్లైన్లో బోలెడన్ని టెంప్లేట్ కాన్ఫిగరేషన్లు దొరుకుతాయి, కేవలం కాపీ పేస్ట్ చేస్తే చాలు. కానీ ఆ పేస్ట్ చేసే ప్రక్రియ నాకు నిజంగా చాలా కోపం తెప్పించింది.
HestiaCP యొక్క డిఫాల్ట్ ఆర్కిటెక్చర్ మరియు Monit పోర్ట్ల మధ్య వైరుధ్యానికి మూల కారణం
నాకు చాలా ఇబ్బంది కలిగించిన కాన్ఫిగరేషన్ను ముందుగా మీకు చూపిస్తాను, అప్పుడు అది మీరు చూసిన వెర్షన్తో సరిగ్గా ఒకేలా ఉందో లేదో మీరు చూడవచ్చు.
check process apache2 with pidfile /var/run/apache2/apache2.pid
start program = "/usr/sbin/service apache2 start"
stop program = "/usr/sbin/service apache2 stop"
if failed host 127.0.0.1 port 80 protocol http then restart
if 5 restarts within 5 cycles then timeoutఇది బాగానే ఉన్నట్లుంది, కదా? ఇది పోర్ట్ 80ని తనిఖీ చేస్తుంది, ఒకవేళ క్రాష్ అయితే రీస్టార్ట్ అవుతుంది. 5 సార్లు రీస్టార్ట్ చేసిన తర్వాత కూడా క్రాష్ అయితే, టైమ్ అవుట్ అవుతుంది.
సమస్య ఏమిటంటే, మీ Apache2 పోర్ట్ 80లో అసలు రన్ అవ్వట్లేదు.
ఇది HestiaCP యొక్క ఒక లోపం, మరియు చాలా మంది ఇందులో పడటానికి మూల కారణం కూడా ఇదే. HestiaCP యొక్క డిఫాల్ట్ ఆర్కిటెక్చర్ అనేది Nginx + Apache2 లతో కూడిన ఒక రివర్స్ ప్రాక్సీ. ఇందులో ముందువైపు Nginx 80 మరియు 443 పోర్ట్లను ఆక్రమించగా, వెనుకవైపు Apache2 లోకల్ పోర్ట్ 8081 పై నడుస్తుంది.
పోర్ట్ 80లో Apache2 లైవ్నెస్ను ప్రోబ్ చేయమని మీరు మోనిట్ను అడిగితే, అది KFCని వెతకడానికి మెక్డొనాల్డ్స్కు వెళ్లినట్లు ఉంటుంది. సర్వర్ మీ వైపు శూన్యంగా చూస్తుంది, మీరిద్దరూ ఒకరినొకరు తదేకంగా చూసుకుంటారు. చివరికి, మీ సిస్టమ్ డౌన్ అయిందని మోనిట్ నిర్ధారించుకుని, తీవ్రంగా రీస్టార్ట్ చేయడం ప్రారంభిస్తుంది.
పునఃప్రారంభించిన తర్వాత కూడా, పోర్ట్ 8081 గానే ఉంటుంది. అప్పుడు మోనిట్ పోర్ట్ 80ని ప్రోబ్ చేయడానికి ప్రయత్నిస్తుంది, అది కూడా విఫలమవడంతో, అది మళ్లీ పునఃప్రారంభమవుతుంది. ఇక మరమ్మత్తుకు వీలు కాదని మోనిట్ నిర్ణయించుకుని, టైమ్ అవుట్ అయ్యే వరకు ఈ చక్రం పునరావృతమవుతుంది.
నేను దీన్ని మొదటిసారి చూసినప్పుడు నిజంగా ఆశ్చర్యపోయాను. నేను ఆన్లైన్లో చూసిన పది ట్యుటోరియల్స్లో తొమ్మిది పోర్ట్ 80ని ఉపయోగించాయి. మీరు వాటిని అనుసరించి ఉంటే, సమస్య మీలో కాదు, ఆ సమాచారాన్ని అందించిన మూలంలోనే ఉంది.

పాడైన Apache2 PID ఫైల్ కారణంగా, Monit ఆ ప్రాసెస్ను ఉనికిలో లేనిదిగా పొరపాటున గుర్తించింది.
పోర్ట్ను 80 నుండి 8081కి మార్చిన తర్వాత, సిద్ధాంతపరంగా మోనిట్ దానిని గుర్తించగలగాలి, కదా?
అయితే, వాస్తవానికి, అది ఇప్పటికీ అప్పుడప్పుడు "Execution failed " అని నివేదిస్తుంది.
చాలా సేపు కష్టపడిన తర్వాత, చివరికి కారణం చాలా సులభమని కనుగొన్నాను: PID ఫైల్ పాడైపోయింది.
ఒకసారి ఆలోచించండి, మోనిట్ (Monit) అపాచీ2 (Apache2) ను పదే పదే రీస్టార్ట్ చేస్తూ ఉంది, ప్రతిసారీ దాన్ని బలవంతంగా నిలిపివేసి, తిరిగి ప్రారంభిస్తూ, ఇలా చాలాసార్లు ముందుకు వెనుకకు వెళ్తోంది. ఈ ప్రక్రియలో, /var/run/apache2/apache2.pid ఫైల్ 0 బైట్లుగా మారిపోయి ఉండవచ్చు.
మరో మాటలో చెప్పాలంటే, ఫైల్ ఇంకా అక్కడే ఉంది, కానీ అది ఖాళీగా ఉంది.
మోనిట్ ఈ ఫైల్ను చదివినప్పుడు, దానికి ఏమీ కనిపించదు. మీ అపాచీ2 నేపథ్యంలో ఎటువంటి సమస్య లేకుండా సరిగ్గా నడుస్తున్నప్పటికీ, అది దానిని గుర్తించదు; ఆ ప్రాసెస్ ఉనికిలో ఉందని మోనిట్ భావించదు.
ఇది చూసినప్పుడు నేను ఒక్క క్షణం మాటలు రాలేకపోయాను.
ఇది ఒక ప్రతిష్టంభన. మోనిట్ అపాచీ 2 ఇన్స్టాన్స్ను గుర్తించడంలో విఫలమై, అపాచీ2ను పునఃప్రారంభించి, ఆ పునఃప్రారంభ ప్రక్రియలో PID ఫైల్ను కరప్ట్ చేసి, తదుపరి గుర్తింపులో విఫలమై, మళ్లీ పునఃప్రారంభమవుతుంది. టైమ్అవుట్ అయ్యే వరకు ఈ చక్రం కొనసాగుతుంది.
HestiaCP వాతావరణంలో Apache2 పర్యవేక్షణ కోసం సమస్య పరిష్కారం మరియు మరమ్మత్తు దశలు
నిజం చెప్పాలంటే, దర్యాప్తు ప్రక్రియ సంక్లిష్టమైనది కాదు, కానీ ఏ దిశలో దర్యాప్తు చేయాలో మీకు తెలిసి ఉండాలి.
మీ Apache2 ఏ పోర్ట్లో వింటుందో నిర్ధారించుకోవడం మొదటి దశ. దీనికోసం టెర్మినల్లో ఒక కమాండ్ను టైప్ చేయండి.
netstat -tulpn | grep apache2ప్రత్యామ్నాయంగా, మీరు `ss` కమాండ్ను ఉపయోగించవచ్చు; ఫలితం అదే విధంగా ఉంటుంది.
ss -tulpn | grep apache2మీరు ఇలాంటి అవుట్పుట్ను చూస్తారు.
tcp 0 0 127.0.0.1:8081 0.0.0.0:* LISTEN 2942372/apache2అది 80 కాదు, 8081 అని నిర్ధారించబడింది. సమస్యకు మూలం అదే.
రెండవ దశ పాడైన PID ఫైల్ను రిపేర్ చేయడం. ఇది మరింత సులభమైనది.
monit unmonitor apache2
systemctl restart apache2
cat /var/run/apache2/apache2.pidమొదట, మీరు పనులను సరిచేస్తున్నప్పుడు అంతరాయం కలగకుండా ఉండేందుకు మోనిట్ పర్యవేక్షణను పాజ్ చేయండి. ఆ తర్వాత, ఒక శుభ్రమైన PIDని తిరిగి వ్రాయడానికి వీలుగా Apache2ను పునఃప్రారంభించండి. చివరగా, ఫైల్ కంటెంట్ను తనిఖీ చేయడానికి `cat`ను ఉపయోగించండి; అందులో ఖాళీ స్ట్రింగ్ కాకుండా, సంఖ్యల స్ట్రింగ్ ఉండాలి.
ఈ దశ పూర్తయిన తర్వాత, సమస్య ప్రాథమికంగా పరిష్కారమైనట్లే.

మోనిట్ సాంప్రదాయ అనుకూల మరియు దూకుడు రక్షణ కాన్ఫిగరేషన్ల తులనాత్మక విశ్లేషణ
మోనిట్తో అపాచీ2ను కాన్ఫిగర్ చేయడంపై ఆన్లైన్ ట్యుటోరియల్స్ సాధారణంగా రెండు వర్గాలుగా విభజించబడతాయి.
ఒక రకం "సాంప్రదాయ అనుసరణ రకం", ఇది ఎక్కువ సంక్లిష్టమైన పరిమితులను జోడించకుండా సేవలను నిర్వహించడానికి మరియు స్థానిక పోర్ట్లను తనిఖీ చేయడానికి `service` కమాండ్ను ఉపయోగిస్తుంది. ఈ కాన్ఫిగరేషన్ను HestiaCPలో కేవలం పోర్ట్ను మార్చడం ద్వారా ఉపయోగించవచ్చు మరియు ఇది సాపేక్షంగా స్థిరంగా ఉంటుంది.
మరొక విధానం "తీవ్రమైన రక్షణ" పద్ధతి, ఇది సేవలను నిర్వహించడానికి systemctl ను ఉపయోగిస్తుంది, చైల్డ్ ప్రాసెస్ పరిమితులను జోడిస్తుంది మరియు కఠినమైన గుర్తింపు తర్కాన్ని అమలు చేస్తుంది. ఇది చూడటానికి అద్భుతంగా ఉంది, కానీ దీనికి ఒక ప్రాణాంతక లోపం ఉంది: ఉపయోగించే స్టాప్ కమాండ్ `killall -9`.
`killall -9` అంటే ఏమిటి? దాని అర్థం, పరికరం ఏమి చేస్తున్నప్పటికీ దాన్ని బలవంతంగా నిలిపివేయడం. ఈ బలవంతపు చర్య వల్ల PID ఫైళ్లు సులభంగా పాడైపోతాయి, నేను ఇప్పుడే చెప్పిన సమస్య కూడా అదే.
నా వ్యక్తిగత అనుభవం ప్రకారం, అగ్రెసివ్ కాన్ఫిగరేషన్లో చైల్డ్ ప్రాసెస్ల సంఖ్యను పరిమితం చేయడం నిజంగా ఉపయోగకరంగా ఉంటుంది. మీ Apache2 ఒక CC దాడితో మునిగిపోయినప్పుడు, చైల్డ్ ప్రాసెస్ల సంఖ్యను పరిమితం చేయడం ద్వారా సర్వర్లో మెమరీ అయిపోకుండా నివారించవచ్చు. అయితే, `killall -9` విధానం నిజంగా ఉపయోగించలేనిది.
కాబట్టి చివరికి నేను రాజీపడి, రెండు అమరికల ప్రయోజనాలను కలిపాను.
HestiaCP Apache2 Monit ఉత్తమ అభ్యాస కాన్ఫిగరేషన్
/etc/monit/conf.d/apache2 ఫైల్ను కింది కంటెంట్తో సవరించండి.
check process apache2 with pidfile /var/run/apache2/apache2.pid
start program = "/bin/systemctl start apache2"
stop program = "/bin/systemctl stop apache2"
if children > 120 for 2 cycles then restart
if failed host 127.0.0.1 port 8081 protocol http for 2 cycles then restart
if 5 restarts within 10 cycles then timeoutఈ కొన్ని లైన్ల కాన్ఫిగరేషన్ వెనుక ఉన్న తర్కాన్ని నేను క్లుప్తంగా వివరిస్తాను.
HestiaCP యొక్క రివర్స్ ప్రాక్సీ ఆర్కిటెక్చర్కు సరిగ్గా సరిపోయేలా పోర్ట్ 8081ని రాయండి; తెలివితక్కువగా పోర్ట్ 80ని రాయడం ఆపండి.
PID ఫైల్ను పాడవకుండా ఆపడానికి, `killall -9` కు బదులుగా `systemctl stop` కమాండ్ను ఉపయోగించండి.
చైల్డ్ ప్రాసెస్ పరిమితిని జోడించారు: ఒకవేళ చైల్డ్ ప్రాసెస్ల సంఖ్య 120 దాటితే, CC దాడులను నివారించడానికి ప్రాసెస్ రెండు వరుస సైకిళ్ల తర్వాత పునఃప్రారంభమవుతుంది, కానీ ఇది మరీ తీవ్రమైనది కాదు.
వైఫల్యాలను గుర్తించే లాజిక్ను "2 సైకిల్స్" విధానాన్ని ఉపయోగించేలా సవరించడం జరిగింది. అంటే, వరుసగా రెండు వైఫల్యాలు సంభవించిన తర్వాత మాత్రమే రీస్టార్ట్ అవుతుంది, దీనివల్ల ఫాల్స్ పాజిటివ్లు తగ్గుతాయి. కేవలం ఒక వైఫల్యం గుర్తించిన తర్వాతే రీస్టార్ట్ అయ్యే పాత కాన్ఫిగరేషన్, నిజం చెప్పాలంటే, కొంచెం అతి సున్నితంగా ఉండేది.
తుది టైమ్అవుట్ పరిమితిని 10 సైకిళ్లలోపు 5 రీస్టార్ట్లకు సడలించడం జరిగింది, ఇది తగినంత ఫాల్ట్ టాలరెన్స్ను మిగులుస్తుంది.
హెస్టియాసిపి పర్యవేక్షణ పర్యవేక్షణకాన్ఫిగరేషన్ సమస్య పరిష్కార సారాంశం మరియు అనుభవాల పంచుకోవడం
కాన్ఫిగరేషన్ మార్పులు చేసిన తర్వాత, నేను అపాచీ2ను పర్యవేక్షించాను మరియు ప్యానెల్ చివరకు ఆకుపచ్చ "ఓకే" సూచికను చూపించింది.
ఆ సమయంలో నా భావాలను ఎలా వర్ణించాలి? రెండు రోజుల పాటు ఒక బగ్తో కుస్తీ పట్టి, చివరికి దానికి కారణం ఒకే ఒక్క కాన్ఫిగరేషన్ లైన్లో ఉన్న లోపమే అని తేలినట్లుగా ఉంది. అది ఒకేసారి నిరాశనూ, నవ్వునూ కలిగించింది.
మోనిట్ అనేది దానికదే ఒక మంచి విషయం, మరియు డీమన్లను పర్యవేక్షించడం అనేది ప్రతి సర్వర్ చేయవలసిన పని. కానీ సమస్య ఏమిటంటే, చాలా ఆన్లైన్ ట్యుటోరియల్స్ "అపాచీ2 ప్రత్యేకంగా పోర్ట్ 80ని ఉపయోగిస్తుంది" అనే ఊహపై ఆధారపడి ఉంటాయి, అయితే హెస్టియాసీపీ రివర్స్ ప్రాక్సీని ఉపయోగిస్తుంది, అంటే ఈ ఊహ నిజం కాదు.
మీరు సూచనలను పాటిస్తే, సమస్య మీది కాదు; ఆ ట్యుటోరియల్ మీ సందర్భానికి భిన్నమైన సందర్భానికి వర్తించడమే అసలు సమస్య.
కాబట్టి మీరు కూడా HestiaCPని ఉపయోగిస్తూ, Apache2ని పర్యవేక్షించడానికి Monitతో పని చేస్తుంటే, కేవలం రెండు విషయాలు గుర్తుంచుకోండి: పోర్ట్ను 8081కి మార్చండి, మరియు దానిని ఆపడానికి `killall -9` కాకుండా `systemctl` కమాండ్ను ఉపయోగించండి. మీరు ఈ రెండు పనులు చేస్తే, ఇకపై వచ్చే ఎలాంటి సమస్యలనైనా నివారించగలరు.
మీరు ఇంతవరకు చదివారు కాబట్టి, ఇది మీకు ఉపయోగకరంగా అనిపిస్తే, దయచేసి లైక్ చేసి షేర్ చేయండి. మీరు అప్డేట్లను ముందుగా పొందాలనుకుంటే, నన్ను ఫాలో కూడా అవ్వొచ్చు!
నా వ్యాసం చదివినందుకు ధన్యవాదాలు. మళ్ళీ కలుద్దాం.
చెన్ వీలియాంగ్ బ్లాగ్ ( https://www.chenweiliang.com/ ) లో పంచుకున్న "HestiaCP Apache2 తరచుగా క్రాష్ అవుతోందా? Monit ఆటోమేటెడ్ మానిటరింగ్ మరియు ట్రబుల్షూటింగ్ గైడ్ (పూర్తి కాన్ఫిగరేషన్తో)" అనే వ్యాసం మీకు ఉపయోగకరంగా ఉంటుందని ఆశిస్తున్నాము.
ఈ వ్యాసం యొక్క లింక్ను పంచుకోవడానికి సంకోచించకండి: https://www.chenweiliang.com/cwl-34457.html
