Damweiniau mynych Apache2 gyda HestiaCP? Canllaw monitro a datrys problemau awtomataidd Monit (gyda ffurfweddiad cyflawn)

Damweiniau Apache2 mynych neu fethiannau ailgychwyn awtomatig Monit mewn amgylcheddau HestiaCP ? Mae'r erthygl hon yn darparu canllaw ymarferol i osgoi peryglon cyffredin wrth fonitro Apache2 gyda Monit, gan ddadansoddi problemau cyffredin fel camliniad llwybr PID a rhwystro caniatâd yn fanwl, a chynnig ffeiliau ffurfweddu awtomeiddio Monit o safon gynhyrchu. Meistroli technegau cynnal a chadw gweinydd argaeledd uchel nawr a chyflawni adferiad awtomatig ail lefel o fethiannau!

Y peryglon a wynebais wrth ddefnyddio Monit i fonitro Apache2

Ddydd Gwener diwethaf, rhoddodd y gweinydd rybudd Monit i mi yng nghanol y nos.

Edrychais ar y panel mewn penbleth, ac yng ngholofn statws apache2, roedd Timeout coch.

Damweiniau mynych Apache2 gyda HestiaCP? Canllaw monitro a datrys problemau awtomataidd Monit (gyda ffurfweddiad cyflawn)

Meddyliais amdano am ychydig. Ychwanegais fonitro Monit at y gweinydd yn ystod y dydd, ac fe gopïais a gludais y ffurfweddiad o diwtorial ar-lein. Ni ddylai fod unrhyw broblemau, iawn?

Y bore wedyn, daeth yr amser allan eto. Ar ôl y drydedd dro, rhoddodd y Monitor y gorau iddi, ac roedd y panel yn dangos "Heb ei fonitro".

Dw i...

Rhaid i mi gyfaddef, wnes i ddim ei gymryd o ddifrif ar y dechrau. Monitro Apache2? Gallwch ddod o hyd i dunelli o gyfluniadau templed ar-lein, dim ond copïo a gludo. Ond fe wnaeth y broses gludo honno fy ngwneud yn gandryll iawn.

Achos sylfaenol y gwrthdaro rhwng pensaernïaeth ddiofyn HestiaCP a phorthladdoedd Monit

Gadewch i mi ddangos i chi yn gyntaf y ffurfweddiad a achosodd gymaint o drafferth i mi, fel y gallwch weld a yw'n union yr un fath â'r fersiwn rydych chi wedi'i gweld.

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

Mae'n ymddangos yn iawn, iawn? Mae'n gwirio porthladd 80, ac os yw'n chwalu, mae'n ailgychwyn. Os yw'n dal i chwalu ar ôl 5 ailgychwyn, mae'n dod i ben amser.

Y broblem yw, nid yw eich Apache2 hyd yn oed yn rhedeg ar borthladd 80.

Dyma fagl HestiaCP, a gwraidd yr achos pam mae llawer o bobl yn syrthio iddo. Pensaernïaeth ddiofyn HestiaCP yw dirprwy gwrthdro o Nginx + Apache2, gyda Nginx yn meddiannu porthladdoedd 80 a 443 o'i flaen, ac Apache2 yn rhedeg ar y porthladd lleol 8081 yn y cefn.

Os gofynnwch i Monit archwilio bywiogrwydd Apache2 ar borthladd 80, mae fel mynd i McDonald's i ddod o hyd i KFC. Mae'r gweinydd yn edrych arnoch chi'n wag, ac rydych chi'ch dau yn syllu ar eich gilydd. Yn y diwedd, mae Monit yn penderfynu eich bod chi i lawr ac yn dechrau ailgychwyn yn wyllt.

Ar ôl ailgychwyn, mae'r porthladd yn dal i fod yn 8081. Yna mae Monit yn ceisio archwilio porthladd 80, sydd hefyd yn methu, felly mae'n ailgychwyn eto. Mae'r cylch hwn yn ailadrodd nes bod Monit yn penderfynu ei fod y tu hwnt i atgyweirio ac yn dod i ben amser.

Pan ddes i ar draws hyn gyntaf, cefais fy syfrdanu'n wirioneddol. Roedd naw allan o ddeg tiwtorial a ddes i o hyd iddynt ar-lein yn defnyddio porthladd 80. Os gwnaethoch chi eu dilyn, nid chi oedd y broblem, ond ffynhonnell y wybodaeth ei hun.

Damweiniau mynych Apache2 gyda HestiaCP? Canllaw monitro a datrys problemau awtomataidd Monit (gyda ffurfweddiad cyflawn)

Achosodd ffeil PID Apache2 llygredig i Monit nodi ar gam nad oedd y broses yn bodoli.

Ar ôl newid y porthladd o 80 i 8081, dylai Monit allu ei ganfod yn ddamcaniaethol, iawn?

Fodd bynnag, mewn gwirionedd, mae'n dal i adrodd " Methodd y gweithredu " weithiau.

Ar ôl brwydro am amser hir, darganfyddais o'r diwedd fod y rheswm yn syml: roedd y ffeil PID wedi'i llygru.

Meddyliwch amdano, roedd Monit yn ailgychwyn Apache2 yn wyllt, gan ei ladd a'i ailgychwyn bob tro, gan fynd yn ôl ac ymlaen sawl gwaith. Yn ystod y broses hon, gallai'r ffeil /var/run/apache2/apache2.pid ddod yn 0 beit.

Hynny yw, mae'r ffeil yno o hyd, ond mae'n wag.

Pan fydd Monit yn darllen y ffeil hon, nid yw'n dod o hyd i ddim. Nid yw'n adnabod eich Apache2, hyd yn oed os yw eich Apache2 yn rhedeg yn berffaith iawn yn y cefndir; nid yw Monit yn credu bod y broses yn bodoli.

Pan welais i hyn, roeddwn i'n ddi-lefar am eiliad.

Mae hwn yn sefyllfa lle nad yw pethau wedi digwydd. Mae Monit yn methu â chanfod yr enghraifft Apache 2, yn ailgychwyn Apache2, yn llygru'r ffeil PID yn ystod y broses ailgychwyn, yn methu'r canfod nesaf, ac yn ailgychwyn eto. Mae'r cylch hwn yn parhau nes bod yr amser terfyn yn digwydd.

Camau Datrys Problemau ac Atgyweirio ar gyfer Monitro Apache2 yn Amgylchedd HestiaCP

A dweud y gwir, nid yw'r broses ymchwilio yn gymhleth, ond mae angen i chi wybod i ba gyfeiriad i ymchwilio.

Y cam cyntaf yw pennu pa borthladd mae eich Apache2 yn gwrando arno. Teipiwch orchymyn yn y derfynfa.

netstat -tulpn | grep apache2

Fel arall, gallwch ddefnyddio'r gorchymyn `ss`; mae'r effaith yr un fath.

ss -tulpn | grep apache2

Fe welwch allbwn tebyg i hyn.

tcp  0  0 127.0.0.1:8081       0.0.0.0:*  LISTEN  2942372/apache2

Mae wedi'i gadarnhau i fod yn 8081, nid 80. Dyna wreiddyn y broblem.

Yr ail gam yw atgyweirio'r ffeil PID llygredig. Mae hyn yn symlach.

monit unmonitor apache2
systemctl restart apache2
cat /var/run/apache2/apache2.pid

Yn gyntaf, oediwch fonitro Monit i'w atal rhag ymyrryd tra byddwch chi'n trwsio pethau. Yna, ailgychwynwch Apache2 i ganiatáu iddo ailysgrifennu PID glân. Yn olaf, defnyddiwch `cat` i wirio cynnwys y ffeil; dylai gynnwys llinyn o rifau, nid llinyn gwag.

Unwaith y bydd y cam hwn wedi'i gwblhau, mae'r broblem wedi'i datrys yn y bôn.

Damweiniau mynych Apache2 gyda HestiaCP? Canllaw monitro a datrys problemau awtomataidd Monit (gyda ffurfweddiad cyflawn)

Dadansoddiad Cymharol o Gyfluniadau Amddiffynnol Addasol ac Ymosodol Traddodiadol Monit

Mae tiwtorialau ar-lein ar ffurfweddu Apache2 gyda Monit fel arfer yn disgyn i ddau gategori.

Un math yw'r "math addasu traddodiadol," sy'n defnyddio'r gorchymyn `gwasanaeth` i reoli gwasanaethau a gwirio porthladdoedd lleol heb ychwanegu gormod o gyfyngiadau cymhleth. Gellir defnyddio'r cyfluniad hwn ar HestiaCP trwy newid y porthladd yn unig, ac mae'n gymharol sefydlog.

Dull arall yw'r dull "amddiffyniad ymosodol", sy'n defnyddio systemctl i reoli gwasanaethau, yn ychwanegu cyfyngiadau prosesau plant, ac yn defnyddio rhesymeg canfod llymach. Mae'n edrych yn wych, ond mae ganddo ddiffyg angheuol: y gorchymyn stop a ddefnyddir yw `killall -9`.

Beth mae `killall -9` yn ei olygu? Mae'n golygu lladd y ddyfais yn orfodol waeth beth mae'n ei wneud. Gall y llawdriniaeth grymus hon adael ffeiliau PID llygredig ar ôl yn hawdd, sef y broblem a grybwyllais i.

Fy mhrofiad personol i yw bod cyfyngu ar nifer y prosesau plentyn mewn cyfluniad ymosodol yn wirioneddol ddefnyddiol. Pan fydd eich Apache2 wedi'i lethu gan ymosodiad CC, gall cyfyngu ar nifer y prosesau plentyn atal y gweinydd rhag rhedeg allan o gof. Fodd bynnag, mae'r dull `killall -9` yn gwbl anhygyrch.

Felly yn y diwedd, fe wnes i gyfaddawdu a chyfuno manteision y ddau gyfluniad.

Ffurfweddiad Arfer Gorau Monit HestiaCP Apache2

Addaswch y ffeil /etc/monit/conf.d/apache2 gyda'r cynnwys canlynol.

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

Gadewch imi egluro'n fyr y rhesymeg y tu ôl i'r ychydig linellau ffurfweddu hyn.

Ysgrifennwch borthladd 8081 i gyd-fynd yn union â phensaernïaeth dirprwy gwrthdro HestiaCP; stopiwch ysgrifennu porthladd 80 yn ffôl.

Defnyddiwch y gorchymyn `systemctl stop` yn lle `killall -9` i atal y ffeil PID, er mwyn peidio â'i llygru.

Mae terfyn proses plant wedi'i ychwanegu: os yw nifer y plant yn fwy na 120, bydd y broses yn ailgychwyn ar ôl dau gylchred olynol i atal ymosodiadau CC, ond nid yw'n rhy ymosodol.

Mae'r rhesymeg ar gyfer canfod methiannau wedi'i haddasu i ddefnyddio dull "ar gyfer 2 gylch", sy'n golygu mai dim ond ar ôl dau fethiant olynol y caiff ailgychwyn ei sbarduno, gan leihau canlyniadau positif ffug. Roedd y ffurfweddiad blaenorol, a ailgychwynnodd ar ôl dim ond un canfod, ychydig yn rhy sensitif, a dweud y gwir.

Mae'r trothwy amser terfyn terfynol wedi'i lacio i 5 ailgychwyn o fewn 10 cylch, gan adael digon o oddefgarwch nam.

HestiaCP Monitro monitroCrynodeb Datrys Problemau Ffurfweddu a Rhannu Profiadau

Ar ôl gwneud y newidiadau ffurfweddu, fe wnes i fonitro apache2, ac yn y diwedd dangosodd y panel ddangosydd gwyrdd "Iawn".

Sut i ddisgrifio fy nheimladau ar y pryd? Roedd fel treulio dau ddiwrnod yn brwydro gyda nam, dim ond i ddarganfod mai un llinell o ffurfweddiad anghywir oedd yr achos. Roedd yn rhwystredig ac yn chwerthinllyd.

Mae Monit yn beth da ynddo'i hun, ac mae monitro daemonau yn rhywbeth y dylai pob gweinydd ei wneud. Ond y broblem yw bod llawer o diwtorialau ar-lein yn seiliedig ar y dybiaeth bod "Apache2 yn defnyddio porthladd 80 yn unig," tra bod HestiaCP yn defnyddio dirprwy gwrthdro, sy'n golygu nad yw'r dybiaeth hon yn wir.

Os dilynwch y cyfarwyddiadau, nid chi yw'r broblem; ond bod y tiwtorial yn berthnasol i senario gwahanol i'ch un chi.

Felly os ydych chi hefyd yn defnyddio HestiaCP ac yn chwarae o gwmpas gyda Monit i fonitro Apache2, cofiwch ddau beth: Newidiwch y porthladd i 8081, a defnyddiwch y gorchymyn `systemctl` i'w atal, nid `killall -9`. Os gwnewch chi'r ddau beth hyn, dylech chi allu osgoi unrhyw broblemau pellach.


Gan eich bod wedi darllen hyd yma, os oeddech chi'n ei chael hi'n ddefnyddiol, hoffwch a rhannwch hi. Os ydych chi eisiau derbyn diweddariadau yn gyntaf, gallwch chi fy nilyn i hefyd!

Diolch am ddarllen fy erthygl. Hwyl fawr.

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

Sgroliwch i'r brig