Мақала анықтамалығы
HestiaCP орталарында Apache2 жиі істен шығады немесе Monit автоматты түрде қайта іске қосылу сәтсіздіктері орын алады ма? Бұл мақалада Apache2 жүйесін Monit арқылы бақылау кезінде жиі кездесетін қателіктерден аулақ болуға, PID жолының сәйкес келмеуі және рұқсатты бұғаттау сияқты жиі кездесетін мәселелерді терең талдауға және өндірістік деңгейдегі Monit автоматтандыру конфигурация файлдарын ұсынуға арналған практикалық нұсқаулық берілген. Қазір жоғары қолжетімді серверге қызмет көрсету әдістерін меңгеріңіз және ақаулардан екінші деңгейлі автоматты қалпына келтіруге қол жеткізіңіз!
Apache2 мониторингі үшін Monit пайдалану кезінде кездескен қателіктер
Өткен жұмада офицер маған түн ортасында Monit дабылын берді.
Мен панельге таңырқай қарадым, ал apache2 күй бағанында қызыл тайм-аут пайда болды.

Мен бұл туралы біраз ойландым. Күндіз серверге Monit мониторингін қостым және онлайн оқулықтан конфигурацияны көшіріп қойдым. Ешқандай мәселе болмауы керек, солай ма?
Келесі күні таңертең ол қайтадан уақытынан бұрын жұмысын тоқтатты. Үшінші рет жұмыс істегеннен кейін монитор жай ғана жұмысын тоқтатты, ал панельде "Бақыланбайды" деген жазу пайда болды.
Мен...
Мойындаймын, басында мен бұған мән бермедім. Apache2 мониторингі? Интернеттен көптеген үлгі конфигурацияларын таба аласыз, тек көшіріп, қойыңыз. Бірақ бұл қою процесі мені қатты ашуландырды.
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 бағдарламасының жұмысын тексеруді сұрасаңыз, бұл McDonald's-қа барып KFC іздеумен бірдей. Сервер сізге ештеңе түсінбей қарайды, ал сіздер бір-біріңізге қарайсыздар. Ақырында, Монит сіздің істен шыққаныңызды анықтап, асығыс қайта іске қосады.
Қайта іске қосқаннан кейін порт әлі де 8081 болып қалады. Содан кейін Monit 80 портын тексеруге тырысады, ол да істен шығады, сондықтан ол қайтадан қайта іске қосылады. Бұл цикл Monit жөндеу мүмкін емес деп шешіп, уақыты біткенше қайталанады.
Мен бұған алғаш рет тапқан кезде, шынымен таң қалдым. Интернеттен тапқан он оқулықтың тоғызы 80 портын пайдаланды. Егер сіз оларды орындасаңыз, мәселе сізде емес, ақпарат көзінде болды.

Apache2 PID файлының зақымдалуы Monit-тің процесті жоқ деп қате анықтауына себеп болды.
Портты 80-нен 8081-ге өзгерткеннен кейін, Monit оны теориялық тұрғыдан анықтай алуы керек, солай ма?
Дегенмен, іс жүзінде ол әлі де кейде «Орындау сәтсіз аяқталды » деп хабарлайды.
Ұзақ уақыт бойы күрескеннен кейін, ақыры себебі қарапайым екенін анықтадым: PID файлы бүлінген.
Ойлап көріңізші, Monit Apache2 жүйесін қайта іске қосып, әр жолы оны бірнеше рет күштеп өшіріп, қайта іске қосып жатты. Бұл процесс кезінде /var/run/apache2/apache2.pid файлы 0 байтқа айналуы мүмкін.
Басқаша айтқанда, файл әлі де бар, бірақ бос.
Monit бұл файлды оқыған кезде ештеңе таппайды. Apache2 жүйеңіз фонда жақсы жұмыс істеп тұрса да, ол сіздің Apache2 жүйеңізді танымайды; Monit бұл процестің бар екеніне сенбейді.
Мұны көргенде, бір сәтке тілім қалмады.
Бұл тұйыққа тірелу. Monit Apache 2 данасын анықтай алмайды, Apache2 бағдарламасын қайта іске қосады, қайта іске қосу процесі кезінде 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Алдымен, жөндеу кезінде кедергі келтірмеу үшін Monit мониторингін кідіртіңіз. Содан кейін таза PID қайта жазу үшін Apache2 бағдарламасын қайта іске қосыңыз. Соңында, файл мазмұнын тексеру үшін `cat` пайдаланыңыз; онда бос жол емес, сандар жолы болуы керек.
Бұл қадам аяқталғаннан кейін, мәселе негізінен шешіледі.

Monit дәстүрлі бейімделгіш және агрессивті қорғаныс конфигурацияларының салыстырмалы талдауы
Apache2-ні Monit арқылы конфигурациялау бойынша онлайн оқулықтар әдетте екі санатқа бөлінеді.
Бір түрі - «дәстүрлі бейімделу түрі», ол қызметтерді басқару және жергілікті порттарды тым көп күрделі шектеулер қоспай тексеру үшін `service` командасын пайдаланады. Бұл конфигурацияны HestiaCP-де портты өзгерту арқылы пайдалануға болады және ол салыстырмалы түрде тұрақты.
Тағы бір тәсіл - қызметтерді басқару үшін systemctl пайдаланатын, бала процесіне шектеулер қосатын және қатаң анықтау логикасын қолданатын «агрессивті қорғаныс» әдісі. Ол керемет көрінеді, бірақ оның маңызды кемшілігі бар: қолданылатын тоқтату командасы - `killall -9`.
«killall -9» нені білдіреді? Бұл құрылғы не істеп жатқанына қарамастан, оны күштеп жою дегенді білдіреді. Бұл brute-force операциясы 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 рет қайта іске қосуға дейін босатылады, бұл ақаулыққа төзімділікті жеткілікті етеді.
HestiaCP МониторингКонфигурация ақаулықтарын жоюдың қысқаша мазмұны және тәжірибемен бөлісу
Конфигурация өзгерістерін енгізгеннен кейін, мен apache2-ні бақыладым, және панель ақырында жасыл «OK» индикаторын көрсетті.
Сол кездегі сезімімді қалай сипаттасам болады? Бұл екі күн бойы бір жәндікпен күресіп, бірақ себебін бір ғана конфигурацияның дұрыс емес екенін білгендей болды. Бұл әрі көңілсіз, әрі күлкілі болды.
Monit өз алдына жақсы нәрсе, ал демондарды бақылау әрбір сервер жасауы керек нәрсе. Бірақ мәселе көптеген онлайн оқулықтар «Apache2 тек 80 портын пайдаланады» деген болжамға негізделген, ал HestiaCP кері проксиді пайдаланады, яғни бұл болжам шындыққа жанаспайды.
Егер сіз нұсқауларды орындасаңыз, мәселе сізде емес; мәселе оқулық сіздікінен басқа сценарийге қолданылатындығында.
Сонымен, егер сіз HestiaCP қолданып, Apache2 бақылау үшін Monit-пен жұмыс істесеңіз, екі нәрсені есте сақтаңыз: портты 8081-ге өзгертіңіз және оны тоқтату үшін `killall -9` емес, `systemctl` командасын пайдаланыңыз. Егер сіз осы екі нәрсені жасасаңыз, басқа мәселелерден аулақ бола аласыз.
Осы жерге дейін оқығаннан кейін, егер сізге пайдалы болса, лайк басып, бөлісіңіз. Егер сіз алдымен жаңалықтарды алғыңыз келсе, мені де оқи аласыз!
Мақаланы оқығаныңызға рақмет. Келесі кездескенше.
Чен Вэйлиангтың блогында ( https://www.chenweiliang.com/ ) бөлісілген «HestiaCP Apache2 жиі істен шығады ма? Monit автоматтандырылған мониторингі және ақаулықтарды жою бойынша нұсқаулық (толық конфигурациямен)» мақаласы сізге пайдалы болады деп үміттенемін.
Осы мақаланың сілтемесін бөлісуден тартынбаңыз: https://www.chenweiliang.com/cwl-34457.html
