AMS Dispatcher Health Check
<- Föregående: Skrivskyddade filer
När du har en AMS-baslinje installerad som dispatcher levereras den med några kostnadsfria funktioner. En av dessa funktioner är en uppsättning hälsokontrollsskript.
Dessa skript gör att belastningsutjämnaren som AEM i stacken kan känna till vilka ben som är felfria och hålla dem i drift.
Hälsokontroll för grundläggande belastningsutjämnare
När kundtrafiken kommer via internet för att nå AEM kommer de att gå igenom en belastningsutjämnare
Alla förfrågningar som kommer via belastningsutjämnaren rundar av robin till varje instans. Belastningsutjämnaren har en inbyggd funktion för hälsokontroll som ser till att den skickar trafik till en felfri värd.
Standardkontrollen är vanligtvis en portkontroll för att se om servrarna som är målinriktade i belastningsutjämnaren lyssnar på porttrafiken är på (dvs. TCP 80 och 443)
Note:
Det här fungerar men det finns ingen riktig mätare för om AEM är hälsosam. Testar bara om Dispatcher (webbservern Apache) är igång och körs.
Hälsokontroll för AMS
För att undvika att skicka trafik till en hälsosam dispatcher som står framför en icke-hälsosam AEM skapade AMS några extrafunktioner som utvärderar benets hälsa och inte bara Dispatcher.
Hälsokontrollen består av följande delar
- 1
Load balancer
- 1
Apache web server
- 3
Apache *VirtualHost* config files
- 5
CGI-Bin scripts
- 1
AEM instance
- 1
AEM package
Vi ska ta upp vad varje stycke är utformat för och deras betydelse
AEM
För att ange om AEM fungerar måste du göra en grundläggande sidkompilering och hantera sidan. Adobe Managed Services har skapat ett grundläggande paket som innehåller testsidan. Sidan testar att databasen är aktiv och att resurserna och sidmallen kan återges.
Här är sidan. Den visar databas-ID:t för installationen
Note:
Vi ser till att sidan inte kan cachelagras. Det skulle inte kontrollera den faktiska statusen om varje gång den returnerade en cachelagrad sida!
Det här är den lätta viktslutpunkten som vi kan testa för att se att AEM är igång.
Konfiguration av belastningsutjämnare
Vi konfigurerar belastningsutjämnarna så att de pekar på en CGI-BIN-slutpunkt i stället för att använda en portkontroll.
Virtuella värddatorer för hälsoutkontroll i Apache
Virtuell CGI-BIN-värd (/etc/httpd/conf.d/available_vhosts/ams_health.vhost)
Detta är den <VirtualHost>
Apache-konfigurationsfil som gör att CGI-Bin-filerna kan köras.
Listen 81
<VirtualHost *:81>
ServerName "health"
...SNIP...
ScriptAlias /health/ "/var/www/cgi-bin/health/"
</VirtualHost>
Note:
cgi-bin-filer är skript som kan köras. Detta kan vara en sårbar attackvektor och de skript som AMS använder är inte tillgängliga för allmänheten enbart för belastningsutjämnaren för att testas.
Virtuella värdar för felfritt underhåll
/etc/httpd/conf.d/available_vhosts/000_unhealthy_author.vhost
/etc/httpd/conf.d/available_vhosts/000_unhealthy_publish.vhost
Dessa filer namnges 000_
som prefix för syfte. Det är avsiktligt konfigurerat att använda samma domännamn som den publicerade webbplatsen. Avsikten är att den här filen ska aktiveras när hälsokontrollen upptäcker ett problem med en av de AEM. Erbjud sedan en felsida istället för bara en 503 HTTP-svarskod utan någon sida. Den stjäl trafik från den normala .vhost
-filen eftersom den läses in före den .vhost
-filen och delar samma ServerName
eller ServerAlias
. Detta resulterar i sidor som är avsedda för en viss domän att gå till den ohälsosamma värden i stället för standardvärden, vilket är det normala trafikflödet.
När hälsokontrollsskripten körs loggar de ut sin aktuella hälsostatus. En gång i minuten körs ett cronjob på servern som söker efter felfria poster i loggen. Om den upptäcker att AEM inte är felfri kommer den att aktivera symbolen:
Loggpost:
# grep "ERROR\|publish" /var/log/lb/health_check.log
E, [2022-11-23T20:13:54.984379 #26794] ERROR -- : AUTHOR -- Exception caught: Connection refused - connect(2)
I, [2022-11-23T20:13:54.984403 #26794] INFO -- : [checkpublish]-author:0-publish:1-[checkpublish]
Kron som plockar upp felet och reagerar:
# grep symlink /var/log/lb/health_check_reload.log
I, [2022-11-23T20:34:19.213179 #2275] INFO -- : ADDING VHOST symlink /etc/httpd/conf.d/available_vhosts/000_unhealthy_author.vhost => /etc/httpd/conf.d/enabled_vhosts/000_unhealthy_author.vhost
Du kan kontrollera om författaren eller publicerade webbplatser kan få den här felsidan inläst genom att konfigurera inställningen för inläsningsläge i /var/www/cgi-bin/health_check.conf
# grep RELOAD_MODE /var/www/cgi-bin/health_check.conf
RELOAD_MODE='author'
Giltiga alternativ:
-
författare
- Det här är standardalternativet.
- Detta skapar en underhållssida för författaren när den inte är felfri
-
publicera
- Med det här alternativet skapas en underhållssida för utgivaren när den inte är felfri
-
alla
- Med det här alternativet skapas en underhållssida för författaren eller utgivaren eller båda om de inte är felfria
-
ingen
- Det här alternativet hoppar över den här funktionen i hälsokontrollen
När du tittar på inställningen VirtualHost
för dessa ser du att de läser in samma dokument som en felsida för varje begäran som kommer när den är aktiverad:
<VirtualHost *:80>
ServerName unhealthyauthor
ServerAlias ${AUTHOR_DEFAULT_HOSTNAME}
ErrorDocument 503 /error.html
DocumentRoot /mnt/var/www/default
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "/mnt/var/www/default">
AllowOverride None
Require all granted
</Directory>
<IfModule mod_headers.c>
Header always add X-Dispatcher ${DISP_ID}
Header always add X-Vhost "unhealthy-author"
</IfModule>
<IfModule mod_rewrite.c>
ReWriteEngine on
RewriteCond %{REQUEST_URI} !^/error.html$
RewriteRule ^/* /error.html [R=503,L,NC]
</IfModule>
</VirtualHost>
Svarskoden är fortfarande en HTTP 503
# curl -I https://we-retail.com/
HTTP/1.1 503 Service Unavailable
X-Dispatcher: dispatcher1useast1
X-Vhost: unhealthy-author
Istället för en tom sida får de den här sidan.
CGI-fackskript
Det finns fem olika skript som kan konfigureras i inställningarna för belastningsutjämnaren av din CSE som ändrar beteendet eller villkoren när en Dispatcher ska dras ut från belastningsutjämnaren.
/bin/checkauthor
Det här skriptet används för att kontrollera och logga alla förekomster det kör men returnerar bara ett fel om AEM author
inte är felfri
Note:
Tänk på att om publiceringsinstansen AEM inte är felfri så stannar dispatchern i tjänst så att trafik kan flöda till AEM författarinstans
/bin/checkpublish (default)
Det här skriptet används för att kontrollera och logga alla förekomster det kör men returnerar bara ett fel om AEM publish
inte är felfri
Note:
Tänk på att om författarinstansen AEM felfri så stannar dispatchern i tjänst så att trafik kan flöda till AEM publiceringsinstansen
/bin/checkeither
Det här skriptet används för att kontrollera och logga alla förekomster som det kommer att köra framåt, men returnerar bara ett fel om author
- eller publisher
-AEM inte är felfri
Note:
Tänk på att om publiceringsinstansen eller författarinstansen AEM felfri så skulle dispatchern sluta använda tjänsten. Betyder att om någon av dem var hälsosam så skulle den inte heller få någon trafik
/bin/checkboth
Det här skriptet används för att kontrollera och logga alla förekomster som det kommer att köra framåt, men returnerar bara ett fel om author
- och publisher
-AEM inte är felfria
Note:
Tänk på att om publiceringsinstansen eller författaren AEM instansen inte är felfri så skulle dispatchern inte sluta använda tjänsten. Det innebär att om någon av dem var ohälsosam så skulle den även i fortsättningen få trafik och ge fel till personer som begär resurser.
/bin/fresh
Skriptet kontrollerar och loggar alla instanser som körs men returnerar bara felfritt oavsett om AEM returnerar ett fel eller inte.
Note:
Det här skriptet används när hälsokontrollen inte fungerar som du vill och tillåter en åsidosättning för att behålla AEM instanser i belastningsutjämnaren.